该寄存器带有哪些类型的标志?

时间:2018-10-19 01:22:06

标签: assembly x86

我有一个未签名的号码

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

目标是做addw %di, %si

首先,我想知道...%si中放入了哪些值,为什么?我还不太清楚这一点。

其次,我需要知道:这个标志包含哪些类型的标志?我已经阅读了使标志出现的原因,但并不清楚是什么标志出现了,或者为什么甚至当书告诉我时还是空白。

1 个答案:

答案 0 :(得分:2)

对于无符号数字,您可以通过在其前面添加任意数量的0来对其进行零扩展。因此,RSI0x0000000000000004SIRSI的低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, %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