汇编基础

2022/8/26 14:26:26

本文主要是介绍汇编基础,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

寄存器

处理器总是很繁忙的,在它操作的过程中,所有数据在寄存器里面都只能是临时存在一会儿,然后再被送往别处,这就是为什么它被叫做“寄存器”的原因

早期的处理器,它的寄存器只能保存4 比特、8 比特或16 比特,分别叫做4 位、8 位和16位寄存器。现在的处理器,寄存器一般都是32 位、64 位甚至更多。8 位寄存器可以容纳8 比特(bit),或者说1 字节(Byte)。我们还要为这个字节的每一位编上号,编号是从右往左进行的,从0 开始,分别是0、1、2、3、4、5、6、7。在这里,位0(第1 位)是最低位,在最右边;位7(第8 位)是最高位,在最左边。

16 位寄存器可以存放2 个字节,这称为1 个字(word),各个数位的编号分别是0~15,其中0~7 是低字节,8~15 是高字节

32 位寄存器可以存放4 个字节,这称为1 个双字(double word),各个数位的编号分别是0~31,其中0~15 是低字,16~31 是高字。

内存储器

是一个可以保存很多数字的电路,叫做存储器(Storage 或 Memory)。

8 位处理器包含8 位的寄存器和算术逻辑部件,16 位处理器拥有16 位的寄存器和算术逻辑部件,64 位处理器则包含64 位的寄存器和算术逻辑部件,通过单次访问就能处理8 位、16 位、32 位或者64 位的二进制数,单次最小访问1字节。

指令和指令集

指令是集中存放在内存里的,一条接着一条,处理器的工作是自动按顺序取出并加以执行。

一般来说,指令由操作码和操作数构成,但也有小部分指令仅有操作码,而不含操作数。停机指令仅包含1 字节的操作码F4,而没有操作数。指令的长度不定,短的指令仅有1 字节,而长的指令则有可能达到15 字节(对于INTEL x86 处理器来说)。

第一条指令的操作码是B8,这表明,该指令是一条传送指令,第一个操作数是寄存器,第二个操作数是直接包含在指令中的,紧跟在操作码之后,可以立即从指令中取得。

8B 1E,它隐含的意思是,这是一条传送指令,第一个操作数是寄存器,而且是RB 寄存器,第二个操作数是内存地址,要传送到RB 寄存器中的数存放在该地址中。同时,这是一个字操作指令,应当从第二个操作数指定的地址中取出一个字。003F是一个内存地址,取出这个地址的值存到RB寄存器里。

指令和数据要分开存放,分别位于内存中的不同区域,存放指令的区域叫代码区,存放数据的区域叫数据区。

在内存中,指令和数据一模一样,都是无差别的数。

8086 的通用寄存器

8086 处理器内部有8 个16 位的通用寄存器,分别被命名为AX、BX、CX、DX、SI、DI、BP、SP。“通用”的意思是,它们之中的大部分都可以根据需要用于多种目的。

这8 个寄存器中的前4 个,即AX、BX、CX 和DX,又各自可以拆分成两个8 位的寄存器来使用,总共可以提供8 个8 位的寄存器AH、AL、BH、BL、CH、CL、DH 和DL。

内存分段机制

处理器至少要提供两个段寄存器,分别是代码段寄存器(Code Segment,CS)和数据段寄存器(Data Segment,DS)。

当处理器访问内存时,它把指令中指定的内存地址看成是段内的偏移地址,而不是物理地址。这样,一旦处理器遇到一条访问内存的指令,它将把DS 中的数据段起始地址和指令中提供的段内偏移相加,来得到访问内存所需要的物理地址。

8086 内部有4 个段寄存器。其中,CS 是代码段寄存器,DS 是数据段寄存器,ES 是附加段(Extra Segment)寄存器。附加段的意思是,它是额外赠送的礼物,当需要在程序中同时使用两个数据段时,DS 指向一个,ES 指向另一个。可以在指令中指定使用DS 和ES 中的哪一个,如果没有指定,则默认是使用DS。SS 是栈段寄存器

IP 是指令指针(Instruction Pointer)寄存器,它只和CS 一起使用,而且只有处理器才能直接改变它的内容。当一段代码开始执行时,CS 指向代码段的起始地址,IP 则指向段内偏移

进程

程序是静静地躺在文件系统里的二进制代码,属于静止状态。一旦把这个程序加载到操作系统内运行,它就变成了进程。进程是程序的运行状态,所以它会比程序拥有更多管理层面的信息和数据。



这篇关于汇编基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程