MOV 8-битный 16-битный регистр (от al до bx) - PullRequest
1 голос
/ 08 ноября 2019

Как я могу исправить проблему перемещения 8-битного значения в регистр BX (16-битный)?

mov al, 10h
mov bx, al

для этого я получаю:

operands do not match: 16 bit and 8 bit register 

1 Ответ

7 голосов
/ 08 ноября 2019

Ответ зависит от того, хотите ли вы увеличить ноль или подписать расширение значения, а также от того, можете ли вы или не можете использовать инструкции, доступные начиная с 80386. Для повышения производительности следует использовать код 80386 или новее, если movzx иДоступно movsx.

расширение нуля на 8086 или 80286

Обнуление верхней половины, затем переход к нижней половине.

xor bh, bh
mov bl, al

(Или эквивалентно,и более эффективен на некоторых более поздних процессорах: xor bx, bx для обнуления целых 16 битов перед заменой младшего 8.) Знак

расширяется на 8086 или 80286

Без movsx, вы, вероятно,хотите использовать cbw, который работает только с AL -> AX. Самый простой способ переписать AH перед копированием в BX, поскольку ваше значение уже было в AL.

 cbw               ; AH = 0 or 0xFF according to top bit of AL
 mov  bx, ax

Если вы хотите сохранить AH, вы можете скопировать старый AXсначала поменяйте местами после cbw:

 mov  bx, ax      ; save the old AH (and AL)
 cbw              ; sign-extend AL into AX
 xchg bx, ax      ; BX = sign-extended result, restore original AX

Сохранение инструкций на 8086 может включать планирование того, что вы храните в каком регистре, так что оно уже находится в нужном месте для такой инструкции, как cbw или mul, которая используетнеявный регистр. К 386 Intel добавила версии некоторых из них, которые работают с любым регистром.


ноль расширяется на 80386 или новее

Используйте movzx.

movzx bx, al

Для лучшей производительности, расширение нуля до 32 бит.

movzx ebx, al

расширение знака на 80386 или новее

Использование movsx, что похоже на cbw, но работает для любых dst, src , даже включая источник памяти.

movsx bx, al

Если возможно, знак расширяется до 32 битдля лучшей производительности.

movsx ebx, al
...