我尝试打印号码时出错

时间:2018-05-26 21:24:41

标签: assembly x86 emu8086

我学习装配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$"

我知道为什么会出现上述错误?以及如何解决它?

1 个答案:

答案 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