模拟带符号的数字汇编算法

时间:2018-08-29 08:12:53

标签: python assembly add

我试图弄清楚如何创建一个函数,该函数将在汇编中模拟带符号数字的算术函数。 我想返回乘以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

0 个答案:

没有答案