签名未签名,avr汇编

时间:2013-10-07 21:35:01

标签: assembly avr avr-gcc

我对asm

中的说明有几个问题

1)添加Rd,Rr; Rd和Rr是无符号还是有符号数?

2)如何在登记册中加载签名的数字?我知道 LDI Rd,K 正在加载unisgned。

3)你能否为我提供添加两个16位数字的具体例子,并且一个数字是否为负数是不是很有意义?

1 个答案:

答案 0 :(得分:1)

关于2的补码算法的好处是,无论操作数是否有符号,加法和减法都是相同的。程序员可以适当地解释操作数和结果。检测溢出是不同的。

我们添加12345-10123450x3039-100xfff6。我们首先添加低字节,然后使用第一个操作的进位添加高字节。

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,结果在没有任何更改的情况下仍然是正确的,但在这种情况下,我们会有溢出(环绕)。

您可以阅读2's complement on wikipedia