#############################################################################
2010年5月9日
第三章 8086的寻址方式和指令系统
【课前思考】
(1) 什么是指令和指令系统?指令在什么时候由哪部分来执行?
每种计算机都有一组指令集供给用户使用,这组指令集就称为计算机的指令系统。
(2) 8086汇编语言指令由几部分组成?各部分的作用是什么?
(3) 8086汇编语言指令可以有几个操作数?指令中指定的操作数可能存放在哪里?
(4) 什么是寻址方式?8086汇编语言提供了几种寻址方式?
(5) 各种寻址方式所确定的有效地址是什么?
(6) 在存储器寻址方式中,为什么有时候要使用段跨越前缀?
(7) 8086机器语言指令由哪几个字节组成?为什么说汇编语言指令与机器指令是一一对应的?
(8) 8086的指令系统按功能可分为几组?
(9) 每条指令的功能、助记符、所支持的寻址方式、对标志位的影响、需要预置的参数以及隐含使用的或限定使用的寄存器等。
【学习目标】
熟练掌握8086各种寻址方式;熟悉8086常用指令的功能
一、8086的寻址方式。与数据有关的寻址方式
相对原操作数的寻址
立即寻址 MOV AX,3069H
寄存器寻址 MOV AL,BH
直接寻址 MOV AX,[2000H]
寄存器间接寻址 MOV AX,[BX]
寄存器相对寻址 MOV AX,COUNT[SI]
基址变址寻址 MOV AX,[BP][DI]
相对基址变址寻址 MOV AX,MASK[BX] [SI]
后五种方式统称为存储器寻址
1,立即寻址方式
MOV AL,5
MOV AX,3064H
MOV AL,'A'
立即寻址方式只能用于原操作数字段,原操作数和目地操作数的字长必须一致。
不能直接给段寄存器和标志寄存器赋予立即数
2,寄存器寻址方式 操作数在批定的寄存器中。
MOV AX,BX
MOV AL,BH
MOV AX,3064H //原操作数是立即寻址方式,目的操作数是寄存器寻址方式
字节寄存器只有AH AL BH BL CH CL DH DL
源操作数和目地操作数的字长一致
(CS)代码段的段寄存器不能用MOV指令改变
3,存储器的寻址方式,(都是向内存单元中去寻址操作数)以下五种
1,直接寻址方式 有效地址EA由指令直接给出
MOV AX,[2000H] //[2000H]是数据段中的一个有效地址
隐含的段为数据段
可使用段跨越前缀 MOV AX,ES:[2000H]
操作数地址可由变量(符号地址)表示
VALUE DB 10
MOV AH,VALUE
MOV AX,VALUE //错,不能给一个字的寄存器,可以换以下形式处理
MOV AX,WORD PTR VALUE
2,寄存器间接寻址 EA(有效地址)在基址寄存器(BX/BP)或变址寄存器(SI/DI)中
MOV AX,[BX] PA=16D*(DS)+(BX)
MOV AX,ES:[BX] PA=16D*(ES)+(BX)
MOV AX,[BP] PA=16D*(SS)+(BP)
不允许使用AX,CX,DX存放EA(有效地址)
如错误例子: MOV AX,[CX]
源操作数和目地操作数的这了长一致
MOV DL,[BX] //[BX]指示一个字节单元
MOV DX,[BX] //[BX]指示一个字单元
适于数组,字符串,表格的处理
3,寄存器相对寻址方式
(BX) 8位
有效地址=(BP)+ 16位 位移量
(SI)
(DI)
例:MOV AX,COUNT[SI] 或否MOV AX,[COUNT+SI]
假设(DS)=3000H,(SI)=2000H,COUNT=3000H,
那么PA=35000H
假设(35000H)=1234H,那么(AX)=1234H
适于数组,字符串,表格的处理
4,基址变址寻址方式
(BX) (SI)
有效地址= +
(BP) (DI)
例:MOV AX,[BX][DI] 或 MOV AX,[BX+DI]
MOV AX,ES:[BX][SI]
适于数组、字符串、表格的处理
必须是一个基址寄存器和一个变址寄存器的组合
5,相对基址变址寻址方式
(BX) (SI) 8位
有效地址= + + 位移量
(BP) (DI) 16位
例: MOV AX,MASK[BX][SI]
MOV AX,MASK[BX+SI]
MOV AX,[MASK+BX+SI]
二、8086的寻址方式、与转移地址有关的寻址方式
段内直接寻址
段内间接寻址
段间直接寻址
段间间接寻址