gpt4 book ai didi

c - NASM x86 使用 extern printf 打印整数

转载 作者:行者123 更新时间:2023-12-02 02:46:21 24 4
gpt4 key购买 nike

我尝试在 x86 程序集中使用 printf 打印一个整数。对于格式字符串 printf(fmtstring, vals) 我已将 %d 存储为 fmtd。然后我将 1 放入 ax,2 放入 bx,添加它们并想使用调用 printf 打印结果。这是代码。

global _main

extern _printf

section .data
fmtd db "%d"

section .text

_main:
push ebp
mov ebp, esp

_begin:
mov ax, 1
mov bx, 2
add ax, bx
push ax
push fmtd
call _printf
add esp, 8

_end:
mov esp, ebp
pop ebp
ret

但是我明白了

-10485757

而不是预期的

3

你能帮我看看它有什么问题吗?

刚开始写的时候

push 3
push fmtd
call _printf

它像往常一样工作并打印 3。

谢谢

最佳答案

您需要使用完整的 32 位寄存器:

你想要这个:

mov eax, 1
mov ebx, 2
add eax, ebx
push eax
push fmtd
call _printf

输出说明 -10485757 你得到:

-10485757 十六进制为 FF6000030003 来自 push ax,它压入 eax 的低 16 位。 FF60 是堆栈中剩余的任何内容。

阅读 this SO article axeax 之间关系的详细解释。

关于c - NASM x86 使用 extern printf 打印整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54649981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com