我对asm
中的说明有几个问题1)添加Rd,Rr; Rd和Rr是无符号还是有符号数?
2)如何在登记册中加载签名的数字?我知道 LDI Rd,K 正在加载unisgned。
3)你能否为我提供添加两个16位数字的具体例子,并且一个数字是否为负数是不是很有意义?
答案 0 :(得分:1)
关于2的补码算法的好处是,无论操作数是否有符号,加法和减法都是相同的。程序员可以适当地解释操作数和结果。检测溢出是不同的。
我们添加12345
和-10
。 12345
为0x3039
,-10
为0xfff6
。我们首先添加低字节,然后使用第一个操作的进位添加高字节。
LDI R16, 0x39 ; low byte of 12345
LDI R17, 0x30 ; high byte of 12345
LDI R18, 0xf6 ; low byte of -10
LDI R19, 0xff ; high byte of -10
ADD R16, R18 ; add low bytes without carry
; R16 is now 0x39 + 0xf6 = 0x2f and carry is 1
ADC R17, R19 ; add high bytes and the carry
; R17 is now 0x30 + 0xff + 0x01 = 0x30
因此,结果为0x302f
,即12335
,是预期值。
现在,我们可以将初始-10
视为无符号数65526
,结果在没有任何更改的情况下仍然是正确的,但在这种情况下,我们会有溢出(环绕)。