Я пытаюсь понять, как создать функцию, которая будет эмулировать арифметическую функцию в сборке со знаковыми числами.
Я хочу вернуть десятичное число умножить 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