系列型的文章
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 条评论

发表回复

您的电子邮箱地址不会被公开。