四、源程序代码 :
程序一:显示静态学号
DATA SEGMENT
SHOW DB 0F4H,21H,0EDH,0F1H,0D9H,0EDH ;210350的ASCII码值 COUNT EQU $-SHOW
SL DB ? DATA ENDS
11
STACK SEGMENT STACK'STACK'
DB 100H DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK
;延时子程序---------------------------------------------------- DELAY PROC
PUSH CX MOV CX,800H
DELAY1: PUSH CX ;外层循环
MOV CX,400H
DELAY2: LOOP DELAY2 ;内层循环
POP CX LOOP DELAY1 POP CX RET
DELAY ENDP
;主程序-------------------------------------------------------- START : MOV AX,DATA
MOV DS,AX
NEXT: MOV CX,COUNT ;字母个数
12
LEA BX,SHOW MOV SL,01H
AGAIN: MOV AL,80H MOV DX,0E803H
OUT DX,AL MOV AL,SL
MOV DX,0E801H OUT DX,AL MOV AL,[BX]
MOV DX,0E800H OUT DX,AL MOV AL,00H MOV DX,0E800H
OUT DX,AL INC BX SHL SL,1 LOOP AGAIN MOV AH,0BH INT 21H OR AL,AL
JZ NEXT
;设置输出端口
;数码管显示已经保存在数据段的数字;清除原有字符 BX数值,显示下一个数字
Sl左移依次向左选通数码管 ;循环此过程 13
;增加 ; OK: MOV AH,4CH
INT 21H
CODE ENDS END START
程序二:动态显示HELLO
DATA SEGMENT
MESG DB 0,0,0,0,0,0,3DH,0DCH,8CH,8CH,0EDH,0 DATA ENDS
STACK SEGMENT STACK 'STACK' DB 100 DUP(0) STACK ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK
MAIN PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX MOV AL,80H
14
MOV DX,0E803H OUT DX,AL
LOP6:MOV BX,OFFSET MESG MOV CX,07H
LOP5:MOV DX,0E8E0H ;从端口读入数据 IN AL,DX INC AL AND AL,07H XOR AH,AH
MOV DX,AX ;DX值设置为外循环次数 LOPZ:CALL DISP ;显示子程序调用 DEC DX
JNZ LOPZ ;显示当前状态直至DX=0 INC BX ;BX决定哪个数码管应被点亮 LOOP LOP5 ;重新设置数码管移动速度
JMP LOP6 ;当六种状态都结束后重新开始显示“HELLO”过程 MAIN ENDP
;显示子程序------------------------------------------------------------- DISP PROC NEAR PUSH CX PUSH DX PUSH AX
15