
汇编语言指令详解.doc
28页1第一讲第一讲第三章第三章 指令系统指令系统----寻址方式寻址方式回顾回顾: : 8086/8088 的内部结构和寄存器,地址分段的概念,8086/8088 的工作过程重点和纲要:重点和纲要:指令系统--寻址方式有关寻址的概念;6 种基本的寻址方式及有效地址的计算教学方法、实施步骤教学方法、实施步骤时间分配时间分配教学手段教学手段回 顾5”×2 讲 授40” ×2 提 问3” ×2 小 结2” ×2板书 计算机 投影仪 多媒体课件等讲授内容:讲授内容:3.1 8086/8088 寻址方式寻址方式首先,简单讲述一下指令的一般格式:操作码操作数……操作数计算机中的指令由操作码字段和操作数字段组成操作码:指计算机所要执行的操作,或称为指出操作类型,是一种助记符操作数:指在指令执行操作的过程中所需要的操作数该字段除可以是操作数本身外,也可以是操作数地址或是地址的一部分,还可以是指向操作数地址的指针或其它有关操作数的信息寻址方式就是指令中用于说明操作数所在地址的方法,或者说是寻找操作数有效地址的方法8086/8088 的基本寻址方式有六种1.立即寻址.立即寻址所提供的操作数直接包含在指令中。
它紧跟在操作码的后面,与操作码一起放在代码段区域中如图所示例如:MOV AX,3000H2立即数可以是 8 位的,也可以是 16 位的若是 16 位的,则存储时低位在前,高位在后立即寻址主要用来给寄存器或存储器赋初值2.直接寻址.直接寻址操作数地址的 16 位偏移量直接包含在指令中它与操作码—起存放在代码段区域,操作数一般在数据段区域中,它的地址为数据段寄存器 DS 加上这 16位地址偏移量如图 2-2 所示例如: MOV AX,DS:[2000H];图 2-2(对 DS 来讲可以省略成 MOV AX,[2000H], 系统默认为数据段)这种寻址方法是以数据段的地址为基础,可在多达 64KB 的范围内寻找操作数8086/8088 中允许段超越,即还允许操作数在以代码段、堆栈段或附加段为基准的区域中此时只要在指令中指明是段超越的,则 16 位地址偏移量可以与CS 或 SS 或 ES 相加,作为操作数的地址MOV AX,[2000H] ;数据段MOV BX,ES:[3000H] ;段超越,操作数在附加段即绝对地址=(ES)*16+3000H3.寄存器寻址.寄存器寻址操作数包含在 CPU 的内部寄存器中,如寄存器 AX、BX、CX、DX 等。
例如:MOV DS,AXMOV AL,BH4.寄存器间接寻址.寄存器间接寻址3操作数是在存储器中,但是,操作数地址的 16 位偏移量包含在以下四个寄存器 SI、DI、BP、BX 之一中可以分成两种情况:(1)以 SI、DI、BX 间接寻址,则通常操作数在现行数据段区域中,即数据段寄存器(DS)*16 加上 SI、DI、BX 中的 16 位偏移量,为操作数的地址,例如: MOV AX, [SI] 操作数地址是:(DS)*16+(SI)(2)以寄存器 BP 间接寻址,则操作数在堆栈段区域中即堆栈段寄存器(SS)*16 与 BP 的内容相加作为操作数的地址,例如:MOV AX,[BP] 操作数地址是:(SS)*16+(BP)若在指令中规定是段超越的,则 BP 的内容也可以与其它的段寄存器相加,形成操作数地址例如: MOV AX,DS:[BP] 操作数地址是:(DS)*16+(BP)5.变址寻址.变址寻址由指定的寄存器内容,加上指令中给出的 8 位或 16 位偏移量(当然要由一个段寄存器作为地址基准)作为操作数的偏移地址 (操作数在存贮器中)可以作为寄存器变址寻址的四个寄存器是 SI、DI、BX、BP。
⑴若用 SI、DI 和 BX 作为变址,则与数据段寄存器相加,形成操作数的地址即默认在数据段;⑵若用 BP 变址,则与堆栈段寄存器相加,形成操作数的地址即默认在堆栈段例如: MOV AX,COUNT[SI];操作数地址是:(DS)*16+(SI)+COUNT但是,只要在指令中指定是段超越的,则可以用别的段寄存器作为地址基准6.基址加变址寻址.基址加变址寻址把 BX 和 BP 看成是基址寄存器,把 SI、DI 看着是变址寄存器,把一个基址寄存器(BX 或 BP)的内容加上一个变址寄存器(SI 或 DI)的内容,再4加上指令中指定的 8 位或 16 位偏移量(当然要以一个段寄存器作为地址基准)作为操作数的偏移地址,如图所示操作数在存贮器中,其偏移地址由(基址寄存器)+(变址寄存器)+相对偏移量形成基址寄存器――BX:数据段、BP:堆栈段;变址寄存器――SI、DI例如:MOV AX,[BX][SI] 或 MOV AX,[BX+SI]也可放置一个相对偏移量,如 COUNT 、MASK 等等,用于表示相对寻址MOV AX,MASK[BX][SI] MOV BH,COUNT[DI][BP];MOV BH,COUNT[BP+DI]若用 BX 作为基地址,则操作数在数据段区域若用 BP 作为基地址,则操作数在堆栈段区域但若在指令中规定段是超越的,则可用其它段寄存器作为地址基准。
P.28 表 2-1 段寄存器使用的基本约定访问存储器类型默认段寄存器可指定段寄存器段内偏移地址来源取指令码CS无IP堆栈操作SS无SP串操作源地址DSCS、ES、SSSI串操作目的地址ES无DIBP 用作基址寄存器SSCS、DS、ES根据寻址方式求得有效地址一般数据存取DSCS、ES、SS根据寻址方式求得有效地址习题与思考:习题与思考:1.假定 DS=2000H,ES=2100H,SS=1500H,SI=00A0H,BX=0100H,BP=0010H,数据变 量 VAL 的偏移地址为 0050H,请指出下列指令源操作数是什么寻址方式?其物理地址是多 少? (1)MOV AX,0ABH(2)MOVAX,[100H] (3)MOVAX,VAL(4)MOVBX,[SI] (5)MOVAL,VAL[BX](6)MOVCL,[BX][SI] (7)MOVVAL[SI],BX(8)MOV[BP][SI],100 2.已知 SS=0FFA0H,SP=00B0H,先执行两条把 8057H 和 0F79H 分别进栈的 PUSH 指令, 再执行一条 POP 指令,试画出堆栈区和 SP 内容变化的过程示意图。
(标出存储单元的地址)5第二讲第二讲 3.2 指令系统指令系统--数据传输、算术运算数据传输、算术运算回顾:回顾:8086/8088 的内部结构和寄存器,8086/8088 的工作过程8086/8088 的寻址方式及操作数地址的计算重点和纲要:重点和纲要:要求学生了解指令的功能,掌握数据传送类,算术运算类指令的使用方法 (掌握指令内涵,会用)教学方法、实施步骤教学方法、实施步骤时间分配时间分配教学手段教学手段回 顾5”×2 讲 授40” ×2 提 问3” ×2 小 结2” ×2板书 计算机 投影仪 多媒体课件等讲授内容讲授内容::3.2 8086/8088 指令系统指令系统8086/8088 的指令系统可以分为以下六个功能组1.数据传送(Data Transter) 2.算术运算(Arithmetic) 3.逻辑运算(Logic) 4.串操作(String menipulation) 5.程序控制(Program Control) 6.处理器控制(Processor Control)6一、数据传送指令一、数据传送指令主要介绍 MOV,XCHG、堆栈和地址传送指令。
1.数据传送.数据传送 MOV 指令指令一般格式:MOV OPRD1,OPRD2MOV 是操作码,OPRD1 和 OPRD2 分别是目的操作数和源操作数功能:完成数据传送具体来说,一条数据传送指令能实现:⑴CPU 内部寄存器之间数据的任意传送(除了代码段寄存器 CS 和指令指针 IP 以外)MOV AL,BL;字节传送MOV CX,BX;字传送MOV DS,BX⑵立即数传送至 CPU 内部的通用寄存器组(即 AX、 BX、CX、DX、BP、SP、SI、DI),MOV CL,4MOV AX,03FFHMOV SI,057BH⑶CPU 内部寄存器(除了 CS 和 IP 以外)与存储器(所有寻址方式)之间的数据传送MOV AL,BUFFERMOV AX,[SI]MOV [DI],CXMOV SI,BLOCK[BP]MOV DS,DATA[SI+BX]MOV DEST[BP+DI],ES⑷ 能实现用立即数给存储单元赋值例如:MOV [2000H],25HMOV [SI],35H对于 MOV 指令应注意几个问题:①存储器传送指令中,不允许对 CS 和 IP 进行操作;②两个操作数中,除立即寻址之外必须有一个为寄存器寻址方式,即两个存储器操作数之间不允许直接进行信息传送;7如我们需要把地址(即段内的地址偏移量)为 AREAl 的存储单元的内容,传送至同一段内的地址为 AREA2 的存储单元中去,MOV 指令不能直接完成这样的传送,但我们可以用 CPU 内部寄存器为桥梁来完成这样的传送:MOV AL,AREAlMOV AREA2,AL③两个段寄存器之间不能直接传送信息,也不允许用立即寻址方式为段寄存器赋初值;如:MOV AX,0;MOV DS,AX④目的操作数,不能用立即寻址方式。
2.堆栈指令.堆栈指令 (简述堆栈的概念及存取特点,如先进后出)包括入栈(PUSH)和出栈(POP)指令两类仅能进行字运算 (操作数不能是立即数)⑴ 入栈指令 PUSH一般格式:PUSH OPRD源操作数可以是 CPU 内部的 16 位通用寄存器、段寄存器(CS 除外)和内存操作数(所有寻址方式) 入栈操作对象必须是 16 位数功能:将数据压入堆栈执行步骤为:SP=SP-2;[SP]=操作数低 8 位;[SP+1]= 操作数高 8 位例如:PUSH BX执行过程为:SP=SP-1,[SP]=BH;SP=SP-1,[SP]=BL,如图 2-8 所示 ⑵ 出栈指令 POP一般格式:POP OPRD功能:将数据弹出堆栈对指令执行的要求同入栈指令例如:POP AX 图 2-8POP [BX] POP DS3.交换指令.交换指令 XCHG一般格式:XCHG OPRD1,OPRD28功能:完成数据交换这是—条交换指令,把一个字节或一个字的源操作数与目的操作数相交换。
交换能在通用寄存器与累加器之间、通用寄存器之间、通用寄存器与存储器之间进行但段寄存器和立即数不能作为一个操作数,不能在累加器之间进行例如: XCHG AL,CLXCHG AX,DIXCHG BX,SIXCHG AX,BUFFERXCHG DATA[SI],DH4.累加器专用传送指令.累加器专用传送指令有三种,输入、输出和查表指令前两种又称为输入输出指令⑴ IN 指令一般格式:IN AL,n ; B AL←[n]IN AX,n ; W AX←[n+1][n]IN AL,DX ; B AL←[DX]IN AX,DX ; W AX←[DX+1][DX]功能:从 I/O 端口输入数据至 AL 或 AX输入指令允许把一个字节或一个字由一个输入端口传送到 AL 或 AX 中若端口地址超过 255 时,则必须用 DX 保存端口地址,这样用 DX 作端口寻址最多可寻找 64K 个端口⑵ OUT 指令一般格式:OUT n,AL ; B 。
