C语言的汇编表示

C/C++/VC6/VS之间的关系

  • C\C++是编程语言,C++是由C而来的,是上下兼容的。
  • VC/VS是Windows下的集成开发环境。
  • VC6有利于我们去了解程序代码背后的东西,看它的汇编代码、堆栈执行等。

第一个C程序

  • 创建项目
    在这里插入图片描述
  • 创建文件
    在这里插入图片描述
  • 入口程序
    在这里插入图片描述
  • 构建(F7)
    在这里插入图片描述
  • 向程序中写汇编指令,使用__asm{} 开头来写

在这里插入图片描述

重新构建,F5运行就保存了

  • 在VC6里按F9下断点,运行后可以对程序进行反汇编
    在这里插入图片描述右键Go to …就成功来到反汇编窗口了
    在这里插入图片描述

什么是函数

函数就是一系列指令的集合,为了完成某个重复使用的特定功能

C语言中的函数格式如下:
返回类型 函数名(参数列表)
{

}

这里有一下几点主要注意:

  • 返回类型、函数名不可省略。
  • 参数列表可以省略。

函数名、参数名的命名规则:

  • 只能以字母、数字、下划线组成,并且第一个字母必须是字母或下划线。
  • 区分大小写
  • 不能使用C语言的关键字

例如:

int plus(int x,int y)
{
	return 0;
}

调用函数

汇编中的函数调用

push 1
push 2
call 内存地址

......

ret

或者

mov eax,参数1
mov ebx,参数2
call 内存地址

.....

ret

在C语音里,我们直接调用定义的函数名就可以了,例如:

int function(int x,int y)		//定义函数
{
	return 0;
}
void main()
{
function(1,2);		//调用函数
}

我们还可以看一看调用这个函数他在汇编中都干了什么
在这里插入图片描述

这个调用在汇编里我们能够看的一清二楚,无非就是两次压栈,调用了一个CALL,因为传了两个参数所以栈顶指针ESP的值+8。

要想了解函数,一定要背过下面这串汇编:

5:    //定义函数
6:    int function(int x,int y)
7:    {
00401020   push        ebp
00401021   mov         ebp,esp
00401023   sub         esp,40h
00401026   push        ebx
00401027   push        esi
00401028   push        edi
00401029   lea         edi,[ebp-40h]
0040102C   mov         ecx,10h
00401031   mov         eax,0CCCCCCCCh
00401036   rep stos    dword ptr [edi]
8:
9:        return 0;
00401038   xor         eax,eax
10:
11:   }
0040103A   pop         edi
0040103B   pop         esi
0040103C   pop         ebx
0040103D   mov         esp,ebp
0040103F   pop         ebp
00401040   ret

发布了60 篇原创文章 · 获赞 68 · 访问量 8414

猜你喜欢

转载自blog.csdn.net/qq_43573676/article/details/104605086