printf函数遵守C调用规范,即参数 从右至左 压栈,堆栈由调用者平衡
来源:互联网 发布:家电销量数据 编辑:程序博客网 时间:2024/04/30 03:40
printf函数遵守C调用规范,即参数从右至左 压栈,堆栈由调用者平衡。(这种从右至左的方式不会随着编译器,机器的不同而不同) )。
[code]
printf("%d,%d", i, i++ ); 产生的汇编码大致像下面这样:
mov eax,dword ptr [i]
push eax //最右边那个i的值被压入栈中
inc eax //i++
mov dword ptr[ i ], eax
mov edx,dword ptr [i]
push edx //第二个i的值被压入栈中
push offset string "%d,%d" //字符串 "%d,%d"的地址被压入栈中
call printf //跳转到函数print
add esp, 12 //平衡堆栈
[/code]
有几个小题帮助分析:
1.
#include <stdio.h>
int main()
{
char * p = "abcdefg";
printf("%c%", *p,*(p++));
return 0;
}
输出结果:ba
2.
#include <stdio.h>
int main()
{
char * p = "abcdefg";
printf("%c%c%c", *p,*(p++), *(++p));
return 0;
}
输出结果:bbc
3.
#include <stdio.h>
int main()
{
char * p = "abcdefg";
printf("%c%c", *p,*(p+3));
return 0;
}
输出结果:ad
- printf函数遵守C调用规范,即参数 从右至左 压栈,堆栈由调用者平衡
- 函数调用中的堆栈平衡
- 调用函数后的堆栈平衡
- nasm : 堆栈平衡的函数调用
- 函数堆栈和函数调用规范
- C函数调用与堆栈
- C函数调用与堆栈
- C语言实现printf函数,即参数可变函数原理
- C/C++函数调用时参数传递和命名规范
- C/C++ 函数调用规范
- Python调用ctypes使用C函数printf
- keil C 中调用串口函数 printf
- 简析C中的函数调用堆栈机制
- C函数调用与堆栈的变化
- 【转】C函数调用与堆栈
- C函数调用与堆栈的变化
- C函数调用与堆栈的变化
- C函数调用与堆栈的变化
- openCV--cvCvtColor函数
- 的好多好多好多废话
- Sqlite数据的制作
- Struts1、Struts2、Hibernate、Spring框架工作原理介绍
- js获得控件位置
- printf函数遵守C调用规范,即参数 从右至左 压栈,堆栈由调用者平衡
- 算法
- Java第六周作业
- Linux tcpdump命令详解
- Server.MapPath - Physical path given, virtual path expected(附源码)
- 关于结构体对齐和结构体位域的问题
- android调用远程service(一个apk调用另一个apk的service)
- [中英对照]Steve Jobs教你做战略
- Android中的线程