配色: 字号:
第3章_1 寻址方式
2012-05-16 | 阅:  转:  |  分享 
  
课后作业3.2,3.3,3.4,3.7,3.8第三章指令系统三峡大学陈慈发0717-6394358,13972597
617chcf0415@126.com128086CPU的指令格式8086CPU的指令系统38086CPU的寻址方式
8086CPU的指令格式指令:计算机完成某种操作的命令。机器语言:指令的二进制编码构成的程序设计语言。
汇编语言:指令的助记符编码构成的程序设计语言。本书所称指令一般是指汇编指令,即用汇编语言编写的指令。MOVAX,05C
7HB8C705H汇编指令机器指令汇编语言机器语言编译(一对多)汇编(一对一)高级语言C/C++PASCAL
……机器指令格式操作码地址码每条机器指令都由”0“和”1“组成,包含操作码和地址码。格式:操作码:说明指令的性质与功能
。地址码:参与运算的操作数或存放操作数的地址。分固定长度和可变长度。X86系列CPU(CISC)采用可变长度,ARM(RI
SC)采用固定长度。8086CPU的机器指令长度为1~6个字节。如:汇编指令MOVAX,05C7H的机器指令编码为B8
C705H,转换成二进制为:101110001100011100000101B汇编指令格
式单操作数指令INC CXDEC AX操作码:用助记符表示,执行一种操作,如传送、运算、移位、跳转等操作。操作数:各
种操作的对象,可以是具体的数值、寄存器或存储器地址,可有0/1/2个操作数。操作数和操作码之间应用空格或制表符隔开。标号:用符
号表示存放该条指令的存储器地址,符号后加冒号。注释:以分号为首,对该条指令进行说明。用符号来表示操作码和地址码。格式:操
作码助记符操作数助记符;注释标号:无操作数指令STCCLI双操作数指令ADD CX,1SUB AX,1目的操
作数源操作数8086CPU的寻址方式寻址:寻找操作数或操作数的地址寻址方式:寻找操作数地
址的方法操作数的位置操作数名称寻址方式名称在指令中立即数立即寻址(immediateaddressing)在寄存器
中寄存器操作数寄存器寻址(registeraddressing)在存储器中存储器操作数存储器寻址(memoryadd
ressing)在I/O端口中I/O操作数I/O端口寻址(I/Oportaddressing)立即寻址(Immed
iateAddressing)操作数直接存放在指令中,紧跟在操作码之后,作为指令的一部分,存放在代码段里,这种操作数称
为立即数。指令:MOVAL,07H指令:MOVAX,1A2BH立即数不能做目的操作数。 (×)MOV3,
AL源、目的操作数的字长必须一致。 (×)MOVAH,3064H寄存器寻址(registerAddre
ssing)操作数存放在CPU内部的某个寄存器中,指令中不出现操作数本身,而是给出存放操作数的寄存器的名字。寄存器寻址既可
用于源操作数,也可用于目的操作数。MOV CL,BL ;将BL中的8位寄存器操作数送寄存器CL中MOV AX,DX ;
将DX中的16位寄存器操作数送寄存器AX中MOV DS,AX ;将AX中的16位寄存器操作数送寄存器DS中INC SI
;将SI寄存器的内容加1并非所有寄存器都可自由使用。 (×)MOVCS,AX源、目的操作数的字长必须一致。 (×
)MOVAH,BX寻址速度很快。存储器寻址(MemoryAddressing)操作数存放在存储器中,CPU取出指
令后,为了获得操作数(对于源操作数)或操作数的存放地址(对于目的操作数)还要再次访问存储器。指令中以逻辑地址(有效地址EA)表
示操作数存放位置,可能存放在存储器任意一个逻辑段中,CPU必须计算出操作数的物理地址才能完成存储单元的读、写。存储器寻址既可用
于源操作数,也可用于目的操作数,但两者不能同时使用。用方括号对[]表示存储器寻址。逻辑地址LA:段地址:偏移地址物理地
址PA:段地址×16+偏移地址有效地址EA:偏移地址存储器操作数具有三个属性:段地址:操作数所在的逻辑段的段地
址。偏移地址:相对段地址的偏移量。数据类型:操作数是一个字节/字,用BYTEPTR/WORDPTR区分。寻址方式有
效地址EA默认的段寄存器直接寻址(③)[DISP]DS寄存器间接寻址(①/②)[BX]DS[BP]SS[SI
]DS[DI]DS基址寻址(①+③)[BX+DISP]DS[BP+DISP]SS变址寻址(②+③)[SI+
DISP]DS[DI+DISP]DS基址加变址寻址(①+②+③)[BX+SI+DISP(或无DISP)]DS[BX
+DI+DISP(或无DISP)]DS[BP+SI+DISP(或无DISP)]SS[BP+DI+DISP(或无DISP)]
SS直接寻址有效地址EA在指令中直接给出,默认段是DS。EA:操作数的偏移地址PA:(DS)×16+EA
【例】MOVAX,[2000H];数据段中偏移地址为2000H所对应的字送AX中设(DS)=3000H,则EA=
2000H,PA=32000H50H30H3200030H50HAHAL(AX)=3050H320
01地址增量隐含的段为数据段只能有一个内存操作数与指令MOVAX,2000H的区别?寄存器间接寻址有效地址EA由
寄存器(BX,BP,SI,DI)间接给出。当EA=(BX)/(SI)/(DI)时:PA=(DS)×16+EA当
EA=(BP)时:PA=(SS)×16+EAMOVAX,[BX] ;源操作数在数据段,EA=BX,PA=DS×16+BX
MOVAX,[DI] ;源操作数在数据段,EA=DI,PA=DS×16+DIMOV[SI],AL ;目的操作
数在数据段,EA=SI,PA=DS×16+SIMOV[BP],DI ;目的操作数在堆栈段,EA=BP,PA=SS×16+
BPMOVBYTEPTR[BX],20HMOV[DI],WORDPTR20H不允许使用AX、CX、DX、SP存
放EA:(×)MOVAX,[CX]源、目的操作数不能同时带方括号:(×)MOV[BX],[SI]立即数和存储器寻址
方式同时使用时应明示数据类型:(×)MOV[BX],20H基址寻址有效地址EA为基址寄存器(BX,BP)的内容加偏移量。
当EA=(BX)+DISP时:PA=(DS)×16+EA当EA=(BP)+DISP时:PA=(SS)×16+EA
MOVAX,[BX+100H] ;源操作数在数据段,EA=BX+100H,PA=DS×16+EAMOV[BP-0
8H],DI ;目的操作数在堆栈段,EA=BP-08H,PA=SS×16+EAMOV[BX-2000H],BYTEPTR
10HMOV[BP+02H],WORDPTR1000H 变址寻址有效地址EA为变址寄存器(SI,DI)的内容加偏移
量。EA=(SI)/(DI)+DISPPA=(DS)×16+EAMOVAX,[SI+1020H] ;源
操作数在数据段,EA=SI+1020H,PA=DS×16+EAMOV[DI-10H],CL ;目的操作数在数据段,EA=
DI-10H,PA=DS×16+EAMOV[SI-20H],WORDPTR80HMOV[DI+08H],BYTE
PTR0AAH 基址加变址寻址有效地址EA为基址寄存器(BX,BP)加变址寄存器(SI,DI)的内容加偏移量。PA=(DS
)×16+EA,当基址寄存器为BX时PA=(SS)×16+EA,当基址寄存器为BP时MOV[BX+DI],AX ;目的操作
数在数据段EA=(BX)+(DI),PA=(DS)×16+EAMOVDX,[BX][SI] ;源操作数在数据段EA=(B
X)+(SI),PA=(DS)×16+EAMOV[BX][DI+20H],BYTEPTR99H ;目的操作数在数据段E
A=(BX)+(DI)+20H,PA=(DS)×16+EAMOVDH,[BX-30H][SI] ;源操作数在数据段EA=(
BX)+(SI)-30H,PA=(DS)×16+EAMOV[BP][DI],BX ;目的操作数在堆栈段EA=(BP)+(D
I),PA=(SS)×16+EAMOVCX,[BP+SI] ;源操作数在堆栈段EA=(BP)+(SI),PA=(SS)×1
6+EAMOV[BP][DI-200H],WORDPTR80H ;目的操作数在堆栈段EA=(BP)+(DI)-200H
,PA=(SS)×16+EAMOVDL,[BP+SI+40H] ;源操作数在堆栈段EA=(BP)+(SI)+40H,PA=
(SS)×16+EA必须是一个基址寄存器和一个变址寄存器的组合(×)MOVAX,[
BX][BP](×)MOV[SI][DI-02H],BXI/O端口寻址(I/OP
ortAddressing)只适用于I/O端口的输入输出指令,用于指明I/O端口的地址。端口地址不需要加[]。当端口地址为
00H~FFH时,端口地址可直接放在I/O指令中,也可放在DX寄存器中当端口地址为0100H~FFFFH时,端口地址必须放在D
X寄存器中IN AL,20H ;20H是端口地址,为I/O端口寻址MOV DX,3F8H ;双字节端口地址须先放到DX
寄存器中IN AX,DX ;DX中存放的是端口地址OUT 80H,AX ;80H是端口地址,为I/O端口寻址MOV
DX,0F8H ;单字节端口地址也可先放到DX寄存器中OUT DX,AL ;DX中存放的是端口地址在I/O指令介绍中进一步
详细说明段超越缺省情况下,存储器寻址各段寄存器与基址/变址寄存器和偏移量是固定搭配的:DS:BX,DI,SI,DISPSS:BP加上段前缀,可打破这种固定搭配关系实现跨段操作,称为段超越。MOV AX,ES:[BX] ;PA=(ES)×16+(BX)MOV CX,SS:[SI] ;PA=(SS)×16+(SI)MOV CS:[BX+DI],AX ;PA=(CS)×16+(BX)+(DI)MOVBYTEPTRES:[2000H],0FFH ;PA=(ES)×16+2000H
献花(0)
+1
(本文系依米荷阳首藏)