第三章 寄存器(内存访问)
本章中,主要从 CPU 如何执行指令的角度讲解了8086CPU 的逻辑结构、形成物理地址的方法、相关的寄存器以及一些指令。
- 内存中字的存储:CPU 中,用16位寄存器来存储一个字。高 8 位存放高位字节,低 8 位存放低位字节。在内存中存储时,由于内存单元是字节单元,则一个字要用两个地址连续的内存单元来存放,这个字的低位字节存放在低地址单元中,高位字节存放在高地址单元中。比如我们从 0 地址开始存放 2000。
- DS 和[address]:CPU 要读写一个内存单元的时候,必须先给出这个内存单元的地址,在 8086PC 中,内存地址由段地址和偏移地址组成。8086CPU 中有一个 DS 寄存器,通常用来存放要访问数据的段地址。
- 字的传送:我们用 mov 指令在寄存器和内存之间进行字节型数据的传送。
- mov、add、sub 指令:mov 寄存器,数据 比如:mov ax,8
mov 寄存器,寄存器 比如:mov ax,bx
mov 寄存器,内存单元 比如:mov ax,[0]
mov 内存单元,寄存器 比如:mov [0],ax
mov 段寄存器,寄存器 比如:mov ds,ax
add 和 sub 指令同 mov 一样,都有两个操作对象。
- 数据段:对于 8086PC 机,在编程时,可以根据需要,将一组内存单元定义为一个段。我们可以将一组长度为 N(N<=64KB)、地址连续、起始地址为 16 的倍数的内存单元当作专门存储数据的内存空间,从而定义一个数据段。比如用 123BH~123B9H 这段内存空间来存放数据,我们就可以认为,123B0H~123B9H 这段内存是一个数据段,它的段地址为 123BH,长度为10个字节。
- 栈:栈是一种具有特殊的访问方式的存储空间。它的特殊性就在于,最后进入这个空间的数据,最先出去。
- CPU 提供的栈机制:现今的 CPU 中都有栈的设计,8086CPU 也不例外。8086CPU 提供相关的指令来以栈的方式访问内存空间。这意味着,在基于 8086CPU 编程的时候,可以将一段内存当作栈来使用。
- 栈顶超界的问题:栈顶超界是危险的,因为我们既然将一段空间安排为栈,那么在栈空间之外的空间里很可能存放了具有其他用途的数据、代码等,这些数据、代码可能是我们自己程序中的,也可能是别的程序中的。但是由于我们在入栈出栈时的不小心,而将这些数据、代码意外地改写,将会引发一连串的错误。
- push、pop 指令:前面内容一直在使用 push ax 和 pop ax ,显然 push 和 pop 指令是可以在寄存器和内存之间传送数据的。
- 栈段:前面讲过,对于 8086PC 机,在编程时,可以根据需要,将一组内存单元定义为一个段。我们可以将长度为 N(N<=64KB)的一组地址连续、起始地址为 16 的倍数的内存单元,当作栈空间来用,从而定义了一个栈段。
希望我的总结可以帮助大家,感谢阅读我的博客!