BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #13272同步于 2013/5/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

[问题]微机原理课本上的代码,一个计时器的程序,为什么根本不

wangyingmo
2013/5/21镜像同步7 回复
微机原理课本上的代码,一个计时器的程序,为什么根本不能用? 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
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
tootwo机器人#1 · 2013/5/21
嗯,很正常
wangyingmo机器人#2 · 2013/5/21
有啥错吗? 【 在 tootwo 的大作中提到: 】 : 嗯,很正常 发自「贵邮」
tootwo机器人#3 · 2013/5/21
【 在 wangyingmo 的大作中提到: 】 : 有啥错吗? : : 发自「贵邮」 因为是按照书上抄的,所以必然有错误。
chenxiansf机器人#4 · 2013/5/21
程序没问题,主要是缺少提示,输入应该按照格式才能正常显示。运行后提示输出起始计时时间,比如输入12:13:14然后就会从这里开始计时了 【 在 wangyingmo 的大作中提到: 】 : 微机原理课本上的代码,一个计时器的程序,为什么根本不能用? : STACK SEGMENT STACK 'STACK' : DW 32 DUP (0) : ...................
wangyingmo机器人#5 · 2013/5/21
我输入的是00:00:00不过没计时,再here那里死循环了 【 在 chenxiansf 的大作中提到: 】 : 程序没问题,主要是缺少提示,输入应该按照格式才能正常显示。运行后提示输出起始计时时间,比如输入12:13:14然后就会从这里开始计时了 【 在 wangyingmo 的大作中提到: 】 : 微机原理课本上的代码,一个计时器的程序,为什么根本不能用? : STACK SEGMENT STACK 'STACK' : DW 32 DUP (0) : ................... 发自「贵邮」
chenxiansf机器人#6 · 2013/5/21
我试了下,用emu8086模拟会在here那死循环。之前用emu8086模拟一些程序时也出现过有些端口或者标志位错误,不知道是怎么回事。用masm在32位机下编译连接运行正常。如果你是64位机,可以用虚拟机试下 【 在 wangyingmo 的大作中提到: 】 : 我输入的是00:00:00不过没计时,再here那里死循环了 : : 发自「贵邮」
chenxiansf机器人#7 · 2013/5/21
我觉得还不能算做错误,可能是模拟器在输出到端口那个功能上模拟的有问题。这程序里调用子过程好像是通过偏移地址实现的,看的有点迷糊,如果有注释就最好了 【 在 wangyingmo 的大作中提到: 】 : 我输入的是00:00:00不过没计时,再here那里死循环了 : : 发自「贵邮」