首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从程序集调用Calling

从程序集调用Calling
EN

Stack Overflow用户
提问于 2014-03-26 10:27:39
回答 1查看 519关注 0票数 1

我想用两个整数从C调用printf函数。我的格式字符串是:

代码语言:javascript
复制
LC0:
    db "odd bits: %d, even bits: %d", 10, 0

我有整数ob和eb:

代码语言:javascript
复制
ob: DD 0
eb: DD 0

最后我要做的是:

代码语言:javascript
复制
push dword [ob]
push dword [eb]
push LC0
call printf
add esp,8

但是,这给出了结果Odd bits: [ob], Even bits: [ob, repeated],然后给了我一个分段错误。我是不是把printf函数调用错了?

编辑:我将LC1添加为db "even bits: %d", 10 0,然后重做:

代码语言:javascript
复制
push dword [ob]
push LC0
call printf
push dword [eb]
push LC1
call printf
add esp, 8

这给了我一个相反的结果,给出了eb到LC0字符串,ob给了LC1字符串,最后给出了一个分段错误。有线索吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-26 10:32:11

您没有正确调整堆栈指针。

在您的原始代码中,您正在推送12个字节,但只有“弹出”8。

在您更新的代码中,您要两次推送8个字节,即总共16个字节,但只有一次“弹出”8个字节。

至于打印值的顺序;在原始代码中,您有:

代码语言:javascript
复制
push dword [ob]  
push dword [eb]
push LC0

您已经将LC0声明为db "odd bits: %d, even bits: %d", 10, 0,因此显然您打算先打印ob。参数是向右向左推送,所以您应该在eb之前推ob

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22658083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档