Разбираюсь с умножением в ассемблере, почему так работает, а так нет?

Тут как и ожидается в dx : ax записывается правильный результат умножения. Код 16 битный
use16
mov ax,3h
mov bx,4h
mul bx


А здесь программа ломается во время выполнения. Код уже 32 битный, поменял только 16 на 32
use32
mov ax,3h
mov bx,4h
mul bx


Неужели что - то куда - то не умещается, хотя это очень странно, ведь разрядность больше. Если для 32 бит нужно как - то по другому умножать и делить, то не можете подсказать, где про это прочитать? В моей книге и в интернете я не могу найти.
  • Вопрос задан
  • 1183 просмотра
Пригласить эксперта
Ответы на вопрос 2
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
Если на 32 бита переходите - то уже с регистрами eax и ebx оперировать надо:
mov eax,3h
mov ebx,4h
mul ebx

иначе кто его знает что за мусор в старших битах регистров у вас хранится
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
программа ломается во время выполнения

Как ломается-то?

use32
mov ax,3h
mov bx,4h
mul bx

должно записать 12 в ax и 0 в dx и очистить флаги OF и CF. Что записывает?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы