彙編語言(Assembly Language)是面向機器的程序設計語言。在彙編語言中,用助記符(Memoni)代替機器指令的操作碼,用地址符號(Symbol)或標號(Label)代替指令或操作數的地址,如此就增強了程序的可讀性並且降低了編寫難度,象這樣符號化的程序設計語言就是彙編語言,因此亦稱為符號語言。使用匯編語言編寫的程序,機器不能直接識別,還要由彙編程序或者叫彙編語言編譯器轉換成機器指令。彙編程序將符號化的操作代碼組裝成處理器可以識別的機器指令,這個組裝的過程稱為組合或者彙編。因此,有時候人們也把彙編語言稱為組合語言。
工具/原料
Assembly Language Masm彙編編譯器
方法/步驟
打開masm彙編編譯程序,新建一個masm源文件腳本。
DATAS SEGMENT
;此處輸入數據段代碼
DATAS ENDS
STACKS SEGMENT
;此處輸入堆棧段代碼
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此處輸入代碼段代碼
MOV AH,4CH
INT 21H
CODES ENDS
END START
在正文中輸入我們的程序代碼,並將文件命名為music.asm
;**********Designed by [email protected]^**************
DATA SEGMENT
msg DB 0DH,0AH,'[ 1 2 3 4 5 6 7 q] 9 :exit'
;DB 0DH,0AH,' [ q w e r t y u ]'
; DB 0DH,0AH,'_________________'
; DB 0DH,0AH,'9: EXIT'
DB 0DH,0AH,'xiaobo Assembly Language test for music',0DH,0AH,' ^Designed by [email protected]^',0DH,0AH,' ^Henan University of Economics and Law^',0DH,0AH,'please input number for music__','$'
;******Designed by [email protected]^**音調******後面用到-1判斷音樂播是否放完
sound_0 DW -1
sound_11 DW 441,-1
sound_12 DW 495,-1
sound_13 DW 556,-1
sound_14 DW 589,-1
sound_15 DW 661,-1
sound_16 DW 742,-1
sound_17 DW 833,-1
sound_1 DW 882,-1
sound_2 DW 990,-1
sound_3 DW 1112,-1
sound_4 DW 1178,-1
sound_5 DW 1322,-1
sound_6 DW 1484,-1
sound_7 DW 1655,-1
time DW 25
DATA ENDS
;********Designed by [email protected]^****************
STACK SEGMENT
Db 200 DUP ('STACK')
STACK ENDS
;*********Designed by [email protected]^**************
CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
MOV aH,0
MOV AL,00
INT 10H
;*****定義一個宏*****
SHOW MACRO b
LEA DX,b
MOV AH,9
INT 21H
ENDM
;********一個聲音宏********
onesound macro soundis,jumpis,letteris
CMP AL,letteris
JNZ jumpis
LEA SI,soundis
LEA BP,DS:time
CALL MUSIC
JMP input
ENDM
show msg
INPUT: MOV AH,01H
INT 21H
CMP AL,'9'
jnz go
mov ah,4ch
int 21h
go: onesound sound_11,a0,'q'
a0: onesound sound_12,b0,'w'
b0: onesound sound_13,c0,'e'
c0: onesound sound_14,d0,'r'
d0: onesound sound_15,e0,'t'
e0: onesound sound_16,f0,'y'
f0: onesound sound_17,g0,'u'
g0: onesound sound_1,h0,'1'
h0: onesound sound_2,i0,'2'
i0: onesound sound_3,j0,'3'
j0: onesound sound_4,k0,'4'
k0: onesound sound_5,l0,'5'
l0: onesound sound_6,m0,'6'
m0: onesound sound_7,n0,'7'
n0: onesound sound_0,o0,al
o0: jmp input
;***********Designed by [email protected]^*********發聲
GENSOUND PROC NEAR
;-------------
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
;--------------
MOV AL,0B6H
OUT 43H,AL
MOV DX,12H
MOV AX,348ch
DIV DI
OUT 42H,AL
MOV AL,AH
OUT 42H,AL
IN AL,61H
MOV AH,AL
OR AL,3
OUT 61H,AL
WAIT1: MOV CX,3314
call waitf
DELAY1: DEC BX
JNZ WAIT1
MOV AL,AH
OUT 61H,AL
;----------------
POP DI
POP DX
POP CX
POP BX
POP AX
;-------------------
RET
GENSOUND ENDP
;************Designed by [email protected]^**************
waitf proc near
push ax
waitf1:
in al,61h
and al,10h
cmp al,ah
je waitf1
mov ah,al
loop waitf1
pop ax
ret
waitf endp
;**************Designed by [email protected]^**********
MUSIC PROC NEAR
PUSH DS
SUB AX,AX
PUSH AX
FREG: MOV DI,[SI]
CMP DI,-1;音樂是否放完?
JE END_MUS
MOV BX,DS:[BP]
CALL GENSOUND
ADD SI,2
ADD BP,2
JMP FREG
END_MUS:
RET
MUSIC ENDP
CODE ENDS
;************Designed by [email protected]^**********
END START
運行我們編輯的文件,按提示輸入 例 2 5 3 5 的數字 就可以揍出音樂音符了
附歌曲童話的簡譜為
忘了有多久 在沒聽到你
51715 51715
對我說你最愛的故事
517111665
我想了很久 我開始慌了
51715 53221
是不是我 又做錯了什麼
5176 661165
你哭著對我說 童話裡都是騙人的
224433 33721171
我不可能是你的王子
171455432
也許你不會懂
224433
從你說愛我以後 我的 天空 星星都亮了
3377671 13216 66555
我願變成童話裡 你愛的那個天使
5543343 3434321
張開雙手 變成翅膀守護你
1356 6652243
你要相信相信我們會像童話故事裡 幸福和快樂是結局
135666522434321 23661171
一起寫我們的結局
23661171