首页 > 解决方案 > 如何在Assembly中使用for循环?

问题描述

我的任务是编写一个代码,根据用户输入输出等量的“Text Here”。但是,我似乎对我的 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

标签: assemblyx86dos

解决方案


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

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

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

...
push bx
int 21h
pop bx

推荐阅读