从机器语言到汇编

从机器语言到汇编

我们计算机底层的硬件只能识别二进制的数据,而上一篇文章提到人们设计了一系列的指令集来告诉CPU需要去做什么,完成什么功能。但是,如果我们直接编写和检查指令集就有很大的问题,举个例子,因为指令集是由一堆010101010的二进制组成的,假如程序出现问题,或者我们要排查bug的时候,难道要去一行一行的检查这些二进制吗,显然效率是很低的!因此,我们能不能对这些机器语言进行翻译,搭配助记符的方式使得我们人更好的了解机器语言?这就引出了汇编语言。

汇编语言

汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。

特点

1、汇编语言与硬件相关,因为不同硬件对应的上层指令集可能不一样,因此每一种处理器都有相应的汇编语言;

2、汇编语言与机器码相关,指令通常与机器码一一对应;

作用

1、能够深入理解硬件工作原理;

2、充分利用计算机特性(如SIMD,即单指令多数据);

3、开发操作系统内核、驱动程序等;

4、优化程序,汇编语言就是对机器语言的翻译,如果了解汇编语言,那么对于优化我们的程序将的大有帮助。

寄存器

汇编语言使用的寄存器实际上并不是物理寄存器,而是在通过一定的操作映射CPU内部特定的物理寄存器。你也可以这样理解,汇编语言就是操作寄存器!在早期的8086处理器中,共有14个寄存器,下一篇文章我将从推到的角度去分析这些寄存器。

通用寄存器

数据寄存器
AX
Accumulator:累加寄存器,也称之为累加器,常用于存放算术、逻辑运算中的操作数或结果。另外,所有的外部设备的输入输出指令都只能使用AL或AX作为数据寄存器。

BX
BX (Base):基地址寄存器,可用于数据寄存器,访问存储器时、可以存放被访问内存的地址,是具有双重功能的寄存器

CX
CX (Count):计数器寄存器;在循环、串操作指令中用作计数器。如在loop循环中用作计数器。

DX
DX (Data):数据寄存器;在乘除法中作为数据累加器,在输入输出操作中存放端口的地址。此外,在做双字长乘除法运算时,DX 与AX合起来存放一个双字长数(32位),其中DX存放高16位(余数),AX存放低16位(商)。

指针寄存器
SP
Stack Pointer:堆栈指针寄存器,存放栈顶的偏移位置,供堆栈操作使用,常用SS搭配进行使用

BP
Base Pointer:基指针寄存器;存放堆栈内数据的基地址

变址寄存器
SI
Source Index:源变址寄存器;主要用于存放地址,在字符串操作中存放源操作数的偏移地址。变址寄存器内存放 的地址在数据传送完成后,具有自动修改的功能。

DI
Destination Index:目的变址寄存器;主要用于存放地址,在字符串操作中存放目的操作数的偏移地址。

2、控制寄存器
IP
IP(Instruction Pointer):指令指针寄存器,常与CS进行配合使用,用于共同寻址。

FLAG
标志寄存器

3、段寄存器
CS(Code Segment):代码段寄存器
DS(Data Segment):数据段寄存器
SS(Stack Segment):堆栈段寄存器
ES(Extra Segment):附加段寄存器
CS:代码段寄存器

总结

本小章从推导的角度说明了汇编语言的重要性,同时介绍了早期8086的一些寄存器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值