汇编语言学习笔记1.0-(基础知识、寄存器)

来源:互联网 发布:淘宝直播镜像 编辑:程序博客网 时间:2024/05/17 22:12

为了更好的使用C/C++进行开发工作,我需要了解一些汇编语言的知识,所以就从《汇编语言》这本书开始吧。
这系列可能并不详细,主要用于自己做笔记和加深印象。

一、基础知识

关键字:机器语言、汇编语言、存储器、指令、数据、存储单元、CPU对存储器的读写、地址总线、数据总线、控制总线、内存地址空间、主板、接口卡、存储器芯片、内存地址空间
-1、机器语言:
机器指令的集合,一列二进制数字,可以由机器执行。
-2、汇编语言:
汇编指令->编译器->机器码->计算机执行
分为:
汇编指令(核心):有机器码的助记符,有对应的机器码;
伪指令:没有对应的机器码,由编译器执行,计算机并不执行;
其他符号:由编译器识别,没有对应的机器码;
-3、存储器:指令和数据存放的地方;
-4、指令和数据:在内存或磁盘上,都是二进制的信息;
-5、存储单元:字节;
-6、CPU对存储器的读写:根据地址信息,控制信息,数据信息来进行数据读写;
-7、地址总线:CPU通过地址总线指定存储器单元,地址总线能传送多少个不同信息,CPU就可以对多少个存储单元进行寻址。
-8、数据总线:CPU与内存或其他器件之间的数据传送媒介,数据总线的宽度决定了CPU和外界的数据传送速度,多少位一次传送n/8字节。
-9、控制总线:CPU对外部器件的控制通过控制总线进行,是一些不同控制线的集合,有多少根控制总线,意味着CPU提供了对外部器件的多少种控制。控制总线的宽度决定了CPU对外部器件的控制能力。
-10、内存地址空间:地址总线最大的寻址数量。
-11、主板:通过总线连接计算机的各个器件和接口。
-12、接口卡:接口卡通过总线与CPU相连,CPU通过接口卡控制外部设备。
-13、存储器芯片:随机存储器(RAM),只读存储器(ROM)。
-14、内存地址空间:所有的物理存储器被看做一个由若干存储单元组成的逻辑存储器,每个物理存储器在这个逻辑存储器中占有一个地址段,CPU通过对这段地址空间的读写操作对应的物理存储器。

二、寄存器

CPU中进行信息存储的主要部件,我们通过改变各种寄存器中的内容来实现对CPU的控制。
有:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW寄存器

1、通用寄存器

通常用来存放一般性的数据:AX、BX、CX、DX。
这四个寄存器又可以分为:AH,AL,BH,BL,,,分别代表高位和低位寄存器。

2、几条汇编指令

汇编指令 操作内容 mov ax,18 将18送入寄存器AX add ax,8 将寄存器AX中的数值加上8 mov ax,bx 将寄存器BX中的数据送入AX add ax,bx 将AX和BX中的数值相加,结果存入AX

3、物理地址

CPU访问内存时,要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维线性空间,每一个内存单元在这个空间中都有唯一的地址,这个唯一的地址成为物理地址。

4、16位结构CPU

运算器一次最多可以处理16位的数据;寄存器的最大宽度为16位;寄存器和运算器之间的通路为16位。

5、8086给出物理地址的方法

-1、CPU中的相关部件提供两个16位的地址,一个称为段地址,一个称为偏移地址;
-2、通过内部总线送入一个称为地址加法器的部件;
-3、地址加法器将两个16位地址合成为一个20位的物理地址;
-4、地址加法器通过内部总线将20位物理地址送入输入输出控制电路;
-5、输入输出控制电路将20位物理地址送上地址总线;
-6、20位物理地址被地址总线传送到存储器。

6、物理地址=段地址*16+偏移地址

因为传送位数限制,所以使用段地址+偏移地址的方式计算。

7、段的概念

因为使用段地址+偏移地址的方式给出物理地址,使得我们可以用分段的方式管理内存。

8、段寄存器

8086CPU有4个段寄存器:CS、DS、SS、ES

9、CS和IP

CS是代码段寄存器,IP为指令指针寄存器。
在8086PC机中,任意时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从内存M*16+N单元开始,读取一条指令并执行。
8086CPU的工作过程:
-1、从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲区;
-2、IP = IP + 所读取指令的长度,从而指向下一条指令;
-3、执行指令;
-4、从1开始,重复这个过程。
在8086CPU加点启动或复位后,CS被设置为FFFF,IP为0000,所以在机器启动时,CPU从内存FFF0读取指令并执行。

10、修改CS、IP的指令

在CPU中,程序员能够用指令读写的部件只有寄存器,可以通过改变寄存器中的内容实现对CPU的控制。通过改变CS、IP中的内容来控制CPU执行的目标指令。
因为mov指令不能用于设置CS、IP的值,使用:jmp段地址:偏移地址 的指令完成修改CS、IP的指令。
jmp 2AE3:3,执行后:CS=2AE3H,IP=003H,CPU将从2AE33H处读取指令。
如果只想修改IP的内容,可用jmp 某一合法寄存器的指令完成,如:
jmp ax,用寄存器中的值修改IP。
jmp ax, 在含以上好似:mov IP,ax,不过并不能这么操作。

11、代码段

我们可以将长度为N的一组代码,存在一组地址连续,起始地址为16的倍数的内存单元中,我们可以认为,这段内存是用来存放代码的,从而定义了一个代码段。代码段仅仅是我们自己的安排,使用CS:IP指向其中第一条指令的首地址来执行它。

阅读全文
0 0