2016-02-21 110 views
1

我需要使用指令add和adc添加兩個16位數字。我使用的微控制器是一種具有8位使用8位寄存器(彙編)添加兩個16位數字

的最大寄存器大小的ATmega32的這是我試過到目前爲止,例如,我加入了數字5438 + 6098

.include "m32def.inc" 
.org 0x0000 

init: 
ldi r16,54 
ldi r17,38 
ldi r18,60 
ldi r19,98 

start: 
add r17,r19 
adc r16,r18 

rjmp init 

如果我添加低位字節38和98 = 136這是一個8位數字,所以它存儲它完全沒有進位,但我希望它繼續,以便我可以添加54和60與進位得到115.我不知道,也許我在做錯事

+0

您應該檢查包含更高位的寄存器溢出,除非您確定這些數字不會超過2^16個無符號和2^15個符號。 –

回答

1

你在混淆/混合十進制和二進制?

你是說你想添加5498十進制和6098小數嗎?這意味着你想添加0x153E + 0x17D2。如果是這樣,你添加0x3E + 0xD2 = 0x10進行,然後你添加0x15 + 0x17 +進位= 0x2D,所以結果是0x2D10 = 11536這就是你在計算器上進行十進制加法時所得到的結果。

如果這些是十六進制數字0x5438 + 0x6098,那麼無論彙編程序(0x54應該工作)的語法如何,您都需要告訴彙編程序它們是十六進制0x54或54h或$ 54。

所以無論是哪種情況下修復即時值,我認爲你的程序將工作。

相關問題