Как поделить числа в неполных регистрах?

Доброе утро!
Пытаюсь поделить два числа при помощи idiv. Проблема в том, что она работает с полными регистрами (ax, bx), а у меня значения хранятся в половинах регистров с типом db. Если пытаюсь делить так, то программа зависает, а если пытаюсь преобразовывать, получаются огромные значения. Как быть?
; поделим a / b
; так зависает
mov al, dl
mov bl, dh
cwd
idiv bl

; так тоже зависает, а напрямую mov ax, dl нельзя
mov ah, dl
mov ah, 00
mov bh, dh
mov bh, 00
cwd
idiv bl


Заранее спасибо!
  • Вопрос задан
  • 164 просмотра
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Помимо ручного обнуления верхних половин 16-битных регистров есть (начиная с i386) инструкции movzx и movsx, перемещающие данные между регистрами разного размера, расширяя их нулём или знаком.
Т.е.
mov al, dl
mov ah, 0

это
movzx ax, dl
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы