第七天 汇编语言

文章介绍了如何安装和使用DosBox,接着讲解了汇编语言的基本概念,包括寄存器的作用和分类,以及堆和栈的内存管理。此外,还通过具体CPU指令示例解析了汇编语言中的操作,如push、pop、call、move和ret等。
摘要由CSDN通过智能技术生成

一,dosbox安装(DosBox的安装及使用——详细教程_Aubrey-s的博客-CSDN博客

 

 

二,汇编语言学习

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

二、前置知识——寄存器
​ 1、寄存器不依靠地址区分,而依靠名称,CPU通过名字去具体的寄存器拿数据。


​ 2、寄存器的种类

​ 分为通用和专用寄存区

EAX
EBX
ECX
EDX
EDI
ESI
EBP 栈的基地址,不发生改变
ESP 用来保存当前栈的地址(栈指针的位置,值会随着压栈、弹栈发生变化)
三、前置知识——Heap(堆)
​ 由用户主动请求而划分出来的内存区域,叫做Heap。

由低位地址向高位地址增长
不会自动释放,必须手动释放,或者由垃圾回收机制来回收
四、前置知识——Stack(栈)
​ 1、帧的概念

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

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

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

内存:

 

五、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、push指令
push 3

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

取出ESP寄存器里的地址
减去4个字节(int类型,向下生长)
新地址写入ESP
3被写入这个地址开始的四个字节
注意:esp始终指的是栈顶

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

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指令用于终止当前函数的执行,将运行权交还给上层函数。也就是,当前函数的帧将被回收。

该指令没有运算子

原文链接:https://blog.csdn.net/Little_jcak/article/details/123874725

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值