2021-11-09

<初见庐山,为识真面目>---"汇编语言的学前知识"


作者
:望十五江洋

目录:

一、8086CPU的硬件基础:

1.1、存储器:

若想要CPU工作,就必须向它提供指令和数据。指令和数据在存储器中存放,这也就是我们所说的内存;1

1.2 、CPU对存储器的读写

读与写是两种操作,就意味着CPU会对存储进行某种操作。对为个内存空间进行操作,所以,毋庸置疑的就是,我们必须先得知道这个内存空间的位置;然后,在对这个内存空间进行动作的选择。即:写和度;看我们是选择具体的“读”还是“写”的操作,而这一步的操作,我们把他称之为控制;最后,就是我们对具体的动作进行一个定量的描述,也就是传递数据;

1.3、总线

总线的功能是传递信息,而CPU 对内存的作用刚才已经详细的说明,总的来说是可以分为三个步骤,先是得找到具体的位置,或者说是找到具体的地址;其次就是找到了具体的位置看对他的操作具体是读还是写,这一步我们也可以简言之为==“控制”;最后,就是传输具体的数据==。
所以,从上面的再次的赘述,不难看得出来我们所需要传输的信息就是,地址,控制,和数据。而体现这三中功能的总线,我们便把它门分别称之为:地址总线,控制总线和数据总线;

1.4 、内存地址空间

最终运行程序的是CPU,我们用汇编语言的时候,必须要从CPU的角度来考虑问题。对于CPU来说,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中。这个逻辑存储器就是我们所说的内存地址空间

二、汇编语言到机器语言的过程

汇编语言的主题是汇编指令,汇编指令是机器指令便于记忆的书写格式。

汇编语言到机器语言的过程

编译器 链接 汇编语言源码 OBJ文件 二进制文件

三、8086CPU的寄存器

典型的CPU都是由控制器,运算器,寄存器等期间构成的,这些器件都是靠内部总线相连;
所以,来看一下他们各自的工作职能:
运算器:进行信息处理;
控制器:进行信息存储;
控制器:控制各种器件进行工作;
内部总线: 连接各种器件,在他们之间进行数据的传送;

通用寄存器:

8086CPU的所有的寄存器都是16位的,可以存放两个“字节”,或者说是一个“字”;而==AX、BX、CX、DX ==这几个寄存器都是用来存放一般性的数据,这里要注意的是每一个16位的寄存器都可以分成两个8位的寄存器来使用;比如AX就可以划分为 AH和AL这两个寄存器来使用;H的意思是high,而L的意思是low;
知识点

寄存器 寄存器中的数据 所表示的值
AX 100111000100000 20000(AE20H)
AH 01001110 78(4EH)
AL 00100000 32(20H)

上对应的代码,来解释以下:

\debug
-r		//查看寄存器里面的内容
-a
0ADB:0010 mov ax,18		//用汇编的形式在内存中写指令
0ADB:0013
-
-t		//执行相关的代码;

对应的实例图
2021-11-09对应的可以查看AH 、和AL 被分别赋值的结果:
示例图:
2021-11-09

物理地址

物理地址= 段地址*16+偏移地址;

段寄存器

用来存储段地址的寄存器称为段寄存器,而具体用CS,DS,SS,ES来用作段寄存器;其中CS是用来存储代码段的段寄存器,而IP则是指令指针寄存器,用来存储偏移地址的寄存器;
SS:用来存储栈顶的段的寄存器,SP:放栈顶偏移地址的寄存器;
DS[address] 的内容放在下一个章节;

四、debug的使用

在windowsxp系统上输入debug用来打开debug
-R :查看和改变CPU寄存器的内容
-D :查看内存中的内容
-E :改写内存中的内容
-U:将内存中的计算机的指令翻译成汇编指令
-A:执行一条机器指令
-T:以汇编的格式在内存中写入一条机器指令

//刚才的部分代码在上面的实例中演示过,不再赘述;


  1. 磁盘和内存是不同的,内存是易失性存储2,磁盘上的内容如果不读到内存中,就无法被CPU使用 ↩︎

  2. 易失性存储:断电就会失去所有的数据,例如RAM(随机存储器)就是易失性存储 ↩︎

上一篇:CSP2017-09


下一篇:2021-11-09