返回信息流微机原理课本上的代码,一个计时器的程序,为什么根本不能用?
STACK SEGMENT STACK 'STACK'
DW 32 DUP (0)
STACK ENDS
DATA SEGMENT
COUNT DB 18
ECT DB 'ENTER CURRENT TIME:$'
BUFFER DB 9,0
TENHO DB '0'
HOUR DB '0:'
TENMIN DB '0'
MINUTE DB '0:'
TENSEC DB '0'
SECOND DB '0',0DH,'$'
STORE DW 0,0
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA,SS:STACK
PUSH DS
MOV AX,0
PUSH AX
MOV ES,AX
MOV AX,DATA
MOV DS,AX
MOV DI,OFFSET STORE
MOV AX,ES:20H
MOV [DI],AX
INC DI
INC DI
MOV AX,ES:22H
MOV [DI],AX
MOV DX,OFFSET ECT
MOV AH,9
INT 21H
MOV DX,OFFSET BUFFER
MOV AH,0AH
INT 21H
MOV BH,70H
MOV CH,0
MOV CL,0
MOV DH,24
MOV DL,79
MOV AL,0
MOV AH,7
INT 10H
MOV DI,20H
MOV AX,OFFSET TIMERX
MOV ES:[DI],AX
INC DI
INC DI
MOV AX,CS
MOV ES:[DI],AX
FOREVE:MOV AH,2
MOV BH,0
MOV DH,12
MOV DL,24
INT 10H
MOV AH,9
MOV DX,OFFSET TENHO
INT 21H
MOV AL,SECOND
HERE:CMP AL,SECOND
JE HERE
MOV AH,0BH
INT 21H
INC AL
JNZ FOREVE
MOV DI,20H
MOV AX,STORE
MOV ES:[DI],AX
INC DI
INC DI
MOV AX,STORE+2
MOV ES:[DI],AX
RET
MAIN ENDP
TIMERX PROC FAR
DEC COUNT
JNZ TIMER
MOV COUNT,18
INC SECOND
CMP SECOND,'9'
JLE TIMER
MOV SECOND,'0'
INC TENSEC
CMP TENSEC,'6'
JL TIMER
MOV TENSEC,'0'
INC MINUTE
CMP MINUTE,'9'
JLE TIMER
MOV MINUTE,'0'
INC TENMIN
CMP TENMIN,'6'
JL TIMER
MOV TENMIN,'0'
INC HOUR
CMP HOUR,'9'
JA ADJHO
CMP HOUR,'3'
JBE TIMER
CMP TENHO,'1'
JBE TIMER
MOV HOUR,'0'
MOV TENHO,'0'
JMP TIMER
ADJHO:INC TENHO
MOV HOUR,'0'
TIMER:MOV AL,20H
OUT 20H,AL
IRET
TIMERX ENDP
CODE ENDS
END MAIN
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #13272同步于 2013/5/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
[问题]微机原理课本上的代码,一个计时器的程序,为什么根本不
wangyingmo
2013/5/21镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
程序没问题,主要是缺少提示,输入应该按照格式才能正常显示。运行后提示输出起始计时时间,比如输入12:13:14然后就会从这里开始计时了
【 在 wangyingmo 的大作中提到: 】
: 微机原理课本上的代码,一个计时器的程序,为什么根本不能用?
: STACK SEGMENT STACK 'STACK'
: DW 32 DUP (0)
: ...................
我输入的是00:00:00不过没计时,再here那里死循环了
【 在 chenxiansf 的大作中提到: 】
: 程序没问题,主要是缺少提示,输入应该按照格式才能正常显示。运行后提示输出起始计时时间,比如输入12:13:14然后就会从这里开始计时了
【 在 wangyingmo 的大作中提到: 】
: 微机原理课本上的代码,一个计时器的程序,为什么根本不能用?
: STACK SEGMENT STACK 'STACK'
: DW 32 DUP (0)
: ...................
发自「贵邮」
我试了下,用emu8086模拟会在here那死循环。之前用emu8086模拟一些程序时也出现过有些端口或者标志位错误,不知道是怎么回事。用masm在32位机下编译连接运行正常。如果你是64位机,可以用虚拟机试下
【 在 wangyingmo 的大作中提到: 】
: 我输入的是00:00:00不过没计时,再here那里死循环了
:
: 发自「贵邮」
我觉得还不能算做错误,可能是模拟器在输出到端口那个功能上模拟的有问题。这程序里调用子过程好像是通过偏移地址实现的,看的有点迷糊,如果有注释就最好了
【 在 wangyingmo 的大作中提到: 】
: 我输入的是00:00:00不过没计时,再here那里死循环了
:
: 发自「贵邮」