通用寄存器
通用寄存器:AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,被成为通用寄存器。
8086CPU的上一代寄存器都是8位的,为了保证兼容,使原来基于上代CPU编写的程序稍加修改就可以运行再8086上,8086CPU的AX、BX、CX、DX这四个寄存器都可以分为两个独立使用的8位寄存器来使用:
- AX可分为AH和AL
- BX可分为BH和BL
- CX可分为CH和CL
- DX可分为DH和DL
字在寄存器中的存储
字节:记为byte,一个字节由8个bit组成,可以存放在8位寄存器中
字:记为word,一个字由两个字节组成
几条汇编指令
8086CPU给出物理地址的方法
8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位物理地址
当8086CPU要读写内存时
- CPU中的相关不见提供两个16位地址,一个成为段地址,另一个成为偏移地址
- 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件
- 地址加法器通过内部总线将20位物理地址送入输入输出控制电路
- 输入输出控制电路将20位物理地址送上地址总线
- 20位物理地址被地址总线传送到存储器
地址加法器采用物理地址 = 段地址*16+偏移地址的方法用短地址和偏移地址合成物理地址
注意,内存并没有分段,段的划分来自于CPU。
段寄存器
段地址在8086CPU的段寄存器中存放
8086CPU有4个段寄存器:CS、DS、SS、ES
在8086 CPU 加电启动或复位后(即CPU刚开始工作时)CS和IP被设置为CS = FFFFH, IP = 0000H,即在8086PC刚启动时,CPU从内存FFFF0H单元中读取指令
修改CS、IP的指令
不能用mov设置CS、IP的值
jmp 2AE3:3, 执行后:CS = 2AE3H, IP = 0003H, CPU将从2AE33H处读取指令。
jmp 3:0B16, 执行后:CS = 0003H, IP = 0B16H, CPU将从00B46H处读取指令
若想仅修改IP的内容
jmp ax, 指令执行前:ax = 1000H,CS = 2000H,IP = 0003H
执行指令后:ax = 1000H, CS = 2000H, IP= 1000H
“jmp 某一合法寄存器” 指令的功能为:用寄存器中的值修改IP
查看、修改cpu中寄存器的内容:R命令
若要修改一个寄存器中的值,比如AX中的值,可用R命令后加寄存器名来进行,输入“r ax”后按Enter键,将出现“:”作为输入提示
若想看下修改后的结果,可在用R命令查看
用debug的D命令查看内存中的内容
如果我们想知道内存10000H中的内容,可用“d 段地址::偏移地址”的格式来查看
修改内存中的内容:E命令(可以写入数据、指令,在内存中,它们实际上没有区别)