Для чисел без знака вы можете расширить его нулями, добавив любое число 0 перед ним.Итак, RSI
здесь 0x0000000000000004
.SI
- это младший 16-битный бит RSI
, то есть 0x0004
.
RDI is 000000000000FFFE
EDI is 0000FFFE
DI is FFFE
RSI is 0000000000000004
ESI is 00000004
SI is 0004
Все регистры хранят номер и не содержат никаких флагов.Фактически, CPU не может даже определить, является ли число со знаком или без знака .
CPU имеет только один регистр флагов, и обычно его можно установить только в соответствии ск результату арифметической операции или операции сравнения.Например, перемещение 0xFFFE
в DI
не влияет на флаги.Вы должны использовать testw %di, %di
для сравнения DI
с самим собой, и тогда флаги будут соответственно изменены.
MOV DI, 0xFFFE ; flags are not changed
TEST DI, DI ; flags are changed according to the result of TEST
JZ .A ; will not jump because ZF (Zero Flag) is not set because DI is not zero
JS .B ; will jump because SF (Sign Flag) is set because the highest bit of DI is 1