此寄存器携带哪些类型的标志?



我有一个无符号号码

  • 在我有0xFFFE%rdi/edi/di寄存器中
  • 在登记册中%rsi/esi/si我有0x4。

目标是做addw %di, %si

首先,我想知道...%si 中放入哪些值,为什么?我仍然不是 100% 清楚这一点。

其次,我需要知道:这个包含什么类型的标志?我读过是什么让旗帜出现,但根本不完全清楚哪些旗帜出现,或者为什么,即使书告诉我直截了当。

对于无符号数字,您可以通过在它前面添加任意数量的 0 来将其扩展为零。所以RSI这里是0x0000000000000004.SIRSI的较低 16 位,因此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, %diDI与自身进行比较,然后标志将相应地更改。

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

最新更新