我是Assembly8086的初学者(使用DosBOX)。 我们有一个任务来产生以下内容: See this image.
我尝试这样做,这是我的示例代码。
mov ah,9
lea dx,[100] // Enter a character: $
int 21h
mov ah,1
int 21h
mov bl,al
mov ah,9
lea dx,[120] // Enter a number: $
int 21h
mov ah,1
int 21h
mov [si],al
mov cx,[si]
mov ah,2 // 14e
mov dl,bl
int 21h
inc cx
loop 14e
输入数字后输入数字会出现问题。 它显示我输入的正确字符,但不会停止到所需的循环次数。它只是无限地向角色发送垃圾邮件。
编辑:::: 现在可以正确显示。我只想知道如何在下一行上打印“输入数字:$”。
因为这是发生的情况: 输入字符: d 输入数字: 4 dddd
这是编辑后的代码:
mov ah,9
lea dx,[100] // Enter a character: $
int 21h
mov ah,1
int 21h
mov bl,al
mov ah,9
lea dx,[120] // Enter a number: $
int 21h
mov ah,1
int 21h
sub al,30
mov cl,al
xor ch,ch
mov ah,2 // 150
mov dl,bl
int 21h
loop 150
答案 0 :(得分:1)
当您进入循环增加 loop
时,CX
指令减少CX
。
因此CX
的值将永远不会为零,并导致loop
指令结束。
如果您在调试器中逐条指令逐步执行代码指令,并观察CX
的值,发现这一点应该非常容易。
答案 1 :(得分:0)
输入字符: d 输入数字: 4 dddd
解决原始问题后,您表示了另一个问题。
我只想知道如何在下一行上打印“输入数字:$”。
您可以通过输出回车符(13)/换行符(10)来做到这一点。
mov ah,9
lea dx,[100] // Enter a character: $
int 21h
mov ah,1
int 21h
mov bl,al
mov dl, 13 ; Carriage return
mov ah, 02h
int 21h
mov dl, 10 ; Linefeed
mov ah, 02h
int 21h
mov ah,9
lea dx,[120] // Enter a number: $
int 21h
...