易截截图软件、单文件、免安装、纯绿色、仅160KB

汇编看c之一,简单函数调用

简单的函数调用,通过简单的函数调用反汇编可以清楚了解如下
1.栈到底是什么,如何操纵栈的?
2.参数和临时变量是以什么形式在哪存放?
3.如何传递返回值?
举例:
#include <stdio.h>
int add(int a,int b)
{
     int c=0;
     c=a+b;
     return c;
}
int main(void)
{
     int x=0;
     int y=3;
     int z=4;
     x=add(y,z);
     return 0;
}
这是一个简单的通过调用函数计算两数之和的程序
VC6.0生成的汇编代码如下:
add函数
{
0040D750   push        ebp
//把main函数的ebp压栈,ebp=1000,esp=896
0040D751   mov         ebp,esp
//得到“新”栈基址,这里的新的意思是每个函数访问属于自己的一块栈区域,其实是相邻的内存区域,或者说栈只有一个。ebp=896,esp=896
0040D753   sub         esp,44h
//ebp=896,esp=828
0040D756   push        ebx
0040D757   push        esi
0040D758   push        edi
//ebp=896,esp=816
0040D759   lea         edi,[ebp-44h]
0040D75C   mov         ecx,11h
0040D761   mov         eax,0CCCCCCCCh
0040D766   rep stos    dword ptr [edi]
//初始化内部变量区
5:        int c=0;
0040D768   mov         dword ptr [ebp-4],0
//c放入“新”栈基址
6:        c=a+b;
0040D76F   mov         eax,dword ptr [ebp+8]
0040D772   add    &n


相关文档:

C\C++函数调用的几种方式

调用函数时,计算机常用栈来存储传递给函数的参数。
栈是一种先进后出的数据结构,栈有一个存储区、一个栈顶指针。栈顶指针指向堆栈中第一个可用的数据项(被称为栈顶)。用户可以在栈顶上方向栈中加入数据,这个操作被称为压栈(Push),压栈以后,栈顶自动变成新加入数据项的位置,栈顶指针也随之修改。用户也可以从堆栈中 ......

标准C函数之 getchar

getchar函数是定义在 stdio.h 文件中的一个输入函数。它从标准输入设备(一般是键盘)中读取一个字符。
在实际工作中,它是这样完成的:
键盘输入到计算机中的字符并不是立刻送到内存中指定位置,而是会首先缓存到一个缓冲区中。这个是计算机为了弥补不同硬件之间速度差距,而惯用的伎俩。
当在程序中第一次调用 getchar ......

《C专家编程》2.3C语言中的符号重载

C语言中许多符号是被“重载”的,有些关键字也被重载而具有好几种意义,值得注意的几个符号如下:
符号      意义
static   在函数内部,表示该变量的值在各个调用间一直保持延续性
            在函数这一级,表示该函数只对本文件可见
extern 用于 ......

C语言的一个简单算法: 26个字母随机步生成

一个简单的小程序, 原题目见<C语言程序设计-现代方法>第八章练习13.
由于自己只看到第八章, 所以, 不敢贸然使用函数等其他内容, 高手请放声大笑.
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define ROWS 10
#define COLS 10
/**
* @author: selfimpr
* @blog: http:// ......

c程序设计语言官方题解版勘误1

#include <stdio.h>
#define MAXHIST 15
#define MAXWORD 11
#define IN  1
#define OUT  0
//打印输入中单词长度的水平方向直方图,
void main()
{
 int c, i, nc, state;
 int len;     //length of each bar
 int maxvalue;  &n ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号