CPU概述
一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件考内部总线相连。
8086CPU有14个寄存器:
AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW
1、通用寄存器
8086CPU所有的寄存器都是16位的,可以存放两个字节。
AX、BX、CX、DX通常用来存放一般性数据被称为通用寄存器。
一个16位寄存器能存储数据的最大值为2^6-1。
8086上一代CPU中寄存器都是8位,为保证兼容性,可将16位寄存器分成两个8位寄存器独立使用。
例:16位寄存器AX可以分为8位寄存器AH和AL。
AX的低八位构成AL寄存器,AX的高八位构成AH寄存器。
一个八位寄存器能够存储的最大值为2^8-1。
2、字在寄存器中的存储
1B=8bit,1字=2字节(B)(16位寄存器)
字节(B)是寻址的最小单位。
字是计算机一次处理数据的最大单位。
数制转换
计算机能处理的数据是二进制数据,但是人阅读二进制数据是否困难,而十六进制对应二进制数据,且计算机的位数都是4的倍数,所以折中选择十六进制来处理数据。
3、几条汇编指令
注意:汇编指令不区分大小写。
汇编指令:mov、add
汇编指令 | 控制CPU完成操作 | 用高级语言描述(C语言) |
mov ax,18 | 将18送人ax | ax=18 |
add ax,8 | 将ax中数值加上8 | ax=ax+8 |
mov ax,bx | 将bx中的数据送入寄存器ax中 | ax=bx |
add ax,bx | 将ax与bx数据相加,存入ax中 | ax=ax+bx |
寄存器若发生数据溢出,寄存器只存储非溢出值,但CPU并没有丢弃溢出值,只是放在某个位置。
若将一个16位寄存器当成两个8位寄存器时,若低八位寄存器发生溢出,其溢出值不会到高八位寄存器中。(原因:两者相互独立)
例:只是用mov、add汇编指令,最多使用四条指令,编程计算2的四次方。
mov al,2
add al,al
add al,al
add al,al
4、物理地址
CPU访问内存单元时要给出内存单元的地址。所有内存单元构成的存储空间是一个一维的线性空间。
将这唯一的地址称为物理地址
5、16位结构的CPU
特征:
1.运算器一次最多可以处理16位数据。
2.寄存器的最大宽度为16位。
3.寄存器和运算器之间的通路是16位的。
8086有20位地址总线,可传送20位地址,寻址能力为1M,2^20B=2^10KB=1MB
8086内部地址总线为16位,只能传送16位地址寻址能力只有64K。
因为8086内外地址总线不匹配,所以采用两个16位地址合成一个20位地址。
16位段地址,偏移地址通过地址加法器变成20位地址。
方法:物理地址=段地址x16+偏移地址。
x16为向左移一位16进制或向左移四位2进制。
一个数据的二进制向左移N位,二进制数据x2^N
6、段的概念
内存并没有分段,段的划分来自于CPU,由于CPU给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。
如:将10000H~100FFH组成一个段
在编程时可以根据需要将若干地址连续的内存单元看成一个段。
偏移地址为16位,寻址能力为64K,所以一个段的长度最大为64K。
注意:数据在21F60H内存单元中,对于8086PC有两种描述:
1.数据存在内存2000:1F60单元中。
2.数据存在内存2000段的1F60单元中。
7、段寄存器
段寄存器是提供段地址的。
8086CPU中有4个段寄存器
CS(代码段地址寄存器)
DS(数据段地址寄存器)
SS(堆栈段地址寄存器)
ES(附加段地址寄存器)
CS和IP是8086CPU中最关键寄存器
它们指示了CPU当前要读取指定的地址
CS为代码段寄存器
IP为指令指针寄存器(偏移地址寄存器)
工作流程
1.从CS:IP指的单元读取指令,读取的指令进入指令缓存器。
2.IP=IP+所读取指令的长度(自己完成的),从而指向下一条指令
3.执行指令(重复步骤)
在8086CPU加电启动或复位后(即CPU刚开始工作时)CS和IP被设置为CS=FFFFH IP=0000H
即在8086PC启动后,CPU从内存FFFF0H单元中读取指令。(开机执行的第一条指令)
8、修改CS、IP的指令
mov指令可以改变8086CPU中大部分的寄存器的值,被称为传送指令
但是不能用来设置CS、IP的值(8086CPU没有提供这样的功能)
转移指令jmp (用来改变CS、IP的值)
1、同时修改CS、IP的内容
jmp 2AE3:3
2、仅修改IP的内容
mov ax,200H
jmp IP,ax
或:jmp bx (只修改IP的值,不修改CS的值)
9.代码段
CPU只认被CS:IP指向的内存单元中的内容为指令。
工具介绍:debug
debug是DOS、windows提供的实模式程序的调试工具。
R命令 查看、改变CPU寄存器的内容
D命令 查看内存中的内容
E命令 改写内存中的内容
U命令 将内存中的机器指令翻译成汇编指令
T命令 执行一条机器语言
A命令 以汇编指令的格式在内存中写入一条机器指令