AC
AC为辅助进位标志位,当计算结果第3bit,向第4bit进位或借位时AC=1
第7bit | 第6bit | 第5bit | 第4bit | 第3bit | 第2bit | 第1bit | 第0bit |
程序演示
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD
.data
forPE DWORD 0
.code
MAIN PROC
MOV ECX,17h ;不影响标志位
SUB ECX,01h ;计算第3bit时无借位 AC=0
MOV ECX,17h ;不影响标志位
SUB ECX,02h ;计算第3bit时无借位 AC=0
MOV ECX,17h ;不影响标志位
SUB ECX,04h ;计算第3bit时无借位 AC=0
MOV ECX,17h ;不影响标志位
SUB ECX,08h ;计算第3bit时向第4bit借1,AC=1
MOV ECX,08h ;不影响标志位
ADD ECX,01h ;计算第3bit时无进位 AC=0
MOV ECX,08h ;不影响标志位
ADD ECX,02h ;计算第3bit时无进位 AC=0
MOV ECX,08h ;不影响标志位
ADD ECX,04h ;计算第3bit时无进位 AC=0
MOV ECX,08h ;不影响标志位
ADD ECX,08h ;计算第3bit时向第4bit进位 AC=1
MOV ECX,07h ;不影响标志位
INC ECX ;计算第3bit时无进位 AC=0
MOV ECX,0Fh ;不影响标志位
INC ECX ;计算第3bit时向第4bit进位 AC=1
MOV ECX,11h ;不影响标志位
DEC ECX ;计算第3bit时无借位 AC=0
DEC ECX ;计算第3bit时向第4bit借位 AC=1
MOV ECX,0F00h ;不影响标志位
ADD ECX,0100h ;计算第3bit时无进位 AC=0
MOV ECX,0h ;不影响标志位
NEG ECX ;计算第3bit时无借位 AC=0
MOV ECX,0FFh ;不影响标志位
NEG ECX ;计算第3bit时向第4bit借位 AC=1
MOV ECX,01h ;不影响标志位
NEG ECX ;计算第3bit时向第4bit借位 AC=1
MOV ECX,0h
NEG ECX ;由于操作数为0,计算结果不变AC=0
MOV ECX,80000000h
NEG ECX ;由于操作数为最小有符号数,计算结果不变AC=0
INVOKE ExitProcess,0
MAIN ENDP
END MAIN
理解NEG对AC标志位的影响
从程序看出NEG是影响AC标志位的,我们可以这么理解NEG是求相反数,可以将其理解为 【0-目的操作数】.即我们可以理解NEG对AC的影响与SUB相同.除AC标志位之外,NEG对其他标志位的影响都跟SUB一致,视为【0-目的操作数】
特例:由于补码表示【最小的有符号数】和【0】的补码是其本身,所有NEG的目的操作数时【最小无符号数】和【0】时AC=0.如ECX可表示的【最小有符号数】是0x80000000,NEG ECX时AC=0