一条指令的机器码通常包含操作码(OP)与操作数两部分指...

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作数的有效地址由基址寄存器的值与位移量相加形 成,即
EA=基址+位移量
例如:设SS=3000H, BP=2000H MOV AX,4000H[BP]或MOV AX,[BP+4000H] ;
BP 20H 00H CS→
操作:3000×10H +EA= 2000H + 4000H PA= 36000H
以上3个分量的不同组合,可以构成6种不同的有效 地址形成方式,即存储器操作数有6种寻址方式:
•位移量 •基址/变址 •基址+位移量 •变址+位移量 •基址+变址 •基址+变址+位移量
⑴直接寻址 在直接寻址方式中,操作数的有效地址由指令直接
给出,即 EA=位移量
在指令机器码中,16位有效地址存放在代码段指令操 作码后的操作数字段中。
2.4.2 寄存器寻址
操作数在寄存器中,指令给出存放操作数的寄存器 号(寄存器名称)即可。
对于16位操作数,寄存器可以是AX、BX、CX、 DX、SI、DI、SP和BP等;
对于8位操作数,寄存器可以是AL、AH、wenku.baidu.comL、BH、 CL、CH、DL和DH。
该寻址方式由于操作数在寄存器中,不需访问存储 器,故可得到较高的运算速度。
代码段 OP D8
操作码 操作数
代码段
OP 操作码 低位D16 操作数 高位D16
例2.2 MOV AX,3578H
指令执行后,AX=3578H,16位数据存入AX寄存器。
AH
AL
AX
X35XH
7X8HX
CS
代码段
MOV
78H
35H
图中指令存放在代码段中,OP表示该指令的操作码部 分(用MOV表示),接下去存放立即数的低位字节78H, 再存放高位字节35H,它们是指令机器码的一部分。
2.4 8086寻址方式
一条指令的机器码通常包含操作码(OP)和操作 数两部分。指令的格式如下:
操作码OP CODE 操作数Operand
例如,MOV AL,03H; 源操作数 目的操作数 操作码
SOPD DOPD
•操作码表示指令执行什么操作(必有) •操作数表示参加操作的数或数的存放地址
寻找操作数存放地址的方式称为寻址方式
AX 12H 34H
DS→
367C1H 367C2H
34H 数据段 12H
⑹带位移的基址变址寻址
操作数的有效地址是一个基址寄存器的内容,一个变 址寄存器的内容与位移量之和,即
EA=基址+变址+位移量 例2.8 MOV AL,COUNT[SI]
或MOV AL,[SI+COUNT] 其中位移量COUNT为符号地址,可由伪指令来定义, (详见第3章伪指令)。 其功能是将数据段中EA=(SI+COUNT的16位偏移量) 的内存单元的8位操作数送给AL:
例2.3 MOV AX , BX 若指令执行前,AX=3064H,BX=1234H。 则指令执行后,AX=1234H,BX=1234H。
AX 31026344HH
BX 1234H
问题:如果指令为MOV AL , BL呢?
2.4.3 存储器寻址
存储器寻址的操作数在某个或某几个存储单元中。
要得到存储器操作数,必须执行访问存储器单元的总 线周期。存储器单元的逻辑地址由两部分组成:段地 址和偏移地址。段址通常由DS提供,如果通过基址指 针BP寻址,则段址由SS提供。
此时段寄存器为DS
例如:设DS=2000H, AX=7850H ,而指令如下: MOV AX,[3000H];
操作:2000×10H +EA= 3000H PA= 23000H
AX 7380H 50H
CS→
操作码 00H 10H
代码段
23000H 50H 数据段 23001H 30H
⑵寄存器间接寻址 操作数的有效地址由基址寄存器BX、BP或变址寄存器 SI、DI提供。
即AL ←(SI+COUNT)
例如:设DS=3000H, BX=2000H, SI=1000H, MASK=0250H
MOV AX,MASK[BX][SI]或MOV AX,MASK[BX+SI]或 MOV AX, [MASK+BX+SI]
BX 20H 00H
SI 10H 00H
操作:3000×10H +EA= 2000H + 1000H + 0250H PA= 33250H
偏移地址(有效地址、EA)由下面3个地址分量计算 得到:
16位有效地址EA=基址+变址+位移量
在8086中,基址由基址寄存器BX和基址指针BP提 供,变址由变址寄存器SI、DI提供,位移量是一个8 位或16位二进制常数。即
BX SI
8位
EA=
+
+
位移量
BP
DI
16位
基址 变址
位移量
基址 变址 位移量
AX 12H 34H
SS→
36000H 36001H
操作码 00H 40H
34H 12H
代码段 数据段
⑷带位移的变址寻址 操作数的有效地址由变址寄存器的值与位移量相加形 成,即
EA=变址+位移量
例2.8 MOV AL,COUNT[SI] 或MOV AL,[SI+COUNT]
其中位移量COUNT为符号地址,可由伪指令来定义, (详见第3章伪指令)。 其功能是将数据段中EA=(SI+COUNT的16位偏移量) 的内存单元的8位操作数送给AL:
BX BP EA= SI BP
例如:设DS=2000H, AX=7850H ,BX=1000H MOV AX,[BX];
BX 10H 00H
操作:2000×10H +EA= 1000H PA= 21000H
AX 7580H A50H
DS→
数据段
21000H 21001H
A0H 50H
⑶带位移的基址寻址
AX 56H 78H
OP 50H 02H
DS→
33250H 33251H
数据段 78H 56H
8086的寻址方式分为两类:
•数据寻址方式 √本节
•转移地址寻址方式
2.4.1 立即寻址
该寻址方式中,指令直接给出8位或16位的操作数 (立即数)。该数紧跟在操作码之后,作为指令的操 作数字段存放在指令代码中
如果是16位立即数,那么低位字节数存放在低地址 单元中,高位字节数存放在高地址单元中。机器码存 放形式如图
即AL ←(SI+COUNT)
⑸基址变址寻址
操作数的有效地址是基址寄存器的值与变址寄存器的 值相加形成,即
EA=基址+变址
例如:设DS=3000H, BX=6780H, DI=0041H MOV AX,[BX][DI]或MOV AX,[BX+DI] ;
BX 67H 80H
DI 00H 41H
操作:3000×10H +EA= 6780H + 0041H PA= 367C1H
相关文档
最新文档