汇编语言中,计算机如何识别是否为有无符号运算

2025-04-04 13:32:44
推荐回答(3个)
回答(1):

  按照补码运算规则,有符号和无符号的数值结果都是一样,对于无符号数运算,影响的标志位是“进/借位”、“零”;对于有符号数运算,影响的标志位是“溢出”、“负”、“零”。
  CPU不识别操作数是否有符号,实际上也没法识别,所以CPU可以把操作数同时作为“有符号”和“无符号”进行运算,对“进/借位”、“溢出”、“负”、“零” 这4个标志都有影响。
  如果认为运算是无符号的,就判断“进/借位”、“零”标志,忽略“溢出”、“负”标志,如果认为运算是有符号的,就判断“溢出”、“负”、“零”标志,忽略“进/借位”标志。各种条件跳转指令就是这个作用。

回答(2):

让-127加1的话
那么这个结果的sf寄存器值到底是0还是1,
--是1。

为什么这样运行后sf寄存器的值默认为0(也就是有符号数的正数)
--是1。
--为什么你说是0?

不是应该为1吗 ??
--是1。

127加1等于-126,sf应该是1才对
--对。

回答(3):

按照补码运算规则,有符号和无符号的数值结果都是一样,对于无符号数运算,影响的标志位是“进/借位”、“零”;对于有符号数运算,影响的标志位是“溢出”、“负”、“零”。
CPU不识别操作数是否有符号,实际上也没法识别,所以CPU可以把操作数同时作为“有符号”和“无符号”进行运算,对“进/借位”、“溢出”、“负”、“零” 这4个标志都有影响。
如果你认为运算是无符号的,你就判断“进/借位”、“零”标志,忽略“溢出”、“负”标志,如果你认为运算是有符号的,你就判断“溢出”、“负”、“零”标志,忽略“进/借位”标志。各种条件跳转指令就是这个作用。