CPU的构造:运算器,寄存器,控制器,总线
程序员通过改变各种寄存器中的内容来实现对CPU的控制。
8086CPU有14个寄存器:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW
2.1 通用寄存器
AX,BX,CX,DX这四个寄存器通常用来存放一般性的数据,称为通用寄存器。
8086的所有寄存器都是16位的,为了保证兼容,使原来基于上代8位CPU编写的程序稍加修改就可以在8086上运行,8086CPU的4个通用寄存器都可以分为两个独立使用的8位寄存器。
2.2 字在寄存器中的储存
2.3 几条汇编指令
注:汇编命令操作的对象位数须一致
2.4 物理地址
所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,这个唯一的地址称为物理地址。
2.5 16位结构的CPU
特征:
1)运算器一次最多可以处理16位数据
2) 寄存器的最大宽度为16位
3)寄存器和运算器之间的通路为16位
2.6 8086CPU给出物理地址的方法
物理地址=段地址*16+偏移地址
2.7 “物理地址=段地址*16+偏移地址”的本质含义
8086CPU的这种“物理地址=段地址*16+偏移地址”寻址功能其实是“物理地址=基础地址+偏移地址”地址模式的一种具体实现方案
2.8 段的概念
其实内存并没有分段,段的划分来自于CPU,由于8086CPU使用“物理地址=段地址*16+偏移地址”的方式来给出内存单元的具体地址,使得我们可以使用分段的方式来管理内存。
16位地址的寻址能力为64KB,所以一个段最大的长度为64KB。
2.9 段寄存器
8086CPU有4个段寄存器:CS,DS,SS,ES
2.10 CS和IP
8086机中,任意时刻,CPU将CS:IP中的内容当作指令执行
2.11 修改CS和IP的指令
注:CPU中,程序员可以通过指令读写的只有寄存器,程序员通过改变寄存器中的内容来实现对CPU的控制。
注:mov指令并不能用于修改CS和IP的值,因为8086CPU并没有提供这样的功能。能够修改CS,IP的指令称为转移指令。
如JMP指令:
JMP 段地址:偏移地址
JMP REG ; 类似于 MOV IP,REG
2.12 代码段
指一段存放代码的内存
实验1 查看CPU和内存,用机器指令和汇编指令编程
Debug命令和功能:
1.R:查看CPU寄存器内容
<> R
查看寄存器内容
<> R reg
修改寄存器内容
2.D:查看内存中的内容
<> D
查看默认的内存中128个字节的内容
<> D 段地址:偏移地址
查看由段地址:偏移地址指定起始的128个字节的内容
<> D 段地址:偏移起始地址 偏移结束地址
查看由用户指定的一段内存
3.E:改写内存中的内容
<> E 段地址:偏移地址 数据 数据 数据 数据……
直接修改内存内容
<> E 段地址:偏移地址
提问式修改内存内容(按空格表示该单元处理完成,回车表示命令完成)
4.U:将内存中的机器指令翻译成汇编指令
使用方式参照D命令
5.T:执行下一条机器指令
6.A:用汇编指令的格式向内存中写入一条机器指令
<> A 段地址:偏移地址
提问式修改,当不输入直接按回车时表示命令结束