文档介绍:8086指令的寻址方式
指令:微处理器提供的某一种基本操作功能。
(*)进行什么操作(操作码)
(*)对什么进行操作(操作数或操作数的来源)
操作后的结果数据可以存放到某个原来的操作数位置
指令系统: 计算机提供所有的指令的集合。
(*)指令系统随CPU的不同而不同
机器语言:采用二进制的机器码表示指令、数据和指令数据的地址等信息的。10111000 00000101 00000000
汇编语言:采用助记符表示的程序设计语言。汇编语言源程序是机器语言程序的符号表示。(编译器处理)
MOV AX,O3H
汇编语言指令的格式:标号:指令助记符操作数;注释
例如:
LINE1: INC CX ;计数器加一
ADD AX, BX
DAA
(*)标号的命名规则 (*)指令助记符不可缺省 (*)操作数在不同的情况下可以有2个,1个或者是没有 (*)注释必须以分号开头,注释不生成目标代码
(*)四个部分可以用制表符隔开。
寻址方式:指令中给出操作数的方式
操作数的寻址,例如 MOV AX,[1234H]
指令的寻址, 例如 JUMP LAB
操作数的来源: ①指令代码中直接给出。 MOV AX,1200H
②存放在寄存器中。 MOV AX,BX
③存放在指定的存储单元中。 MOV AX,[3456H]
1、立即寻址: 操作数直接包含在指令中,在操作码之后。,
(*)不必执行总线周期访问存储器,故称之为立即数。
(*)立即数可以是一个8位或16位数。
例如: MOV AL, 80H MOV AX, 1090H
(*)立即数寻址方式只能用于源操作数,不能用于目的操作数。
错误:MOV 1200,AX
(*)一条指令中源操作数和目的操作数可能有不同的寻址方式
2、寄存器寻址:操作数包含在CPU内的某个寄存器中,指令中直接给出该寄存器名,
16位:AX,BX,CX,DX, SI, DI, SP,BP
8位:AL,BL,CL, DL,AH,BH,CH,DH
例如:INC CX
MOV AX, BX
以下介绍的几个寻址方式将针对存储器操作数而言的。若操作数在存储器中,一般位于数据段、堆栈段或附加段中,这时指令中给出的是操作数所在单元的地址(EA)或产生EA的计算方式。显然执行这类指令时:
①CPU首先要计算出有效地址EA(EA是一个不带符号的16位数)
②再由总线接口部件BIU计算出物理地址
③再执行总线周期按该物理地址访问存储器并取出操作数送给EU,由EU具体执行该指令。
3、直接寻址:操作数在存储器中的16位有效地址由指令直接给出。
例如: MOV AX, [1070H] MOV AL, [1070H]
(*)要用方括号括起地址以免与立即数寻址混淆
(*)默认是从数据段取数,如果不是数据段则要在前面加段跨越
前缀
例如:MOV BX, [2000H]
MOV BX, ES:[2000H]
4、间接寻址
(4A)寄存器间接寻址:操作数的有效地址在指令中指定的某个寄存
器中。
例如:MOV AX, [BX]
(*)可用的寄存器只有四个BX,BP,SI,DI
错误:MOV AX,[DX]
(*)如果间址寄存器为BP则默认为是堆栈段,如果间址寄存器为
BX,SI,DI则默认为是数据段。
(*)在一条指令中,不能同时有两个存储器操作数(避免指令过长)。错误:MOV [BX],[1200H]
(4B)寄存器相对间接寻址: 有效地址EA等于指令所指示的寄存器中
的内容再加上指令中给定的8/16位的位移量。
例如: MOV AX, [SI+100]
MOV AX, [SI]+100
MOV AX, 100[SI]
(*)寄存器相对寻址有以上三种写法
(*)寄存器相对寻址可以用来寻址一维表中的数据
(4C)基址变址寻址: 基址变址寻址是操作数的有效地址EA由指令
指定的一个基址寄存器(BX或BP)和一个变址寄
存器(SI或D1)内容之和。
例如: MOV AX, [BX][DI]
MOV AX ,[BX+DI]
(*)基址变址寻址可以用来寻址二维表中的数据
(*)要注意只能是基址和变址的组合而不能用两个基址或两个变址的组合
错误:MOV AX,[SI][DI]
MOV AX.[BX][BP]
(4D)相对基址变址寻址:
例如: MOV AX,100[BX][SI]
MOV AX,[BX+SI+100H]
MOV AX,100[BX+SI]
(*)所有的存储器操作数寻址方式都支持段跨越前缀。
(*)使用BP寄存器做间接寻址时注意默认的段。
测试题一:
写出下列指令中源操作数的寻址方式:
(1)MOV SI,1000 (2)M