PWN入门之cpu工作原理
一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。

内部总线实现CPU内部各个器件之间的联系。
外部总线实现CPU和主板上其它器件的联系。
寄存器
8086CPU有14个寄存器 它们的名称为:
AX、BX、CX、DX
SI、DI
SP、BP
IP、PSW
CS、SS、DS、ES


当所保存数据大于寄存器位数时,高位的数据会丢失,称为数据溢出
当两个通用寄存器作8位独立寄存器使用,低8位与高8位之间没有直接关系,不能发生进位
1个8位寄存器能存储的最大数据:2^8-1
字在寄存器的存储

物理地址
CPU访问内存单元时要给出内存单元的地址,所有的内存单元构成的存储空间是一个一维的线性空间。我们将这个唯一的地址称为物理地址。不同的CPU有不同的形成物理地址的方式。
16位结构的cpu:
Intel8060内部16位结构,只能传送16位地址,寻址能力64k;外部有20位地址总线,可传20位地址,寻址能力1M。
如何从16位转化为20位呢?
8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。
段地址+偏移地址 -> 地址加法器 -> 20位的物理地址。
地址加法器合成物理地址的方法:段地址×16+偏移地址=物理地址
“段地址×16”有一个更为常用的说法就是数据左移4位。(二进制位)
二进制的数据左移4位,即乘以2^4=16。
上述做法是位弥补内部总线为16位的缺陷而设计的。




段空间
段的划分来自CPU
将若干地址连续的内存单元看作一个段,用段地址×16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元
段的起始地址一定是16的倍数
偏移地址为16位,16位地址的寻址能力为64K,所以一个段的长度最大为64K。CPU能用不同的段地址和偏移地址形成同一个物理地址
Q: 如果给定一个段地址,仅通过变化偏移地址来进行寻址,最多可以定位多少内存单元?
因为偏移地址16位,变化范围为0~FFFFH,仅用偏移地址来寻址最多可寻64K个内存单元。
比如:给定段地址1000H,用偏移地址寻址,CPU的寻址范围为:10000H~1FFFFH。【H表示16进制】
地址的描述
(对8086PC机)
- 数据存在内存2000:1F60单元中
- 数据存在内存的2000段中的1F60H单元中
段寄存器
提供段地址

修改IP,CS的值
mov不能改IP、CS的值,8086cpu中,转移指令用来改变他们的值
JMP 段地址:偏移地址
功能:用指令中给出的段地址修改CS,偏移地址修改IP。
eg. JMP 2AE3H:0003H CS = 2AE3H, IP = 0003H。
仅修改IP内容
jmp 某一合法寄存器
jmp ax (类似于 mov IP,ax(ax值赋给IP))
功能:用寄存器中的值修改IP。
8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行。







