2016-12-05 72 views
0

我的程序集有問題。我的彙編編譯器是NASM。源和輸出是這樣的畫面:如何在我的彙編程序中打印數字

enter image description here

的問題是,我不能與extern C功能printf()計算打印數量。我該怎麼做?

輸出應該是「Ergebnis:8」,但它不正確。

+0

你的程序如何讓你認爲它應該打印8? –

+0

val_1和val_2都是4.我在eax中運行(e)val_1並將val_2添加到eax,然後使用結果字符串將它推入堆棧。它就像這樣在C :: int a = 4; int b = 4; printf(「Ergebnis:%i」,a + b); – Grevak

+0

如果您明確推送8而不是'eax',會發生什麼?你是否確認'eax'在推送時包含8個? –

回答

2

NASM documentation有人指出,NASM需要內存引用的方括號。當您寫入沒有括號的標籤名稱NASM時,會給出其存儲地址(或有時稱爲偏移量)。因此,mov eax, val_1這意味着eax寄存器得到val_1的抵消。當您add eax, val_2時,val_2偏移量被添加到val_1偏移量,您將看到您看到的結果。

寫來代替:

mov eax, [val_1] 
add eax, [val_2] 

你建議立即進行刪除獲得EAX 8

P.S.看來你剛剛從MASMTASM切換到NASM。 在互聯網上有很多像你這樣的切換器的指南。請參閱例如漂亮的教程herehere

+0

你似乎知道OP的程序出了什麼問題,但你只是重寫相同的錯誤!你爲什麼不寫'mov eax,[val_1]''add eax,[val_2]'? –

+0

是的,你是對的,對不起,我確定了答案 – SergeyLebedev