汇编语言入门教程

汇编语言入门教程一、汇编语言是什么​ 汇编语言是二进制指令(操作码)的文本形式,与指令是一一对应的关系。比如加法指令00000011写成汇编语言就是ADD二、前置知识——寄存器​ 1、寄存器不依靠地址区分,而依靠名称,CPU通过名字去具体的寄存器拿数据。​ 2、寄存器的种类​ 分为通用和专用寄存区EAXEBXECXEDXEDIESIEBP栈的基地址,不发生改变ESP用来保存当前栈的地址(栈指针的位置,值会随着压栈、弹栈发生变化)三、前置知识——Heap(堆)​ 由用户主动请

一、汇编语言是什么

​ 汇编语言是二进制指令(操作码)的文本形式,与指令是一一对应的关系。比如加法指令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

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

1、push指令

push 3

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

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

注意:esp始终指的是栈顶

2、call指令

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

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

3、move指令

将一个值写入某个寄存器

mov    %eax, [%esp+8] 

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

4、add指令

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

add    %eax, %ebx

结果保存在eax寄存器里

5、pop指令

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

pop    %ebx

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

6、ret指令

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

该指令没有运算子

今天的文章汇编语言入门教程分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/8524.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注