标题:
微机原理里面的练习程序
[打印本页]
作者:
chenmo123
时间:
2017-6-8 12:36
标题:
微机原理里面的练习程序
DIS MACRO LOCAT,CODE ;设置图形显示宏定义
PUSH DX
PUSH BX
PUSH AX
MOV DX,LOCAT ;设置光标位置
MOV BH,00
MOV AH,02H
INT 10H
MOV DL,CODE ;输出字符串
MOV AH,02H
INT 21H
POP AX
POP BX
POP DX
ENDM
DAT SEGMENT ;设置数据段
BUF DB 'INPUT START RESET END CONTINUE
;设置功能说明
BUFFER DB 10 DUP(?) ;定义缓存区
TIP DB 'M E M O R Y
;定义记忆提示
NUM DB 1
LOD EQU 0929H
DAT ENDS
COD SEGMENT ;定义代码段
START PROC FAR
ASSUME CS:COD,DS:DAT
MOV AX,DAT
MOV DS,AX
MOV DX,OFFSET BUF ;输出功能说明
MOV AH,09H
INT 21H
CALL DISMER ;记忆区提示符置光标
MOV DX,OFFSET TIP ;输出记忆提示字符
MOV AH,09H
INT 21H
CALL CLR ;图形区清屏并设置颜色
CALL CLRDAT ;秒表数字区清屏并设置颜色
CALL CLRMER ; 记忆区清屏并设置颜色
DIS 0419H,'<' ;通过宏调用显示图形
DIS 0517H,'<'
DIS 0715H,'<'
DIS 0914H,'<'
DIS 0B14H,'<'
DIS 060EH,'_'
DIS 0710H,'_'
DIS 0812H,'_'
DIS 0913H,'_'
DIS 0A14H,'_'
DIS 0915H,'_'
DIS 0816H,'_'
DIS 0718H,'_'
DIS 061AH,'_'
DIS 071CH,'*'
DIS 081EH,'*'
DIS 091FH,'*'
DIS 0B20H,'*'
DIS 0D21H,'*'
DIS 0F21H,'*'
DIS 1120H,'*'
DIS 131FH,'*'
DIS 141EH,'*'
DIS 151DH,'*'
DIS 161BH,'*'
DIS 1719H,'*'
DIS 1717H,'_'
DIS 1616H,'_'
DIS 1514H,'_'
DIS 1612H,'_'
DIS 1711H,'_'
DIS 170EH,'*'
DIS 160CH,'*'
DIS 150BH,'*'
DIS 140AH,'*'
DIS 1309H,'*'
DIS 1108H,'*'
DIS 0F07H,'*'
DIS 0D07H,'*'
DIS 0B08H,'*'
DIS 0909H,'*'
DIS 080AH,'*'
DIS 070CH,'*'
DIS 0C12H,'_'
DIS 0C13H,'_'
DIS 0C14H,'_'
DIS 0C15H,'_'
DIS 0C16H,'_'
CALL GO ;设置初植
LOAD: CALL IOSET ;光标定位
CALL HALT ;等待输入
MOV DX,0
MOV CH,0
AGAIN:
CALL TIME ;调用延时程序
MOV AL,DL ;百分之一秒加一
ADD AL,1
DAA
JC NEXT1 ;满一百进位
MOV DL,AL
JMP DISPY ;不满一百显示
NEXT1: MOV DL,0
MOV AL,DH ;秒位加一
ADD AL,1
DAA
MOV DH,AL
CMP AL,60H
JNE DISPY
CALL BELL ;满60提示铃声并进位
MOV DH,0
MOV AL,CH ;分位加一
ADD AL,1
DAA
MOV CH,AL
CMP AL,60H
JNE DISPY ;满60清零
MOV CH,0
DISPY: ;显示电子秒表
MOV BX,OFFSET BUFFER ;取缓冲区地址
MOV AL,CH
CALL TRAN ;将分位转变为ASCII码并送缓冲区
INC BX
INC BX
MOV AL,DH ;将秒位转变为ASCII码并送缓冲区
CALL TRAN
INC BX
INC BX
MOV AL,DL ;将百分之一秒位转变为ASCII码并送缓冲区
CALL TRAN
PUSH BX
PUSH CX
PUSH DX
CALL IOSET ;光标置位
MOV DX,OFFSET BUFFER ;输出缓冲区字符串
MOV AH,09H
INT 21H
POP DX
POP CX
POP BX
MOV AH,0BH ;等待键盘输入
INT 21H
AND AL,AL
JZ AGAIN
MOV AH,08H
INT 21H
CMP AL,'R' ;判断输入是否为R
JNE NEXT2 ;不是则判断是否为E
CALL MEMORY ;若是则调用记忆功能保存当前值
MOV CH,0 ;初值清零重新计数
MOV DL,0
MOV DH,0
JMP AGAIN
NEXT2:
CMP AL,'E' ;判断是否为E
JNE AGAIN ;不是则继续计数
NEXT3: ;若是则暂停计数
MOV AH,08H
INT 21H
CMP AL,'C' ;判断是否输入C
JE AGAIN ;若是则继续计数
CMP AL,'R' ;判断是否输入R
JNE NEXT3 ;若不是则继续等待输入
CALL MEMORY ;若是则调用记忆功能
CALL GO ;重新设置初值等待重新启动
CALL IOSET
MOV DX,OFFSET BUFFER
MOV AH,09H
INT 21H
JMP LOAD
RET
START ENDP
GO PROC ;设置初值子程序
MOV BX,OFFSET BUFFER
MOV AL,'0'
MOV [BX],AL
INC BX
MOV AL,'0'
MOV [BX],AL
INC BX
MOV AL,':'
MOV [BX],AL
INC BX
MOV AL,'0'
MOV [BX],AL
INC BX
MOV AL,'0'
MOV [BX],AL
INC BX
MOV AL,':'
MOV [BX],AL
INC BX
MOV AL,'0'
MOV [BX],AL
INC BX
MOV AL,'0'
MOV [BX],AL
INC BX
MOV AL,'
MOV [BX],AL
RET
GO ENDP
IOSET PROC
MOV DX,0F10H
MOV BH,00
MOV AH,02H
INT 10H
RET
IOSET ENDP
HALT PROC
MOV AH,08H
INT 21H
CMP AL,'S'
JNE HALT
RET
HALT ENDP
TRAN PROC ;十六进制转ASCII码子程序
MOV CL,AL
SHR AL,1
SHR AL,1
SHR AL,1
SHR AL,1
OR AL,30H
MOV [BX],AL
INC BX
MOV AL,CL
AND AL,0FH
OR AL,30H
MOV [BX],AL
RET
TRAN ENDP
TIME PROC ;延时子程序
PUSH CX
PUSH AX
MOV AX,0EFH
MOV CX,0FFFFH
A1:
DEC AX
JNZ A2
JMP A3
A2:
DEC CX
JNZ A2
JMP A1
A3:
POP AX
POP CX
RET
TIME ENDP
MEMORY PROC ;记忆功能子程序
PUSH DX
PUSH BX
PUSH AX
CMP NUM,10
JE X2
ADD NUM,1
X1:
MOV DX,LOD
ADD DH,NUM
MOV BH,00
MOV AH,02H
INT 10H
MOV DX,OFFSET BUFFER
MOV AH,09H
INT 21H
POP AX
POP BX
POP DX
RET
X2: CALL CLRMER
MOV NUM,1
JMP X1
MEMORY ENDP
CLR PROC ;图形区清屏并设置颜色子程序
MOV AH,06H
MOV AL,14H
MOV CX,0401H
MOV DX,1721H
MOV BH,0CH
INT 10H
RET
CLR ENDP
CLRDAT PROC ;数据区清屏并设置颜色子程序
MOV AH,6
MOV AL,1
MOV CX,0F10H
MOV DX,0F18H
MOV BH,0BH
INT 10H
RET
CLRDAT ENDP
CLRMER PROC ;记忆区清屏并设置颜色子程序
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AH,6
MOV AL,11
MOV CX,0929H
MOV DX,0F32H
MOV BH,0DH
INT 10H
POP DX
POP CX
POP BX
POP AX
RET
CLRMER ENDP
DISMER PROC ;记忆提示显示子程序
MOV AH,02H
MOV BH,00
MOV DX,0728H
INT 10H
RET
DISMER ENDP
BELL PROC ;满分钟提示音设置子程序
PUSH AX
PUSH DX
MOV AL,07H
MOV DL,AL
MOV AH,02H
INT 21H
POP DX
POP AX
RET
BELL ENDP
COD ENDS ;结束代码段
END START ;结束源程序
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1