我学习装配8086。
我有这段代码:
.model small
.stack 100h
.data
num db 10111111b
itr db 7 ;iterations
.code
mov ax, @data
mov ds, ax
mov cl,0 ;rolls counter
mov ch,0 ;zero counter
next:
rol num, 1
jnc isZero
inc cl
cmp cl, itr
je stop
jmp next
isZero:
inc ch
jmp next
stop:
mov cl,0
add cx, 48
mov ah, 9
mov dx, cx
int 21h
.exit
end
上面的代码计算 num 变量中的零位数,当检测到零ch
寄存器增加1时。代码工作正常。
当我尝试在屏幕上打印结果时出现问题。
在这一行:
int 21h
我收到此错误:
INT 21h, AH=09h -
address: 07330
byte 24h not found after 2000 bytes.
; correct example of INT 21h/9h:
mov dx, offset msg
mov ah, 9
int 21h
ret
msg db "Hello$"
我知道为什么会出现上述错误?以及如何解决它?
答案 0 :(得分:2)
您已将结果存储在CH
中,并且因为测试数据只是一个字节,所以零位的计数将在0到8之间变化。如果使用其他DOS输出函数,则显示很容易。< / p>
add ch, 48
mov dl, ch
mov ah, 02h
int 21h
或者定义Result db " $"
并使用:
add ch, 48
mov Result, ch
mov ah, 09h
mov dx, offset Result
int 21h