我有这个汇编代码,我过去几天一直在努力。它是我的家庭作业,其条件应打印出从'A'到'J'的字符,但每个字母之间带一个星号 输出:A * B * C * .... J *。
我们应该添加的限制是我们只能使用一个数据容器dl
。另外,我们只能使用循环和跳转条件。
我大部分时间都完成了我的工作,但我一直在弄清楚为什么我的计数器cx
在我的代码中没有很好地增加。这是我的代码:
.model
.code
org 100h
s: mov ax, 3 ;
int 10h ; just clearing the screen
mov ah, 2
mov cx, 1 ; counter is just set to one for possible increment
mov dl, 'A' ; A is added to data container
int 21h ; prints out A
x: mov dl, '*' ; first asterisk is then added to container, replacing A
int 21h ; asterisk is printed out A*
mov dl, 'A' ; asterisk is replace by A in the counter
y: inc dl ;
loop y ; loops at y then increments container dl, A + 1-> B
int 21h ; prints out container, A*B
inc cx ; where the problem lies. Should increment but not
cmp dl, 'J' ; if the character in container is not above j, jumps to..
jna x ; ..where x is
int 20h ; ends but doesnt due to infinite looping, container not reaching 'J'
end s
如果增量有效,我认为会发生每次进程跳转到x然后传递给循环y,假设cx
已递增,它将循环并递增容器,具体取决于如何计数器cx
在多次递增后保持不变。这将导致容器达到超过字母J的条件。
所以这几乎是我的问题。提前感谢您提供的任何帮助。
答案 0 :(得分:3)
正如你可以通过使用调试器看到的那样增量很好。问题是你有一个loop
命令会递减CX
直到它为零。因此,递增将始终使CX
为1。
在CX
之前将loop
推送到堆栈,如果要保留该值,则将其弹出。并抓住调试器自己调试代码。
或者您只想在DL
之前增加CX
,为什么不只说ADD DL, CL
而不使用循环?