【发布时间】:2016-11-30 04:44:55
【问题描述】:
我正在为装配中的 3 个循环计时而苦苦挣扎。
第一个循环应该工作 10 秒,然后跳到应该执行 2 秒的第二个循环。第三个是多工作 10 秒。
主要思想是建立一个交通信号灯。连接到并行端口的每个 LED 应使用 TASM 开启不同的时间。
红色:10 秒。
红色和橙色:2 秒
绿色:10 秒
然后再次变回红色..等等
有什么帮助吗?
我尝试使用INT 21h,函数2Ch 来计时每个循环。
我的老师告诉我这样会很好。 然而,当我尝试执行代码时,没有一个 LED 亮起。
我的代码:
.model small
.stack 100
.code
Loop_time :
mov ah,2ch
int 21h
mov ax,003ch
mul cl
mov ch,0000h
add bx,cx
mov dl,dh
mov dh,0
add bx,dx
push bx
loop_red :
mov ah,2ch
int 21h
mov ax,003ch
mul cl
mov ch,0000h
add ax,cx
mov dl,dh
mov dh,0
add ax,dx
add ax,0ah
pop bx
cmp ax,bx
jg loop_redorange
mov DX, 378h
mov AL, 1
out DX,AL
loop_redorange:
mov ah,2ch
int 21h
mov ax,003ch
mul cl
mov ch,0000h
add ax,cx
mov dl,dh
mov dh,0
add ax,dx
add ax,0ch
pop bx
cmp ax,bx
jg loop_green
mov DX, 378h
mov AL,3
out DX,AL
loop_green :
mov ah,2ch
int 21h
mov ax,003ch
mul cl
mov ch,0000h
add ax,cx
mov dl,dh
mov dh,0
add ax,dx
add ax,20h
pop bx
cmp ax,bx
jg loop_red
mov DX, 378h
mov AL, 4
out DX,AL
mov ah,4ch
int 21h
end
【问题讨论】:
-
所以你真正想要的是延迟循环或等效的,而不是对单个指令进行计时或测量性能。
-
是的!确切地 。有什么帮助吗?我的代码没有错误,但还没有工作,哈哈!
-
我们无法为您提供您未发布的代码。一个minimal reproducible example 来表明你正在尝试做什么会让这个问题变得更好。
-
非常感谢您的合作 .. 请原谅我的无知,我对整个事情都是新手 :)
-
"but it didn't work"仍然不是问题描述。请参阅 How to Ask 和 minimal reproducible example。您应该准确地描述它当前所做的事情,以及您在调试器中看到的任何有用的内容。
标签: assembly time x86 dos tasm