【正文】
CODE ENDS END MAIN四、實驗結(jié)果2(擴展部分)程序說明能播放不同音符(1~7)和音階(高中低),SW0=1 SW1=0時低音,SW0=0 SW1=1時高音,其他情況中音。6~9 。 。No Key pressed ? JE NEXT 。reserve for future use. CMP DI,12 JE CLEAR 。Counter 0 OUT DX,AL 。MOV SI,DX 。Read Row info MOV BL,AL MOV DX,0E803H MOV AL,88H OUT DX,AL MOV AL,00H MOV DX,0E802H OUT DX,AL IN AL,DX 。 本次實驗也是本學期最后一次實驗,也是我們學到的最多的一次實驗。在對每一個版本改進的過程中,我都逐漸加深了對匯編語言的理解,鍛煉了匯編編程及應用的能力。Unknown state, terminate the program.EXIT:MOV AX,4C00H INT 21HCLEAR2: JMP CLEARMAIN ENDP 。Yes:begin to judge the key. MOV DX,0E820H XOR AL,AL OUT DX,AL POP DX 。 ADD DI,7 MOV AL,MID[DI] MOV CAT[1],0 。Is the key 0~7? JBE ISNUM 。Display notes, can display 6 a time CALL READ 。 。Char code 0~9 NUM DB 0EDH,21H,0F4H,0F1H,39H 。Reset 8255A MOV DX, 0E801H OUT DX, AL MOV DX, 0E800H OUT DX, AL MOV AH,4CH 。Music on CALL RHYME 。Initialize 8253 MOV AL,00010110B 。Rhyme, delay time in AX RETRHYME ENDP。BX is the order in BOK/RHY/TON XOR AH,AH MOV SI,AX DEC SI MOV TBOK,AL 。control time for dAX, 0FFH*188H for 。never used TRHY DB 0 COUNT DB 0DATA ENDS。SongBooK XiaoBuWuQu BOK DB 5,1,2,3,4 DB 5,1,1 DB 6,4,5,6,7 DB 1,1,1 DB 4,5,4,3,2 DB 3,4,3,2,1 DB 7,1,2,3,1 DB 2 DB 5,1,2,3,4 DB 5,1,1 DB 6,4,5,6,7 DB 1,1,1 DB 4,5,4,3,2 DB 3,4,3,2,1 DB 2,3,2,1,7 DB 1 DB 3,1,2,3,1 DB 2,5,6,7,5 DB 1,6,7,1,5 DB 4,3,4,2 DB 2,3,4,5,6,7 DB 1,7,6 DB 7,2,4 DB 5 DB 5,1,7,1 DB 6,1,7,1 DB 5,4,3 DB 2,1,7,1,2 DB 5,6,7,1,2,3 DB 4,3,2 DB 3,5,1,7 DB 1 LEN EQU $BOK 。根據(jù)計數(shù)器的性質(zhì),計數(shù)值音符與計數(shù)值對照(PDF中給出表格有誤)1(do)2(re)3(mi)4(fa)5(so)6(la)7(si)低音1221089791817264中音61544845403632高音302724222018162.擴展部分利用小鍵盤實現(xiàn)彈琴功能,并顯示彈奏的樂譜。Outer loopLOP1: MOV CX,00H 。Keep info in AL for SCASB POP DX RET READ ENDP。Yes:begin to judge the key. MOV AL,KEY[DI] MOV SI,DX MOV ID[SI],AL 。reserve for future use. CMP DI,12 JE CLEAR 。No key pressed 。 MAIN PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX MOV DX,0E823H MOV AL,16H OUT DX,ALCLEAR:XOR DX,DX 。按鍵鍵盤上,C鍵清除所有輸入,D鍵清除最近一個輸入,E鍵退出程序,返回DOS。①4種速度,由SW4~SW5控制SW5 SW4速度計數(shù)周期0 01倍速1*1FH0 11/2倍速2*1FH1 01/4倍速4*1FH1 11/6倍速6*1FH②暫停,由SW6控制(執(zhí)行程序前必須置SW6=1)SW6=1 運行SW6=0 暫停③退出,由SW7控制(執(zhí)行程序前必須置SW7=1)SW7=1 運行SW7=0 退出(返回DOS)流程圖源代碼DAT SEGMENT AddrA DW 0E800H AddrB DW 0E801H AddrC DW 0E802H AddrCTL DW 0E803H MESG DB 0,0,0,0,0,0,3DH,0DCH,8CH,8CH,0EDH,0 POINT DW MESGDAT ENDSSTA SEGMENT STACK DW 100H DUP (?)STA ENDS COD SEGMENT ASSUME CS:COD,DS:DAT,SS:STA SHOW MACRO X,Y MOV AL,X MOV DX,AddrB OUT DX,AL MOV AL,Y MOV DX,AddrA OUT DX,AL ENDM START: MOV AX,DAT MOV DS,AX MOV AX,STA MOV SS,AX MOV AL,80H。0 CALL DELAY JMP DISPLAYLZA: SHOW 01H,c2 。AH IS A COPY OF AL AND AH,80H CMP AH,80H JNZ STOP。如果完全使用8個撥碼開關(guān)控制,能在一個程序中實現(xiàn)256種燈型:只需占用數(shù)據(jù)段的256*8=2k字節(jié),代碼段幾乎不用改動。IF BIT6=0 THEN PAUSE MOV AL,AH AND AL,08H CMP AL,08H JZ GETNOT。AH IS A COPY OF ALSHAPE0: MOV AL,AH AND AL,07H CMP AL,00H JNZ SHAPE1 MOV SI,OFFSET S0 JMP SHAPEOKSHAPE1: MOV AL,AH AND AL,07H CMP AL,01H JNZ SHAPE2 MOV SI,OFFSET S1 JMP SHAPEOKSHAPE2: MOV AL,AH AND AL,07H CMP AL,02H JNZ SHAPE3 MOV SI,OFFSET S2 JMP SHAPEOKSHAPE3: MOV AL,AH AND AL,07H CMP AL,03H JNZ SHAPE4 MOV SI,OFFSET S3 JMP SHAPEOKSHAPE4: MOV AL,AH AND AL,07H CMP AL,04H JNZ SHAPE5 MOV SI,OFFSET S4 JMP SHAPEOKSHAPE5: MOV AL,AH AND AL,07H CMP AL,05H JNZ SHAPE6 MOV SI,OFFSET S5 JMP SHAPEOKSHAPE6: MOV AL,AH AND AL,07H CMP AL,06H JNZ SHAPE7 MOV SI,OFFSET S6 JMP SHAPEOKSHAPE7: MOV SI,OFFSET S7 。OR AL,0FH。1 led R to L skip 2 S4 db 7FH, 3FH, 1FH, 0FH