2016-12-05 98 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