проблема в понимании множества инструкций языка ассемблера

м учиться 80386 изСборка ПК Полом Кауртером

  mul source
Если операнд имеет размер в байтах, он умножается на байт в регистре AL ирезультат сохраняется в 16 битах AX.

хорошо.

Если источник 16-битный, он умножается на слово в AX, а 32-битный результат сохраняется в DX: AX.

Q1: Почему DX: AX? Почему можнохранить в EAX / EDX?

imul действительно сбивает с толку

imul dest, source1
imul dest, source1, source2

альтернативный текст http://img697.imageshack.us/img697/8976/imul.gifI '

У нас проблема в понимании таблицы.

Q2: во 2-й записи таблицы. Опять же, почему DX: AX. Почему не EAX или EDX?

Теперь рассмотрим следующий фрагмент кода:

imul eax ; edx:eax = eax * eax
mov ebx, eax ; save answer in ebx
mov eax, square_msg ; square_msg db "Square of input is ", 0
call print_string ; prints the string eax
mov eax, ebx 
call print_int ;  prints the int stored in eax
call print_nl ; prints new line

Q3: Его предварительно сказано, чтоThe notation EDX:EAX means to think of the EDX and EAX registers as one 64 bit register with the upper 32 bits in EDX and the lower bits in EAX. Так что ответ также хранится в edx, верно? в приведенном выше коде мы неНе думайте о EDX, о котором мы только что говорили, о EAX. Как это все еще работает?

Q4: яУ нас проблема с остальными записями в таблице. наихудший результат умножения двух n битовых чисел (n = 8/16/32 битов) составляет 2n битов. Почему происходит сохранение результата двух 16/32-битных результатов умножения в регистре самого размера?

Ответы на вопрос(5)

Ваш ответ на вопрос