为什么下面的指令会设置符号标志?
mov al,0FEh
sub al,2
Run Code Online (Sandbox Code Playgroud)
据我了解,AL寄存器可以保存2^8 - 1或255。0FEh = 254(十进制)。减去 2 片叶子 252。这似乎是积极的。
(对于那些不熟悉汇编/二进制算术的人,下面可能会澄清已接受的答案)
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)
Run Code Online (Sandbox Code Playgroud)
符号标志假定操作数被视为有符号(2 的补码)值。
就 AL 而言,这意味着它被视为保持 -128 到 +127 之间的值。
0feh,当被视为有符号的 8 位量时表示 -2。减去 2 得到 0fch,它(同样是带符号的 8 位量)是 -4。
当您选择时,您可以将 AL 视为保留 0 到 255 之间的值。但是,当您这样做时,您将 AL 视为无符号。当您处理无符号值时,您通常会忽略符号标志 - 它与无符号算术无关。