作者:admin,发布日期:2022-11-25
阅读:39;评论:0

8086 CPU寄存器组

图片1.png

数据寄存器

AX、BX、CX、DX四个16位的寄存器

可以将其分为两个独立的8位寄存器使用:AL、AH、BL、BH、CL、CH、DL和DH

四个数据寄存器的特殊用途

AX:累加器,输入输出端口

BX:基址寄存器。

CX:计数器。

DX:双字长高16位数据,I/O的端口地址(AX)

指针及变址寄存器

SP、BP、SI、DI四个16位寄存器

SP:堆栈指针寄存器

BP:基址指针寄存器

SI:源变址寄存器

DI:目的变址寄存器

控制寄存器

IP和PSW(FLAGS)两个16位寄存器。

IP:指令指针寄存器,用来存放将要执行的下一条指令地址的偏移量,与段寄存器CS一起形成代码段中指令的物理地址。控制程序的执行流程就是通过控制IP的值来实现。

段寄存器

4个16位的段寄存器

代码段寄存器CS:存放当前执行的程序的段地址。

数据段寄存器DS:存放当前执行的程序所用操作数的段地址。

堆栈段寄存器SS:存放当前执行的程序所用堆栈的段地址。

附加段寄存器ES:存放当前执行程序中一个辅助数据段的段地址。

物理地址,偏移地址(有效地址),逻辑地址

物理地址:指的是在内存中具体的地址

偏移地址(有效地址):相对于段首地址的偏移量(一般是相对于DS段)

逻辑地址:8086的逻辑地址一般为:段地址:(冒号)有效地址

物理地址的计算

物理地址=段地址*2^4(2进制左移4位,16进制左移一位)

一般段地址为DS段地址

寻址方式

立即数寻址

指令中给出一个8位或16位的常数作为操作数。该操作数被称为立即数,这种寻址方式称为立即寻址。

也就是直接把一个数送入寄存器或者内存中

MOV AL,40H     (立即数40送AL) 
MOV DX,5040H (立即数5040送DX )

立即寻址主要用于给寄存器赋初值,立即数只能作为源操作数。

关键:操作数为常数

寄存器寻址

操作数在指令所指定的寄存器中。这种寻址方式称为寄存器寻址。

主要用于将寄存器中的数据搬入寄存器或者内存中

MOV  AX,BX

CPU内部传送数据,速度快。源地址和目标地址均可采用寄存器寻址。

关键:操作数为寄存器,例如(AX,BX)

直接寻址

数据总是在存储器中,存储单元的有效地址EA由指令给出。

MOV  AX, [2000H]

图片2.png

物理地址:无说明都是DS段左移4位+地址,设DS=3000H,物理地址=32000H

有效地址:2000H

逻辑地址:3000H:2000H

关键:[]符号,里面包括了一个内存地址,也就是说从内存中取到操作数后在把他mov入寄存器或者其他位置。

MOV AX,ES:[2000H]

在[]前加寄存器:可以指定物理地址相对于哪个地址偏移,上面的代码相对于ES段偏移

寄存器间接寻址

操作数在存储器中,存储单元的有效地址由指令指定的寄存器给出,这些寄存器规定为:BX,BP,SI,DI,即:EA=[BX]或[BP]或[SI]或[DI]。

2.png

MOV  AX, [BX]

表示以BX寄存器的内容为主存地址,把这个地址中的数据送到AX。

在指令的汇编格式中,作为间接寻址用的寄存器必须用[]括起来。(若寄存器为BX,SI,DI,则操作数在DS段,若寄存器为BP时,则操作数在SS段。)

MOV  AX, ES:[BX]

关键:[]符号,里面包括了一个寄存器名,计算机先去寄存器中取到地址,再去该地址中取操作数,最后将操作数送入其他位置

通过在[]前面加寄存器:,可以指定相对于哪个段偏移

物理地址:无说明都是DS段左移4位+地址,设DS=3000H,物理地址=30000H+寄存器中的值

有效地址:寄存器中的值

逻辑地址:3000H:寄存器中的值

寄存器相对寻址

通过基址寄存器BX、BP或变址寄存器SI、DI与一个位移量相加形成有效地址。

4.png

MOV  AX ,disp[BX]

表示以BX为基址寄存器,把BX内容加上disp的值,其和作为操作数的有效地址,取出数据送到AX。

MOV  AX ,disp[SI]

表示把变址寄存器SI中的内容加上disp的值, 其和作为操作数的地址,取出数据送到AX。

若寄存器为BX,则段寄存器为DS,若寄存器为BP,则对应的段寄存器为SS。

常用于对数组元素进行操作。

和相对寻址方式的区别:相对寻址中,可以用寄存器:指定相对哪个段偏移,这里没有冒号(:),disp为一个值。

物理地址:无说明都是DS段左移4位+地址,设DS=3000H,物理地址=30000H+disp+寄存器中的值

有效地址:disp+寄存器中的值

逻辑地址:3000H:disp+寄存器中的值

关键:存在disp[BX]字样

基址变址寻址

如果指令中包含基址寻址也包含变址寻址,把BX、BP和SI、DI组合起来。

5.png

MOV   AX, [BX] [SI]

表示把基址寄存器BX的内容加上变址寄存器SI的内容和作为操作数的地址,取出数据送到AX。

变址寄存器内容变化,变址偏移量不变,便于读写数组中的元素,是计算机中常用的一种寻址方式。

关键:变址寄存器内容变化,变址偏移量不变,上方的寄存器相对寻址的disp为一个常量,而这里变成了[寄存器],相当于从寄存器中取这个disp

物理地址:无说明都是DS段左移4位+地址,设DS=3000H,物理地址=30000H+寄存器中的值+寄存器中的值

有效地址:寄存器中的值+寄存器中的值

逻辑地址:3000H:寄存器中的值+寄存器中的值

相对基址变址寻址

如果指令中包含基址寻址也包含变址寻址,把BX、BP和SI、DI组合起来,再加上8位或16位的偏移量。

图片6.png

MOV   AX,disp[BX] [SI]

表示把基址寄存器BX的内容加上变址寄存器SI的内容以及disp的值, 其和作为操作数的地址,取出数据送到AX。

关键:在上方址变址寻址的基础上,添加了一个disp常量,更加灵活

物理地址:无说明都是DS段左移4位+地址,设DS=3000H,物理地址=30000H+disp+寄存器中的值+寄存器中的值

有效地址:disp+寄存器中的值+寄存器中的值

逻辑地址:3000H:寄存器中的值+寄存器中的值

隐含寻址

操作数隐含在CPU的某个通用寄存器或内存的某指定单元中,指令中不直接给出操作数或操作数地址。 

MUL  OPR;MUL是操作码,表示乘法,OPR为乘数,而被乘数则隐含在累加器AX(16位乘法)或AL(8位乘法)中。 

隐含寻址可以缩短指令的长度。

关键:在做某些运算或者操作时,计算机直接从固定的位置去取,不需要再指定。

堆栈寻址

堆栈是由若干个连续主存单元组成的先进后出(first in last out,即FILO)存储区 

第一个放入堆栈的数据存放在栈底,最近放入的数据存放在栈顶。栈底是固定不变的,而栈顶是随着数据的入栈和出栈在时刻变化。 

栈顶的地址由堆栈指针SP指明。

你可能感兴趣的文章

评论区

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。