程序集 x86 标志标志
Assembly x86 sign flag
为什么下面的指令会设置符号标志?
mov al,0FEh
sub al,2
据我所知,AL 寄存器可以容纳 2^8 - 1 或 255。0FEh = 十进制的 254。减去2得到252,这个好像是正数
(对于 assembly/binary 算法的新手,下面可能会阐明接受的答案)
dec = bin
254 = 1111 1110
0000 0001 <- inverted bits
0000 0001 <- add 1
0000 0010 <- two's complement value (happens to = -2 --
this has nothing to do with the name two's complement)
符号标志假定操作数被视为有符号(2 的补码)值。
对于 AL,这意味着它被视为持有从 -128 到 +127 的值。
0feh,作为带符号的8位量表示-2。减去 2 得到 0fch,它(同样,作为有符号的 8 位数量)是 -4。
When/if 您可以选择,您可以将 AL 视为从 0 到 255 的持有值。但是,当您这样做时,您将 AL 视为无符号。当你处理无符号值时,你通常会忽略符号标志——它与无符号算术无关。
为什么下面的指令会设置符号标志?
mov al,0FEh
sub al,2
据我所知,AL 寄存器可以容纳 2^8 - 1 或 255。0FEh = 十进制的 254。减去2得到252,这个好像是正数
(对于 assembly/binary 算法的新手,下面可能会阐明接受的答案)
dec = bin
254 = 1111 1110
0000 0001 <- inverted bits
0000 0001 <- add 1
0000 0010 <- two's complement value (happens to = -2 --
this has nothing to do with the name two's complement)
符号标志假定操作数被视为有符号(2 的补码)值。
对于 AL,这意味着它被视为持有从 -128 到 +127 的值。
0feh,作为带符号的8位量表示-2。减去 2 得到 0fch,它(同样,作为有符号的 8 位数量)是 -4。
When/if 您可以选择,您可以将 AL 视为从 0 到 255 的持有值。但是,当您这样做时,您将 AL 视为无符号。当你处理无符号值时,你通常会忽略符号标志——它与无符号算术无关。