【发布时间】:2016-12-05 16:50:05
【问题描述】:
我的汇编程序有问题。我的汇编编译器是 NASM。源和输出在这张图片中:
问题是我无法使用extern C 函数printf() 打印计算中的数字。我该怎么做?
输出应该是“Ergebnis: 8”,但它不正确。
【问题讨论】:
-
你的程序是什么让你认为它应该打印一个 8?
-
val_1 和 val_2 都是 4。我在 eax 中 mov(e) val_1 并将 val_2 添加到 eax 然后我将它与结果字符串一起推入堆栈。在 C:: int a = 4; 中是这样的诠释 b = 4; printf("Ergebnis: %i", a + b);
-
mov eax, val_1不做,你认为它做。检查调试器中的反汇编。 NASM 确实使用正确的 Intel 语法,所以如果你想从内存中获取值,你必须使用[]方括号来指定。而val_1:不是“变量名”,而是“指向具有第一个字节地址的内存的指针”。加上在标签名称后使用冒号,即使在.data定义中,它也可以使您免于其他晦涩的编译问题(当您不小心碰到指令助记符时)。 -
你是如何编译这张图片中的代码的?我的编译器只给出错误。
-
我不了解你,但我的汇编器不接受 .png 文件作为源输入。也许您应该将代码发布为纯文本?