【发布时间】:2015-04-15 16:00:44
【问题描述】:
所以我是组装新手,我的教授在实际解释正在发生的事情时几乎没有帮助。
在课堂上,我们这样设置循环:
mov si, 0
mov cx, 5 (repeating the loop 5 times)
L1:
...
loop L1
我们打印这样的字符串:
mov ah, 40h ;write to
mov bx, handle ;file
mov cx, lmess2 ;number of bytes to write
mov dx, offset mess2 ;
int 21h
所以现在的问题是我需要在循环内打印一个字符串。我看到的问题是 CX 寄存器同时用于字符串打印和循环,所以当我尝试运行它时,它按预期挂起。
是否有不同的寄存器/方法可以用于循环和字符串打印?
也许我可以将 SI 寄存器的值与我想要的循环迭代次数进行比较,然后使用 JE 跳转跳出循环?但对我来说,这似乎有点奇怪。
如果有人能指引我正确的方向,我将不胜感激。我确信有一种简单的方法可以做到这一点,但我忽略了这一点。
【问题讨论】:
-
简单的方法是在打印前
push cx,在打印后pop。 -
我对解决方案 #1 做了一些小改动。当 BP 递减并变为零时,零标志打开。 JNZ = 如果不为零则跳转,因此,只要零标志关闭(BP 尚未为零),循环就会重复,并在零标志打开(BP 为零)时结束。
标签: string loops assembly masm