Я пытаюсь понять, как работают инструкции imul и idiv микропроцессора 8086.
Я знаю это: 1. mul и div - это умножение и деление для беззнаковых чисел 2. imul и idiv, тоже умножения и деления, но для чисел со знаком.
Я искал по всей сети, и то, что я только что написал выше, это единственная информация, которую я нашел, но написано по-разному.
У меня есть это:
mov AX, 0FFCEh
idiv AH
Поскольку это байт, AL = AX / AH (результат) и AH = остаток
После инструкции я получаю AX = 0032h, очевидно, 0 остаток, а результат 32. Может кто-нибудь объяснить, как он дошел до этого результата? Мне нужно знать, как объяснить, как работает инструкция (по крупицам).
То же самое и с инструкцией imul.
У меня есть:
mov AX, 0FF10h
imul AL
Поскольку AL является байтом, результат умножения будет сохранен в AX. Почему после выполнения инструкции imul AX = 0100h это не F100h?
Я не знаю, как на самом деле процессор выполняет mul, div, imul и idiv. Если бы кто-нибудь мог проиллюстрировать мне различия, я был бы очень признателен.
Спасибо!
IMUL r/m8
-AX <- AL * r/m byte
. Итак,imul AL
умножаетAL
наAL
и сохраняет продукт вAX
. В вашем случаеAL
содержит10h
, поэтому продукт будет10h * 10h == 100h
. - person Michael   schedule 18.02.2015