我的程序集有问题。我的汇编编译器是NASM。源和输出是这样的画面:如何在我的汇编程序中打印数字
的问题是,我不能与extern C
功能printf()
计算打印数量。我该怎么做?
输出应该是“Ergebnis:8”,但它不正确。
我的程序集有问题。我的汇编编译器是NASM。源和输出是这样的画面:如何在我的汇编程序中打印数字
的问题是,我不能与extern C
功能printf()
计算打印数量。我该怎么做?
输出应该是“Ergebnis:8”,但它不正确。
在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.看来你刚刚从MASM
或TASM
切换到NASM
。 在互联网上有很多像你这样的切换器的指南。请参阅例如漂亮的教程here和here。
你似乎知道OP的程序出了什么问题,但你只是重写相同的错误!你为什么不写'mov eax,[val_1]''add eax,[val_2]'? –
是的,你是对的,对不起,我确定了答案 – SergeyLebedev
你的程序如何让你认为它应该打印8? –
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
如果您明确推送8而不是'eax',会发生什么?你是否确认'eax'在推送时包含8个? –