我试图弄清楚如何创建一个函数,该函数将在汇编中模拟带符号数字的算术函数。 我想返回乘以2个带符号的十六进制数字的十进制数。 出现溢出时,我很难处理。 例如:
0x51 * 0x02 = 0XA2
尽管两个操作数均为正,结果仍将为负数。如果我将其用作签名数字,正确的结果应该是什么? 我想在python中实现它。我确实进行了搜索,找到了一个可以做到这一点但没有成功的库。 我正在使用1个字节的数字长度。 到目前为止,我尝试实现的目标:
def Multiply(x1,x2):
ispositive=True
res=GetIntSignNumber(x1)*GetIntSignNumber(x2)
if x1>=0x80:
ispositive=not ispositive
if x2>=0x80:
ispositive=not ispositive
if ispositive and res>=0x80:
raise Exception('must be positive')
if not ispositive and res<0x80:
raise Exception('must be negative')
return GetIntUnSignedNumber(res)
def GetIntSignNumber(value):
if value >= CalculateHexStrToInt('80'):
return value-0x100
return value
def GetIntUnSignedNumber(value):
if value < 0:
return value+0x100
return value