016-【X86-汇编语言】-标记寄存器-辅助进位标记位[AC]

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

猜你喜欢

转载自blog.csdn.net/patronwa/article/details/88718953