Ошибка при попытке печати номера - PullRequest
0 голосов
/ 27 мая 2018

Я изучаю сборку 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$"

Есть идеи, почему я получаю вышеуказанную ошибку?И как это исправить?

1 Ответ

0 голосов
/ 27 мая 2018

Вы сохранили результат в 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
...