Как использовать инструкции IMUL и MUL в emu8086?

Как использовать IMUL и MUL в emu8086? .. movzx в emu8086 не допускается

например, movzx не разрешен в emu8086, эта альтернатива позволит мне использовать инструкцию, есть ли у emu8086 что-то вроде этой альтернативы, поэтому я использую инструкции IMUL / MUL?

1  movzx bx,centerBot ;not allowed in emu8086
2
3  mov bh,00          ;alternative of line 1 
4  mov bl,centerBot   ;to move centerBot to bx
                      ;in emu8086

есть ли что-то подобное с _5 _ / _ 6_ в emu8086, чтобы я мог эти инструкции?


person Vadamadafaka    schedule 10.06.2016    source источник
comment
В вашем коде нет MUL или IMUL, и вы спрашиваете о совершенно другой инструкции. Что вы на самом деле пытаетесь сделать?   -  person Sami Kuhmonen    schedule 10.06.2016
comment
Вам не нужна альтернатива imul или mul; форма с одним операндом была частью 8086, а не добавлена ​​позже. (См. вики-страницу по тегам x86 для ссылки, показывающей, когда была добавлена ​​каждая форма каждой инструкции). Для умножения на небольшие константы времени сборки часто стоит использовать сдвиг и сложение или вычитание вместо умножения ... Или, по крайней мере, это было бы, если бы shl r, imm8 был доступен. Конечно, современные процессоры Intel имеют очень быстрое умножение (задержка в 3 цикла для imul r64, r64, imm32.)   -  person Peter Cordes    schedule 11.06.2016
comment
@peter Какая ссылка из вики-страницы тегов показывает, когда была добавлена ​​каждая форма каждой инструкции? Я пролистал его, но не нашел такой ссылки.   -  person Cody Gray    schedule 11.06.2016
comment
@CodyGray: posix.nl/linuxassembly/nasmdochtml/nasmdoca.html, an старая версия руководства NASM, до того, как они удалили объяснения каждой инструкции. (Что интересно, потому что оно включает инструкции MMX только для Cyrix, а также недокументированные Intel и другие insns). Он находится в вики-теге прямо под ссылками на руководства Intel и HTML-версию Феликса Клотье. Извините за намеренную расплывчатость / ленивость: P   -  person Peter Cordes    schedule 11.06.2016


Ответы (1)


Как вы можете видеть, просмотрев руководство по набору инструкций x86 (здесь или здесь), инструкции mul и imul поддерживаются с 8086. Следовательно, если Emu8086 фактически эмулирует Intel 8086, он должен также эмулировать обе эти инструкции. У вас не должно возникнуть проблем с их использованием.

MUL предназначен для беззнакового умножения и имеет две формы на 8086: 16-битную версию и 8-битную версию:

  • MUL r16|m16 ⇔ _5 _: _ 6_ = ax * r16|m16

  • MUL r8|m8ax = al * r8|m8

IMUL входит в те же две версии, но обрабатывает значения как подписанные.


Что касается обходного пути / эмуляции movzx, было бы лучше использовать:

xor bx, bx          ; clear BX (upper and lower bits)
mov bl, centerBot   ; copy centerBot to the lower bits of BX

Или вы можете просто сделать centerBot переменной / памятью размером с слово, что сделает возможным прямое перемещение:

mov bx, centerBot
person Ped7g    schedule 10.06.2016