当我尝试打印数字时出错

Error when I try to print number

我学汇编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 寄存器增加一。代码运行良好。

我尝试在屏幕上打印结果时遇到问题。

这一行:

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$"

知道为什么会出现上述错误吗?以及如何修复它?

您已经将结果存储在CH中,因为测试数据只是一个字节,所以零位的计数将在0到8之间变化。如果您使用另一个DOS输出函数,则显示起来很容易.

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