微机原理课程设计报告 - 图文

5.详细汇编代码

DATA SEGMENT

微db 12H, 10H, 12H, 10H, 2AH, 90H, 4AH, 0A4H, 8AH, 0BEH, 1FH, 0C4H,20H, 24H, 7FH, 0A8H, 0A0H, 28H, 2FH, 28H, 29H, 10H, 29H, 50H, 29H, 0A8H, 29H, 28H, 30H, 46H, 20H, 84H

型 db 01H, 04H, 7FH, 84H, 12H, 24H, 12H, 24H, 12H, 24H, 0FFH, 0A4H, 12H, 24H, 12H, 24H, 12H, 04H, 23H, 14H, 41H, 08H, 7FH, 0FCH, 01H,00H, 01H, 04H, 0FFH, 0FEH, 00H, 00H

计 db 00H, 40H, 20H, 40H, 10H, 40H, 10H, 40H, 00H, 40H, 00H, 44H, 0F7H, 0FEH, 10H, 40H, 10H, 40H, 10H, 40H, 10H, 40H, 12H, 40H, 14H, 40H, 18H, 40H, 10H, 40H, 00H, 40H

算 db 20H, 80H, 3EH, 0FCH, 49H, 20H, 9FH, 0F0H, 10H, 10H, 1FH, 0F0H, 10H, 10H, 1FH, 0F0H, 10H, 10H, 1FH, 0F0H, 08H, 24H, 0FFH, 0FEH, 08H, 20H, 08H, 20H, 10H, 20H, 20H, 20H

机 db 10H, 00H, 10H, 10H, 11H, 0F8H, 11H, 10H, 0FDH, 10H, 11H, 10H, 31H, 10H, 39H, 10H, 55H, 10H, 51H, 10H, 91H, 10H, 11H, 10H, 11H, 12H, 12H, 12H, 14H, 0EH, 18H, 00H

技 db 10H, 40H, 10H, 40H, 10H, 48H, 13H, 0FCH, 0FCH, 40H, 10H, 40H, 10H, 40H, 13H, 0F8H, 1AH, 08H, 31H, 10H, 0D1H, 10H, 10H, 0A0H, 10H, 40H, 10H, 0B0H, 51H, 0EH, 26H, 04H

术 db 01H, 00H, 01H, 40H, 01H, 30H, 01H, 10H, 01H, 04H, 0FFH, 0FEH, 01H, 00H, 03H, 80H, 05H, 40H, 09H, 20H, 11H, 10H, 21H, 0EH, 0C1H, 04H, 01H, 00H, 01H, 00H, 01H, 00H

课 db 00H, 08H, 43H, 0FCH, 22H, 48H, 22H, 48H, 03H, 0F8H, 02H, 48H, 0E2H, 48H, 23H, 0F8H, 20H, 40H, 2FH, 0FEH, 20H, 0E0H, 29H, 50H, 32H, 48H, 24H, 4EH, 08H, 44H, 00H, 40H

程 db 08H, 04H, 1DH, 0FEH, 0F1H, 04H, 11H, 04H, 11H, 04H, 0FFH, 04H, 11H, 0FCH, 38H, 00H, 37H, 0FEH, 54H, 20H,50H, 28H, 91H, 0FCH, 10H, 20H, 10H, 24H, 17H, 0FEH, 10H, 00H

设 db 01H, 0F0H, 21H, 10H, 11H, 10H, 11H, 10H, 01H, 10H, 02H, 0EH, 0F4H, 00H, 13H, 0F8H, 11H, 08H, 11H, 10H, 10H, 90H, 10H, 0A0H, 14H, 40H, 18H, 0B0H, 13H, 0EH, 0CH, 04H

计 Db 00H, 40H, 20H, 40H, 10H, 40H, 10H, 40H, 00H, 40H, 00H, 44H, 0F7H, 0FEH, 10H, 40H, 10H, 40H, 10H, 40H, 10H, 40H, 12H, 40H, 14H, 40H, 18H, 40H, 10H, 40H, 00H, 40H

Dou0 db 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 18H, 00H, 18H, 00H, 10H, 00H, 20H, 00H, 00H, 00H, 00H, 00H

点 db 02H, 00H, 02H, 00H, 02H, 08H, 03H, 0FCH, 02H, 00H, 02H, 10H, 3FH, 0F8H, 20H, 10H, 20H, 10H, 20H, 10H, 3FH, 0F0H, 00H, 00H, 29H, 10H, 24H, 0C8H, 44H, 44H, 80H, 04H

阵 db 00H, 80H, 78H, 84H, 4FH, 0FEH, 50H, 80H, 50H, 0A0H, 61H, 20H, 51H, 28H, 4BH, 0FCH, 48H, 20H, 48H, 20H, 68H, 24H, 57H, 0FEH, 40H,

16

20H, 40H, 20H, 40H, 20H, 40H, 20H

显 db 00H, 10H, 1FH, 0F8H, 10H, 10H, 10H, 10H, 1FH, 0F0H, 10H, 10H, 10H, 10H, 1FH, 0F0H, 14H, 50H, 44H, 44H, 34H, 4CH, 14H, 50H, 04H, 40H, 04H, 44H, 0FFH, 0FEH, 00H, 00H

示 db 00H, 10H, 3FH, 0F8H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 04H, 0FFH, 0FEH, 01H, 00H, 01H, 00H, 09H, 20H, 19H, 18H, 21H, 0CH, 41H, 04H, 01H, 00H, 05H, 00H, 02H, 00H

系 db 00H, 38H, 7FH, 0C0H, 04H, 00H, 04H, 10H, 08H, 20H, 3FH, 0C0H, 01H, 00H, 02H, 20H, 04H, 10H, 3FH, 0F8H, 01H, 08H, 09H, 20H, 09H, 10H, 11H, 08H, 25H, 08H, 02H, 00H

统 db 10H, 80H, 10H, 40H, 20H, 48H, 27H, 0FCH, 48H, 80H, 0F9H, 10H, 12H, 08H, 27H, 0FCH, 41H, 24H, 0F9H, 20H, 41H, 20H, 01H, 20H, 1AH, 22H, 0E2H, 22H, 44H, 1EH, 08H, 00H

Dou2 db 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 18H, 00H, 18H, 00H, 10H, 00H, 20H, 00H, 00H, 00H, 00H, 00H

Zhang Db 09H, 00H, 0FDH, 08H, 09H, 08H, 09H, 10H, 09H, 20H, 79H, 40H,41H, 04H, 47H, 0FEH, 41H, 40H, 79H, 40H, 09H, 20H, 09H, 20H, 09H, 10H, 09H, 4EH, 51H, 84H, 21H, 00H

strmenu DB 'dot matrix display system',0AH,0DH,'1.','L',' left shift display',0AH,0DH,'2.','U',' up shift display',0AH,0DH,'3.S stop',0AH,0DH,'4.Esc Exit',0AH,0DH,0AH,0DH,'$'

OUTSET DW 0000H;用于存放字符首地址,增加程序可移植性。

COUNT DB 35;用于指示汉字的个数----------------------------------------------------------------------------------

StopFlag DB 00H;暂停标志位:用于辅助实现暂停功能。(1)如果为0收到中断后,可以MoveStep;(2)否则不行。

Status DB 00H;辅助实现第一种中断。

;为了实现“利用中断来刷屏”,需要用到两个变量。

IndexOfLine DW 0006H;行标,用来指示当前刷屏从第几行开始。用于辅助实现ShowUpward范围是0~count*16-1。当超过的时候,应该使其等于00

IndexOfWord DB 00H;汉字的指针(只能放256个汉字喽),辅助实现ShowLeftward的 MoveStep DB 00H;以每个汉字为中心,的位移量,用于Left。@:出于我们点阵的数据格式,其范围在0~16之间。

;用于恢复原中断向量 INT0A_OFF DW(?)

17

INT0A_SEG DW(?)

;Test:用于辅助做测试的变量。

Times DB 00h

DATA ENDS

CODE SEGMENT 'CODE' ASSUME DS:DATA,CS:CODE

;------------------------------------------------------------Start START: MOV DX,DATA MOV DS,DX LEA DX,wEI ;设置字符的开始位置---------------------------------------------------------------------------------------- MOV OUTSET,DX CALL InI8255 CALL Ini8253 MOV AX,3572H ;获取原中断向量 INT 21H

MOV INT0A_OFF,BX ;保存原中断向量 MOV BX,ES

MOV INT0A_SEG,BX

CLI ;关中断 MOV AX,2572H

MOV DX,SEG MoveStepLeft ;设置新的中断向量 PUSH DS MOV DS,DX

MOV DX,OFFSET MoveStepLeft INT 21H POP DS

STI ;开中断

IN AL,0A1H ;打开IRQ10 AND AL,0FBH OUT 0A1H,AL

IN AL,21H ;打开IRQ2

18

AND AL,0FBH OUT 21H,AL LEA DX,strmenu MOV AH,09H INT 21H

;刷屏。 NOTEND: MOV AH,0BH ;检查是否有键按下 INT 21H INC AL

JNZ NOTEND2 ; 若无键按下,则跳过判断

MOV AH,08H ;如有’Q’或’q’键按下,则程序退出 INT 21H

CMP AL,'s';当键入为's'的时候,停止LED滚动 JZ JStop CMP AL,'S'; JZ JStop CMP AL,1BH;当键入为Esc的时候,退出程序 JZ JEXIT CMP AL,'u';当键入U的时候,调用Up:(1)改变Status变量=2;(2)改变StopFlag;(3)改变中断表向量为“MoveLeftStep\从而实现中断移位 JZ JUp CMP AL,'U'; JZ JUp CMP AL,'l';当键入L的时候,调用Left:(1)改变Status变量=2;(2)改变StopFlag;(3)改变中断向量表为“MoveLeftStep\,从而实现中断移位 JZ JLeft CMP AL,'L'; JZ JLeft CMP AL,'Q' JZ JEXIT CMP AL,'q' JZ JEXIT NOTEND2: CMP Status,01H JZ JLeftShow;以向左的方式,刷屏 CMP Status,02H JZ JUpShow;以向上的方式刷屏 ;CALL DELAY CALL DELAY JMP NOTEND

19

JStop: CALL Stop JMP NOTEND JLeft: CALL Left JMP NOTEND JUp: CALL UP JMP NOTEND JEXIT: CALL EXIT

JLeftShow: CALL ShowLeftward ;CALL DELAY;??????????????????????也许对于cpu位的位移,这个delay最好是放在MoveStepLeft函数的内部 ;CALL MoveStepLeft;---如果中断没起作用,那就用CUP来位移。 MOV AH,2 MOV DL,'L' INT 21H JMP NOTEND

JUpShow: CALL ShowUpward ;CALL DELAY ;CALL MoveStepUp;---如果中断没起作用,那就用CUP来位移。 MOV AH,2 MOV DL,'U' INT 21H JMP NOTEND

;----------------------------------------------------------------------------根据键盘输入,改变中断向量表,从而选择是向上,还是向下移动。-----------------

20

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4