1. 8086CPU 有14个16位寄存器
2. 这14个寄存器按其用途可分为(1)通用寄存器、(2)指令指针、(3)标志寄存器、(4)段寄存器等4类。
3. 通用寄存器有8个, 又可以分成2组,一组是数据寄存器(AX,BX,CX,DX4个),另一组是指针寄存器及变址寄存器(SP,BP,SI,DI4个).
4. 通用寄存器简介
AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据。
BH&BL=BX(base):基址寄存器,常用于地址索引
CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器.
DH&DL=DX(data):数据寄存器,常用于数据传递。
为了兼容8位CPU,数据寄存器又分高8位AH,BH,CH,DH及低8位AL,BL,CL,DL。
SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置
BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置
SI(Source Index):源变址寄存器,可用来存放相对于DS段之源变址指针
DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。
5. 指令指针IP
IP指向的是指令地址的段内地址偏移量,又称偏移地址(Offset Address)或有效地址(EA,Effective Address)。
6. 段寄存器
CS(Code Segment):代码段寄存器
DS(Data Segment):数据段寄存器
SS(Stack Segment):堆栈段寄存器
ES(Extra Segment):附加段寄存器。
7. 寻址方式
采用“基础地址+偏移地址”的方式寻址。 偏移地址是4位即上面说的“指令指针IP”。
8. 简单汇编指令
mov ax 18 ---> 将18送入寄存器ax中 ==> ax = 18
add ax 44E0H ---> 寄存器ax中数值再加上十六进制(44E0) ==> ax = ax +44E0H
9. 可以修改段寄存器及指令指针IP的指令 ---- "jmp"
方式:” jmp 段地址 :偏移地址“
修改指令指针IP,也可以用”jmp 某个合法寄存器“ 即 jmp ax,
例如: 执行前ax=1001H,CS=2000H,IP=8542H
执行 jmp ax
执行后ax=1001H,CS=2000H,IP=1001H
10. 汇编中Debug使用(一些命令功能)
R ---> 查看,改变CPU寄存器的内容
D ---> 查看内存中的内容
E ---> 改写内存中的内存
U ---> 将内存中的机器指令翻译成汇编指令
T ---> 执行一条机器指令
A ---> 以汇编指令的格式在内存中写入一条机器指令
例如:”r ax“ --> 就可以修改寄存器ax中的值
”r cs“ --> 就可以修改段地址中的值
”r IP“ --> 修改指令指针的值
D ----> ”d 段地址:偏移地址“ d 1000:9 ——> 就是查看1000:9处的内容 一般显示128位。也可以指定某几位——d 1000:0 9 (看0到9位共十位的数据)
此文为读书笔记。