如何在Assembly中使用for循环?

时间:2019-03-23 03:06:32

标签: assembly x86 dos

我受命编写一个代码,该代码将根据用户输入输出相等数量的“此处文本”。但是,我似乎对cmp函数感到困惑。

;Get keyboard input
mov ah, 01h 
int 21h

;Save to bl for later use
mov bl, al
jmp isa

isa:
mov ah, 09h 
mov dx, offset text 
int 21h

cmp bl, bl
jne isa
je exit

无论我输入什么数字,使用此代码获得的只是“文本”的一个输出。

编辑:我尝试过这个,但是现在我的输出是无限的:(

isa:
inc bl
mov ah, 09h 
mov dx, offset ulit 
int 21h


cmp bl, 30h
jne isa
je exit

1 个答案:

答案 0 :(得分:0)

首先,请确保在开始循环之前将BX寄存器初始化为零:

await foreach

为避免DOS中断覆盖(使用的)BX寄存器的内容,请将其保护在堆栈上(不确定DOS中断的调用约定,对我来说太早了):

...
xor bx,bx
isa:
...