0
我在ASM約指令的幾個問題簽名簽名,AVR裝配
1)添加路,RR; Rd和Rr是無符號或有符號數嗎?
2)如何在寄存器中加載帶符號的數字?我知道LDI Rd,K正在加載unisgned。
3)你能否給我提供一個具體的例子,增加兩個16位數字,它有可能是一個數字是負數嗎?
我在ASM約指令的幾個問題簽名簽名,AVR裝配
1)添加路,RR; Rd和Rr是無符號或有符號數嗎?
2)如何在寄存器中加載帶符號的數字?我知道LDI Rd,K正在加載unisgned。
3)你能否給我提供一個具體的例子,增加兩個16位數字,它有可能是一個數字是負數嗎?
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
,結果仍然是正確的,沒有任何改變,但在這種情況下,我們會有溢出(環繞)。
您可以閱讀關於2's complement on wikipedia。
Coorect我如果我錯了,號碼12345(0x3039)簽署? – user16401
這在簽名和未簽名中都是一樣的。在16位中,從'0'到'0x7fff'('32767')的數字,換句話說非負數有符號數在簽名和無符號數中具有相同的表示。 – Jester