Я не уверен, что на самом деле делает команда cbw
. У меня есть фрагмент кода:
mov ax,0FF0h
cbw
idiv ah
Как меняется значение топора после cbw?
Я не уверен, что на самом деле делает команда cbw
. У меня есть фрагмент кода:
mov ax,0FF0h
cbw
idiv ah
Как меняется значение топора после cbw?
Знак инструкции cbw
расширяет байт в слово. В этом случае он возьмет знаковый бит AL
(который оказывается равным 1) и скопирует его в каждый бит AH
.
Это означает, что два дополнительных значения AX
будут одинаковыми, но двоичное представление будет другим.
Значение AX
после инструкции cbw
будет FFF0h
(16-битное значение -16, точно так же, как AL
изначально было 8-битным -16)
AL
равен 1, поскольку он отрицательный, но меня немного смущает, почему AL
изначально 8-битный -1. Разве изначально не AL
-16 (с битом знака, равным 1)?
- person raphnguyen; 01.11.2011
AH
после расширения знака на AX исключительно странно. Он будет ошибкой для неотрицательного AL (потому что AH = 0), или он будет делиться на-1
для отрицательного AL. (Снова ошибка с#DE
для AL = 80h, потому что -128 / -1 = +128 переполняет 8-битный AL.) Это похоже на наихудшую и наиболее неэффективную попытку взять абсолютное значение AL. - person Peter Cordes   schedule 20.03.2019cbw
,cwde
,cdqe
все три используют один и тот же код операции. Так как же процессор выбираетal->ax
,ax->eax
,eax->rax
? То же самое для триплетаcwd
,cdq
,cqo
. - person Sourav Kannantha B   schedule 17.07.2021