当前位置:   article > 正文

汇编语言入门教程

汇编语言入门教程

一、汇编语言是什么

​ 汇编语言是二进制指令(操作码)的文本形式,与指令是一一对应的关系。比如加法指令00000011写成汇编语言就是ADD

二、前置知识——寄存器

​ 1、寄存器不依靠地址区分,而依靠名称,CPU通过名字去具体的寄存器拿数据。
在这里插入图片描述

​ 2、寄存器的种类

​ 分为通用和专用寄存区

  • EAX
  • EBX
  • ECX
  • EDX
  • EDI
  • ESI
  • EBP 栈的基地址,不发生改变
  • ESP 用来保存当前栈的地址(栈指针的位置,值会随着压栈、弹栈发生变化)

三、前置知识——Heap(堆)

​ 由用户主动请求而划分出来的内存区域,叫做Heap。

  • 由低位地址向高位地址增长
  • 不会自动释放,必须手动释放,或者由垃圾回收机制来回收

四、前置知识——Stack(栈)

​ 1、帧的概念

系统会在栈中为每一个函数建立一个帧(frame),所以调用栈有多少层(递归),就有多少帧;函数运行结束,帧就被回收。

​ 2、出栈(pop)和入栈(push)

​ Stack 是由内存区域的结束地址开始,从高位(地址)向低位(地址)分配。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gqzLyl2h-1648713555012)(images/汇编语言入门/bg2018012215-16487116800653.png)]

五、CPU指令

​ 一个CPU指令可以有零个到多个运算子

根据一个例子来学习

_add_a_and_b:
   push   %ebx
   mov    %eax, [%esp+8] 
   mov    %ebx, [%esp+12]
   add    %eax, %ebx 
   pop    %ebx 
   ret  

_main:
   push   3
   push   2
   call   _add_a_and_b 
   add    %esp, 8
   ret
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AmwfOiMb-1648713555013)(images/汇编语言入门/bg2018012216.png)]

1、push指令

push 3
  • 1

这个push操作涉及到下面几个步骤

  • 取出ESP寄存器里的地址
  • 减去4个字节(int类型,向下生长)
  • 新地址写入ESP
  • 3被写入这个地址开始的四个字节

注意:esp始终指的是栈顶

2、call指令

​ 调用函数指令,程序会去找对应函数名的标签,建立一个新的栈帧(绿色部分)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1Z4lAMT9-1648713555013)(images/汇编语言入门/image-20220331155813906.png)]

3、move指令

将一个值写入某个寄存器

mov    %eax, [%esp+8] 
  • 1

esp + 8这个地址指向的值放入eax

4、add指令

两个运算子相加,并把结果放进前一个寄存器

add    %eax, %ebx
  • 1

结果保存在eax寄存器里

5、pop指令

取出Stack最近一个写入的值(即最低位地址的值),放入运算子指定位置

pop    %ebx
  • 1

注意:pop会将esp寄存器里的地址加4,即回收4个字节

6、ret指令

ret指令用于终止当前函数的执行,将运行权交还给上层函数。也就是,当前函数的帧将被回收。

该指令没有运算子

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/461015
推荐阅读
相关标签
  

闽ICP备14008679号