在使用VS2013调试x86汇编代码时,我需要检查FLAGS寄存器的内容。但是,当我在寄存器窗口中启用了“Flags”选项后,出现了以下情况:
OV = 0 UP = 0 EI = 1 PL = 1 ZR = 0 AC = 1 PE = 0 CY = 1
这些不对应于x86典型的ODITSZAPC
标志;有人能解释一下发生了什么吗?这些只是同一标志的奇怪名称吗?
我有一个64位Core i7;它会影响显示的名称吗?
在使用VS2013调试x86汇编代码时,我需要检查FLAGS寄存器的内容。但是,当我在寄存器窗口中启用了“Flags”选项后,出现了以下情况:
OV = 0 UP = 0 EI = 1 PL = 1 ZR = 0 AC = 1 PE = 0 CY = 1
这些不对应于x86典型的ODITSZAPC
标志;有人能解释一下发生了什么吗?这些只是同一标志的奇怪名称吗?
我有一个64位Core i7;它会影响显示的名称吗?
| Overflow | OV |
| Direction | UP |
| Interrupt | EI |
| Sign | PL |
| Zero | ZR |
| Auxiliary | AC |
| Parity | PE |
| Carry | CY |
当然,它们是相同的标志,还能是什么呢?
但是这些标志确实会误导人。当UP=1时,实际上是反向回退方向(STD),而当PL=1时,实际上是符号/负数。为什么VS设计师试图打破已经存在很长时间且没有问题的ASM-thing超出了我的理解范围。
同样,在GNU的gdb中,他们将指令指针(IP)称为$pc,DWORD/DD称为word(w),WORD/DW称为half-word(h),QUADWORD/DQ称为(g)来自GIANT?
C++程序员真的很奇怪,他们喜欢为了追求新奇而打破传统。