系列型的文章
https://blog.csdn.net/wuwuku123/article/details/109325987
下文,基于8086CPU(8086 CPU是16位结构,有16根数据线。所以,可以一次性传送16位的数据,也就是说可以一次性传送一个字)。
一、汇编指令
二、寄存器
-
位运算
一个数据的十六进制形式左移1位,相当于乘以16;一个数据的十进制形式左移1位,相当于乘以10;一个X进制的数据左移1位,相当于乘以X。 -
段的概念(十分重要!!!)
内存并没有分段,段的划分来自于CPU。在编程时可以根据需要,将若干地址连续的内存单元看作一个段,用段地址×16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。CPU可以用不同的段地址和偏移地址形成同一个物理地址。 -
物理地址
物理地址=段地址*16 + 偏移地址 /(物理地址=SA*16+EA)
的本质含义是:CPU在访问内存时,用一个基础地址(段地址*16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。这里的16表示的是十进制的数字。
也就是物理地址=(段地址+0)H + 偏移地址
- 段寄存器
段寄存器就是提供段地址的
CS和IP是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。CS为代码段寄存器;IP为指令指针寄存器。
在内存中,指令和数据没有任何区别,都是二进制信息,CPU在工作的时候把所有的信息看作指令,有的信息看作数据。
CPU将CS:IP指向的内存单元中的内容看作指令,因为,在任何时候,CPU将CS、IP中的内容当作指令的段地址和偏移地址,
用它们合成指令的物理地址,到内存中读取指令码,执行。
如果说,内存中的一段信息曾被CPU执行过的话,那么,它所在的内存单元必然被CS:IP指向过。
三、内存访问
- 字单元
存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成。高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节。
字与字节的区别:https://worktile.com/kb/p/38205
- 栈
栈空间当然也是内存空间的一部分,它只是一段可以以一种特殊的方式进行访问的内存空间。
一段内存,可以既是代码的存储空间,又是数据的存储空间,还可以是栈空间,也可以什么也不是,关键在于CPU中寄存器的设置,即:CS、IP、SS、DS的指向。
0 条评论