Какие типы флагов этот регистр несет? - PullRequest
0 голосов
/ 19 октября 2018

У меня есть номер без знака

  • в регистрах %rdi/edi/di У меня 0xFFFE
  • в регистрах %rsi/esi/si У меня 0x4.

цель состоит в том, чтобы сделать addw %di, %si

Во-первых, я хочу знать ... какие значения помещаются в% si и почему?Я все еще не до конца уверен в этом.

Во-вторых, мне нужно знать: какие типы флагов есть в этом?Я прочитал, что заставляет флаг появляться, но не совсем ясно, какие флаги появляются или почему, даже когда книга говорит мне в упор.

1 Ответ

0 голосов
/ 19 октября 2018

Для чисел без знака вы можете расширить его нулями, добавив любое число 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...