第3章 80x86寻址方式和指令系统
03-第3-4-章-YJ-第1部分-到加减乘除指令介绍
第三章80486微处理器指令系统㈠教学目标介绍80486的寻址方式及指令系统。
㈡学习要求通过本章的学习,要求熟悉各种寻址方式的使用场合以及常用指令的使用方法。
㈢讲授内容指令指令是规定计算机进行某种操作的命令二进制代码形式的指令中应包含三方面的信息:执行什么操作操作数的位置结果存放的位置指令的一般格式[标号:]操作助记符[操作数],[操作数];[注释]3.180486微处理器的寻址方式寻找操作数所在地址的方法即为寻址方式(Addressing Mode)。
80X86的寻址方式可分为两类:1.操作数的寻址方式2.转移地址的寻址方式一、操作数寻址方式由于操作数作为指令的操作对象,可以存储在存储器中(称为存储器操作数)、存储在寄存器中(称为寄存器操作数)或直接包含在指令中(称为立即数),因此,与之对应有多种寻址方式。
80X86可粗略地划分为3类10种寻址方式,其中,访问存储器操作数有8种寻址方式。
(1)一、立即寻址操作数作为立即数直接存在指令中。
例:MOV AX, 1234HMOV BL, 0A7HMOV ECX, 12345678H以第一条指令为例的立即数寻址方式的执立即寻址示意图行过程如图。
机器码在内存单元中是由上至下按从低到高的地址顺序排列,即存放数据的特征是低前高后。
汇编语言规定立即数的表示方式:P54(2)二、寄存器寻址操作数存放在CPU某个8位、16位或32位寄存器中。
例:MOV EAX, EDXADD CL, 2该寻址方式指令码短,且无需从存储器取操作数,故执行速度快。
注意:指令中的DS不能省略。
为什么?(4)(三.2)寄存器间接寻址操作数所在存储单元的EA由规定的寄存器给出。
MOV SI,1000HMOV AX,[SI]16位寻址时,EA可以由SI,DI,BP或BX提供。
(其中BX、BP为基址寄存器,SI、DI为变址寄存器)若以SI,DI,BX间接寻址,则默认操作数在DS段中。
若以BP间接寻址,则默认操作数在SS段中。
80X86汇编语言电子教案(3-2-MOV指令)
提供的基本寻址方式可以分为三类立即寻址寄存器寻址存储器寻址与存储器有关的寻址的有效地址由以下四种成分组成1位移量存放在指令中的一个81632位的数2基址存放在基址寄存器中的内容3变址存放在变址寄存器中的内容4比例因子386及后继机型增加的一个术语1无比例因子8086286386及后继机型共有位移量直接寻址基址或变址位移量基址或变址—基址变址寻址2带比例因子386及后继机型位移量变址比例因子比例变址寻址比例因子基址+比例因子说明这些寻址方式不仅可以用于源操作数的寻址也可以用于目的操作数的寻址唯一例外的是立即寻址只能用于源操作数例MOV [BX][DI]AX 则源操作数为寄存器寻址目的操作数为基址变址寻址存储器寻址时所确定的内存地址既可以是字节字也可以是双字地址那么上述指令的目的操作数的宽度是多少呢指令中操作数要具有明确的类型寄存器寻址类型确定存储器操作数寻址类型由变量的类型属性确定其它情况类型下操作数类型由指令中其它操作数的类型或指令缺省类型来确定确定的操作数为字类型指令指示对一定操作对象进行何种操作的命令指令系统计算机CPU的指令集合称为指令系统一指令集说明学习要求指令的基本功能二数据传送指令1通用数据传送指令2累加器专用传送指令3地址传送指令4标志寄存器传送指令5类型转换指令特点负责把数据地址或立即数传送到寄存器或存储单元中1通用数据传送指令1传送指令传送指令执行操作DSTSRC DST SRC 的类型要一致双字字节MOV AXMOV AH MOV AX MOV BXMOV MAST[BP][DI]MOV BL MOV BYTE PTR [BX]MOV DSMOV ES MOV AXMOV [BX]MOV DS例MOV EAX MOV ES 哪些指令为非法形式例MOV AXMOV AHMOV AXMOV BXMOV MAST[BP][DI]MOV BLMOV BYTE PTR [BX]MOV DSMOV ESMOV AXMOV [BX]MOV DS寄存器寄存器字寄存器寄存器字节存储器寄存器字存储器寄存器寄存器存储器字节立即数寄存器立即数存储器字节寄存器段寄存器存储器段寄存器段寄存器寄存器存储器存储器段寄存器段寄存器MOV ES立即数段寄存器MOV EAX存储器寄存器双字MOV CS AXMOV 5ALMOV EAX BX都是非法指令如为了使指令字不要过长规定双操作数指令的两个操作数中只能有一个使用存储器寻址方式因此不允许双存储器操作在有通用性MOV [BX]2带符号扩展传送指令有符号数的扩展MOVSX386及后继机型可用格式MOVSX DST, SRC执行操作本指令有两种格式REG1REG源操作数可以是或存储单元的内容目的操作数必须是功能传送时将源操作数符号扩展送入目的寄存器可以是位MOVSX3带零扩展传送指令无符号数的扩展MOVZX386及后继机型可用格式MOVZX DST, SRC执行操作本指令有两种格式REG1REG源操作数目的操作数MOVSX功能传送时将高位扩展为送入目的寄存器可以是位MOVSX例1MOVSX EAX 2MOVZX EAX 若执行前DATA =0FFE0H DATA 为字单元1EAX =0FFFFFFE0H 2EAX=0000FFE0H一般的双操作数指令源目的操作数的长度一致MOVZX MOVSX 指令的源操作数的长度一定要小于目的操作数的长度如MOVSX DXALMOVZX EBXAL 4堆栈操作指令堆栈PC 机的堆栈是在内存中开辟的一端固定一端活动的存储区采用的工作方式栈顶SP 或ESP 址由低注意 1.信息的存入和取出都是从栈顶开始中栈顶由指示当堆栈地址长度为位时堆栈操作使用SP 当堆栈地址长度为位时堆栈操作使用ESP为了将清楚堆栈操作指令我们分8086/8088803868086/8088 PUSH/POP进栈指令执行操作出栈指令执行操作例SP→SP→例SP→SP→ES)=2367H, (SP)=0100H,试画出堆栈的变化情况(SP)=100H12H12H例都是非法指令80386SP SP 2 ESP ESP 2 SP SP 4 ESP ESP 4 1616位位在实方式下803868086为编写80386及后继的程序可利用位通用寄存器可使用新增指令可采用新增的寻址方式但是段的最大长64KB 当存储单元的地址偏移超过64KB 时不会引起地址的反绕而导致段跨越异常在实方式下80386的兼容最大段为64称为位段在保护方式下段长可达4G 称为位段在实方式下运行的程序只能使用位段尽管在实方式下只能使用位段但可以使用位操作数也可以使用位形式表示的存储单元地址例MOV EAX关于实方式程序的几点说明为单位指令可以有四种格式不允许它使用立即数寻址方式指令允许三种格式能为字节类型5PUSHA/PU格式PUSHA286及后继PUSHAD386及后继执行操作PUSHA位通用寄存器依次入栈入栈次序为AX CX DX BX指令执行前的SP BP SI DISP SP-16PUSHAD位通用寄存器依次入栈入栈次序为EAX ECX EDX EBX指令执行前的ESP EBP ESI EDIESP ESP-326POPA/POP格式执行操作POPA位通用寄存器依次出栈出栈次序为DI SI BP SP BX DX CX AXSP SP+16POPAD位通用寄存器依次出栈出栈次序为EDI E SI EBP ESP EBX EDX ECX EAXESP ESP+32PUSHA POPA PUSHAD不影响标志位例例7交换交换指令执行操作OPR1OPR1OPR1例如XCHG EAX,EBX ; EAX 字AL 为要查找数据在表格2累加器专用传送指令EAX AX 传送信息IN OUT 输出程序设计中讲解换码指令格式执行操作累加器EAX AX AL例MOV BX, OFFSET TABLE ; (BX)=0040H长度不超过256)或EBX下标→(AL)3地址传送指令1LEA REG, SRC ;2LDS REG, SRC ;3LES REG, SRC ;4LFS REG, SRC ;5LGS REG, SRC ;6LSS REG, SRC ;把首地址偏移地址传送指令执行操作位有效地址位有效地址位有效地址截取低位有效地址零扩展后存入则MOV BX LEA BXBX =3412H BX=0100HBLOCK的区别假设0100H BLOCK =3412H 例值而不是该地址所在的存储单元的内容必须注意取地址到和寄存器指令执行操作或SREG ←位寄存器REG 不能是段R R LFS 段址偏移地址偏移地址段址例LDS SI, [10H]例LES DI, [BX]例TABLE DW 40H, 3000H , 2000HLSS ESP TABLE ;ESP=30000040H; (SS) =2000H4标志寄存器传送指令执行操作送标志寄存器指令执行操作(FLAGS标志进栈指令执行操作PUSHF: (SP)标志出栈指令执行操作LAHFSAHF例PUSHF TF=1TF15类型转换CBW AL的符号扩展到AH形成中的字CWD/CWDECWD AX的符号扩展到DX形成DX AX双字CWDE AX的符号扩展到EAX形成EAX双字CDQ EAX的符号扩展到EDX形成EDX EAXBSWAP 486及后继机型可用格式BSWAP R32 R32位寄存器操作将位寄存器的字节次序变反即14字节互换23字节互换指令合法的指令格式堆栈操作指令的指令与指令的区别掌握XCHG XLAT MOVSX MOVZX类型转换其余堆栈操作指令标志操作指令MOVSX作业。
第3章 8086指令系统-汇编语言程序设计教程-陆遥-清华大学出版社
直接寻址方式可以利用变量名的偏移地址属性来 描述操作数的偏移地址(可直接用变量名,或将 变量名置于方括号[ ]中),段寄存器默认为DS。 如果实际使用的段寄存器不是DS,则必须用段 前缀明确指出。
【例3.7】设数据段内有如下变量定义语句
VAR DB 76H,5CH,0A3H,08H
分析以下指令的执行结果。
3.1 指令系统基本概念
指令是给计算机下达的一个简单操作任务,CPU 所能执行的所有指令构成了一个计算机的指令系 统(也称指令集)。
汇编语言指令是对机器指令的符号化表示,采用 助记符来表示指令的操作功能和操作对象。
指令通常可以分为以下几类:
⑴ 数据传送类指令。 ⑵ 算术运算类指令。
⑸ 程序控制类指令。 ⑹ 处理器控制类指令。
【例3.3】要求将数据68传送给AL寄存器,写出相应的传 送指令。 分析:由于AL寄存器接收数据,所以目的操作数为AL, 采用寄存器寻址方式,而源操作数为常数68,采用立即寻 址方式
MOV AL,68 ;AL←68
【例3.4】设被加数存于寄存器DX中,加数为512,写出相 应的加法指令。 分析:因为被加数由寄存器DX提供,所以DX为目的操作 数,采用寄存器寻址方式,而加数为常数512,采用立即 寻址方式
操作数。
2. ADD指令
指令格式:ADD DST,SRC 指令功能:DST←(DST)+(SRC) 。执行加法运算。 操作数特点:两个操作数。被加数DST为目的操作数,加
数SRC为源操作数。
3. NOT指令
指令格式:NOT OPR 指令功能:OPR←(OPR) 。执行逻辑非运算。 操作数特点:一个操作数。OPR既是目的操作数,也是源
段地址由段寄存器提供,用段前缀(DS:,ES:, CS:或SS:)来指明;偏移地址(亦称有效地址) 则有多种表示形式,由此形成了不同的存储器寻 址方式。
第3章 8086的指令系统—3.1寻址方式
例:(BX)=2000H,(SI)=1000H,偏移量=0250H,
则EA= 2000H+1000H+0250H=3250H
寻址目的
确定本条指令的操作数据 在指令中 PA:存储器内的绝对地址(20位) 在存储器中 EA:某个段内的相对地址(16位) 在寄存器中 确定下一条指令的地址 根据指令长度计算 根据转移指令的目标地址
寄存器名表示其内容(操作数)
MOV AX, BX
MOV AL, BH
;AX←BX
;AL←BH
演示
第3章: 3.1.3 存储器寻址方式
操作数在主存储器中,用主存地址表示 程序设计时,8088采用逻辑地址表示主存地址
段地址在默认的或用段超越前缀指定的段寄存器中 指令中只需给出操作数的偏移地址(有效地址EA)
演示
;AX←DS:[SI+06H]
第3章:4. 基址加变址寻址方式
有效地址由基址寄存器(BX或BP)的内容加上 变址寄存器(SI或DI)的内容构成: 有效地址=BX/BP+SI/DI 段地址对应BX基址寄存器默认是DS,对应BP基 址寄存器默认是SS;可用段超越前缀改变
MOV AX, [BX+SI] MOV AX, [BX][SI]
*微型计算机汇编语言特点 *微型计算机指令系统概述 *寻址方式
指令及其格式
指令及指令集 计算机能够识别和执行的基本操作命令
指令的作用
告诉CPU干什么?What? 告诉CPU从哪儿取数据?Where? 告诉CPU下一条指令在哪儿?Where? 操作码 操作数或操作数地址 指令的格式
80x86微机原理参考答案
80x86微机原理参考答案第一章计算机基础(P32)1-1电子管,晶体管,中小规模集成电路、大规模、超大规模集成电路。
1-2把CPU和一组称为寄存器(Registers)的特殊存储器集成在一片大规模集成电路或超大规模集成电路封装之中,这个器件才被称为微处理器。
以微处理器为核心,配上由大规模集成电路制作的只读存储器(ROM)、读写存储器(RAM)、输入/输出、接口电路及系统总线等所组成的计算机,称为微型计算机。
微型计算机系统是微型计算机配置相应的系统软件,应用软件及外部设备等.1-3写出下列机器数的真值:(1)01101110 (2)10001101(3)01011001 (4)11001110答案:(1)+110 (2)-13(原码) -114(反码)-115(补码)(3)+89 (4)-78(原码)-49(反码)-50(补码)1-4写出下列二进制数的原码、反码和补码(设字长为8位):(1)+010111 (2)+101011(3)-101000 (4)-111111答案:(1)[x]原=00010111 [x]反= 00010111 [x]补= 00010111(2)[x]原=00101011 [x]反= 00101011 [x]补= 00101011(3)[x]原=10101000 [x]反= 11010111 [x]补= 11011000(4)[x]原=10111111 [x]反= 11000000 [x]补=110000011-5 当下列各二进制数分别代表原码,反码,和补码时,其等效的十进制数值为多少?(1)00001110 表示原码14,反码14,表示补码为14(2)11111111 表示原码-127,反码-0,表示补码为-1(3)10000000 表示原码-0,反码-127,表示补码为-128(4)10000001 表示原码-1,反码-126,表示补码为-1271-6 已知x1=+0010100,y1=+0100001,x2=-0010100,y2=-0100001,试计算下列各式。
汇编语言第3章 指令系统和寻址方式
5.寄存器相对寻址方式(register relative addressing)
EA=基址(base) 或变址( index)+偏移量 (displacement)
基址寄存器有:BX,BP 变址寄存器有:SI,DI 注:默认段是数据段和堆栈段
(SI) 物理地址=(DS)*16+(BX)+displacement
(DI) =(SS)*16+(BP)+ (SI)+displacement (DI)
例:mov AX,ARRAY[BX][DI] (DS)=1000H,(BX)=1200H, (DI)=1000H, ARRAY=1000H 物理地址=DS*16+(BX)+(DI)+ARRAY =DS*16+1200+1000+1000=13200H 若:(13200)=34H,(13201)=12H 则,(AX)=1234H 允许段超越。 例:mov AL,ES:ARRAY[BX][DI] 用途:处理成组数据(举例说明)
2.段内间接寻址(intrasegment indirect addressing) (IP)新=EA=寄存器或存储单元的内容 寄存器:所有寄存器寻址方式可用的寄存器 存储单元:所有存储单元寻址方式均适用 例:JMP SI (IP)=(SI) JMP WORD PTR VAR或简写JMP VAR (DS)=1000H,VAR=2000H 存储单元的物理地址=(DS)*16+VAR=12000H (12000H)=1234H 则,(IP)新=1234H
4.寄存器间接寻址方式(register indirect addressing)
EA=基址(base) 或变址( index) 基址寄存器有:BX,BP 变址寄存器有:SI,DI 注:默认段是数据段和堆栈段 (SI) 物理地址=(DS)*16+(BX) (DI) =(SS)*16+(BP)
第3章 8086(8088)CPU指令系统
20H 00H
00H 34H 12H
3000H:0000H
注: ◆基址因子BP访问默认为堆栈段 ◆不能同时取两个基址因子;也不 能同时去两个变址因子
16
+
3000H:3000H
AH
AL
第3章 8086/8088CPU指令系统
4.1.4 操作数寻址方式
●存储器寻址之相对基址加变址寻址(Base
9
第3章 8086/8088CPU指令系统
3.1.3 操作数寻址方式
4.1操作数寻址方式
所谓操作数的寻址方式,是在指令格式中怎样有效的表示出操 作数的存放位臵,CPU在执行该指令时,按照指令格式中的表示找 到并对数据进行存取。 1.立即寻址(Immediate Addressing) 立即寻址中的操作数作为指令的一 部分存放在代码段中,在取指阶段数据 随指令一起被取到CPU,这种数据在指 令格式中的直接表现为常数。 如:MOV AL,34H
2
第3章 8086/8088CPU指令系统
汇编语言指令或符号指令:用字母和其它一些符 号组成的“助记符”与操作数等表示的指令称为汇编 语言指令或符号指令。 例如: MOV AX, BX ; AX←BX 而其二进制代码(机器代码)为89D8H,就是 1000 1001 1101 1000 B 不易理解,不易记忆。助记符是MOV。
操作码
操作数
4
第3章 8086/8088CPU指令系统
3.1.1 8086/8088指令格式
4.1操作数寻址方式
8086/8088机器指令格式通常1-6个字节组成。典型的指令格式 由2个字节组成,如下图所示。
操作码 D W MOD REG R/M
汇编语言程序设计_第3章 80x86指令系统
3.3.2 算术指令
1. 加法
一般形式:
ADD dest, src ; dest = dest + src
ADC dest, src ; dest = dest + src + CF
INC
dest
; dest = dest + 1
语法格式:
ADD reg/mem, reg/mem/imm
ADC reg/mem, reg/mem/imm
movsx ax, al ; 等价于cbw movsx eax, ax ; 等价于cwde movsx eax, al ; 等价于顺序执行cbw与cwde
2019/8/26
80x86汇编语言程序设计
3.3.1 数据传送指令
(3)MOVZX 一般形式: MOVZX dest, src ; src零扩展为dest;386新增 语法格式: MOVZX reg16, reg8/mem8 MOVZX reg32, reg8/mem8/reg16/mem16
2019/8/26
80x86汇编语言程序设计
3.3.1 数据传送指令
5. 堆栈操作指令
80x86系统的堆栈具有如下特点: 堆栈是在内存的堆栈段中,具有“先进后出”的特点。 堆栈只有一个出入口,即当前栈顶。当堆栈为空时,栈顶和栈底指向同一内存单
元。 堆栈有两个基本操作:PUSH(进栈)和POP(出栈)。PUSH操作使栈顶向低地
INC
reg/mem
对标志位的影响:
ADD、ADC:按一般规则影响CF、OF、SF和ZF。 INC:不影响CF,其它同ADD。 说明:ADD与ADC的2个操作数必须类型匹配,且不能同时是内存操作数。
2019/8/26
《微机原理与接口技术》(第3版_汪吉鹏)电子教案3
说明:
OPS → OPD
(1)MOV指令不允许在两个存储单元之间直接传送数据。 (2)MOV指令不允许在两个段寄存器之间直接传送数据。 (3)MOV指令不允许用立即数直接为段寄存器赋值。 (4)MOV指令不影响标志位。
MOV指令传送信息的形式:
指令系统
(1)寄存器到寄存器,如: MOV AX,BX (2)立即数到寄存器,如: MOV AX, 1234H (3)立即数到存储单元,但必须用PRT确定操作数类型
汇编格式为:段寄存器名:偏移地址 功能:冒号“:”之前的段寄存器指明了操作数所在段。
指令系统
举例说明:
例如:
(1)MOV AX,DS:[BP]
(2)MOV AX,ES:[BX]
(3)MOV BX,SS:[SI]
其中,“DS:”、“ES:”、“SS:”均为跨段前缀。此时,默认不起作用。 所
以,操作数的物理地址由“:”前面的段寄存器内容左移4位与偏移地址EA相加 而
(21300H)=5678H。
执行后:AX=5678H,BX、DI,DS。(21300H)内容不变。
8.段超越问题
指令系统
以上七种寻址方式中,除立即数寻址方式和寄存器寻址方式外,其它各种 寻址方式的操作数都在除代码段以外的存储区中。通常,若选用寄存器BP 作间址寄存器、变址寄存器或基址寄存器,只要BP出现在方括号之内, 则操作数在当前堆栈段,此时,操作数的物理地址PA由堆栈段寄存器SS 的内容左移4位与偏移地址EA相加形成。这是8086的基本约定,即默认状 态。当要否定默认状态,到非约定段寻找操作数时,必须用跨越段前缀 指明操作数所在段的段寄存名。
注:该操作数可以是8位或者16位二进制补码表示的常数。
说明:指令的下一字单元的内容为操作数n, n也称为 立即操作数。
汇编课第3章寻址方式与指令系统之3 (1)
北京理工大学-张华平-2010
24
① 段内直接短转移 格式:JMP SHORT LABEL 例.
JMP SHORT B1 ;无条件转移到B1标号处 A1: ADD AX,BX B1: …
北京理工大学-张华平-2010
25
② 段内直接转移 格式:JMP LABEL 或: JMP NEAR PTR LABEL
同上
测试并取反由SRC 指定的DST中的位
同上
表3-4 位测试指令
北京理工大学-张华平-2010
10
三、位扫描指令
从386开始增加了位扫描指令,它们包括 BSF、BSR指令,可用于扫描操作数中第一个含 1的位。
北京理工大学-张华平-2010
11
1.顺向扫描指令 BSF 格式:BSF DST,RSC 功能:从右向左扫描RSC操作数中第一个含1的
… B3: SUB AX,CX
… C2 ENDS
北京理工大学-张华平-2010
动画演示
29
2.条件转移指令 执行这类指令时通过检测由前边指令已
设置的标志位确定是否转移,所以它们通常 是跟在影响标志的指令之后。这类指令本身 并不影响标志。
条件转移指令的通用汇编格式: JCC LABEL
北京理工大学-张华平-2010
(设为n),空出的位用操作数OPRD2高端的n位 填充,但OPRD2的内容不变,最后移出的位在进 位标志CF中。
2.双精度右移指令 SHRD 格式:SHRD OPRD1,OPRD2,CNT
北京理工大学-张华平-2010
20
3.6 程序控制指令
本节提供的指令可以改变程序执行的顺 序,控制程序的流向。它们均不影响标志位。
表3-7 检测北单京理个工大条学件-张华标平志-201位0 转移指令 33
汇编语言讲义第三章 80x86的寻址方式
32000H
50H 50H
… … … … …
AX
跨段访问情况
•
8086的存储器是分段使用的,通常,若选用寄存器(BX、BP、SI和 DI) 做间接寄存器、变址寄存器或基址寄存器,只要有BP寄存器出现,操作数
就在当前的堆栈段。操作数的物理地址由堆栈段寄存器SS的内容左移4位
与偏移地址EA相加;
• •
…
• 如指令中用BP寄存器,
则操作数的段地址在SS中,即堆栈段。
E9H? 20H
00H
…
基址寻址方式
例10 ADD AX,[SI] ; AX+((DS)×10H+(SI))→AX
DS
… …
AX 11 22H + +
执行前:(AX)= 1122H,(SI)= 20H,
(DS)= 1000H,(10020H)= 3344H 执行后:(AX)= 4466H,(SI)= 20H,
MOV 18,AL ; 18←AL
执行后:(AL)= 12H
例2 MOV AX,2000H ; 2000H→AL 执行后:(AX)= 2000H
CS
E8H 00H 20H
… … … …
2、寄存器寻址方式:R
• 操作数包含于CPU的内部寄存器之中。寄存器名是操作数的符号地址,寄存器
的内容是指令所需的操作数。 例3 INC AX ;(AX)+1→AX
例 MOV AX,BX 例 ADD AX,BX
;(BX)→AX ;(AX)+(BX)→AX
例 SUB AX,BX
;(AX)-(BX)→AX
与数据有关的寻址方式
寻址方式可能有三种情况:
16位寻址
微型计算机原理第3章_1_寻址方式
8086/8088的寻址方式 第三章 8086/8088的寻址方式 和指令系统主 讲 : 乔 瑞 萍学习要点数据寻址的8种寻址方式,I/O端口寻址的 2种寻址方式 程序转移地址的4种寻址方式 掌握8086指令(操作码助记符,可以使用 的寻址方式) 了解80386新增寻址方式和指令3.1 计算机指令格式1、汇编指令格式: OP.C OP.D (Operating Code、Operating Data) 注:OP.C指操作码助记符 OP.D指操作数部分,又称地址码。
(实际上的OP.C、OP.D都应该是二进制数,即 机器码。
)2、根据OP.D中地址的个数,指令可分为: 1)零地址指令:只有OP.C,没有OP.D。
2)一地址指令:单OP.D。
3)二地址指令:双OP.D。
4)三地址指令:三OP.D。
3. 指令长度与字长的关系指令长度主要取决于OP.C的长度 OP.D地址的长度 OP.D地址的个数几个概念: 1)指令的长度指其机器码的长度,是字节的简 单倍数; 2)现代计算机广泛采用变字长指令格式:并非 所有指令的长度一致。
3)指令长度与其执行时间没有必然的联系,短 指令也可能执行时间长。
4)指令字长与内存的编址单位及CPU的机器字 长有关。
3.3 指令格式1、80x86指令编码格式(P81~83) 指令码是指每条指令所对应的二进制 编码,即机器码,这里只是要求大家了 解一下汇编指令如何翻译成机器码的, 即了解编译程序的工作,自学,不做要 求。
3.2 80X86的寻址方式 (addressing modes)P70,指令语句由操作码和操作数两部 分构成,操作码表示计算机执行什么操 作;操作数可能指明了参与操作的数本 身,或规定了操作数的地址。
8086/8088的寻址方式分为两类:数据寻址方式 转移地址寻址方式1)数据寻址方式(8种)(以通用传送指令MOV AX,SRC为例)定义:指令中用以说明或形成操作数有效地址 (Effective Adress)的方法,称为操作数的寻址 方式。
汇编语言 第3章1 80x86的指令系统和寻址方式
CS、DS、SS、ES
寄存器寻址指令
MOV AX,1234H MOV BX,AX ;AX←1234H ;BX←AX
寄存器寻址
3.1.4 存储器寻址方式
指令中给出操作数的主存地址信息(偏移
地址,称之为有效地址EA),而段地址在 默认的或用段超越前缀指定的段寄存器中
8086设计了多种存储器寻址方式
量之和,寄存器可以是BX、BP或SI、DI 有效地址=BX/BP/SI/DI+8/16位位移量
段地址对应BX/SI/DI寄存器默认是DS,对应BP
寄存器默认是SS;可用段超越前缀改变 MOV AX,[DI+06H]; mov ax,table[di] ;AX←DS:[DI+06H] MOV AX,[BP+06H] ;AX←SS:[BP+06H] 相对寻址
;AX←DS:[BX+SI+06H]
相对基址变址
位移量可用符号表示 同一寻址方式有多种表达形式
指令操作数的表达-寄存器
r8——任意一个8位通用寄存器
AH AL BH BL CH CL DH DL
r16——任意一个16位通用寄存器
AX BX CX DX SI DI BP SP
reg——代表r8或r16
(4)基址变址寻址方式
有效地址由基址寄存器(BX或BP)的内容加上
变址寄存器(SI或DI)的内容构成:
有效地址=BX/BP+SI/DI
段地址对应BX基址寄存器默认是DS,对应BP
基址寄存器默认是SS;可用段超越前缀改变 MOV AX,[BX+SI] ;AX←DS:[BX+SI] MOV AX,[BP+DI] ;AX←SS:[BP+DI] MOV AX,DS:[BP+DI] ;AX←DS:[BP+DI]
(完整版)(整理)《80x86汇编语言程序设计》教案及答案.
(完整版)(整理)《80x86汇编语言程序设计》教案及答案.《汇编语言程序设计》教案附:习题参考答案《IBM-PC汇编语言程序设计》(第2版)沈美明、温冬婵编著教案编写时间:2007年8月18日前言1.汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
2.汇编语言程序设计是高等院校电子计算机硬、软件及应用专业学生必修的核心课程之一。
它不仅是计算机原理、操作系统等其它核心课程的必要先修课,而且对于训练学生掌握程序设计技术、熟悉上机操作和程序调试技术都有重要作用。
3.本教材共有十一章,其内容安排如下:(1).第一、二章为汇编语言所用的基础知识。
(2).第三章详细介绍80x86系列CPU的指令系统和寻址方式。
(3).第四章介绍伪操作、汇编语言程序格式及汇编语言的上机过程。
(4).第五、六章说明循环、分支、子程序结构和程序设计的基本方法。
(5).第七章说明宏汇编、重复汇编及条件汇编的设计方法。
(6).第八章叙述输入/输出程序设计方法,重点说明中断原理、中断过程及中断程序设计方式。
(7).第九章说明BIOS和DOS系统功能调用的使用方法。
(8).第十~十一章分别说明图形显示、发声及磁盘文件存储的程序设计方法,同时提供各种程序设计方法和程序实例。
附:教学参考书1.沈美明、温冬婵编著,IBM–PC汇编语言程序设计(第2版),清华大学出版社,2001年(教材)2.沈美明、温冬婵编著,IBM–PC汇编语言程序设计,清华大学出版社,1991年3.沈美明、温冬婵编著,IBM–PC汇编语言程序设计—例题习题集,清华大学出版社,1991年6月4.沈美明、温冬婵、张赤红编著,IBM–PC汇编语言程序设计—实验教程,清华大学出版社,1992年5.周明德,微型计算机IBM PC/XT(0520系列)系统原理及应用(修订版),清华大学出版社,19916.郑学坚、周斌,微型计算机原理及应用(第二版),清华大学出版社,19957.王士元、吴芝芳,IBM PC/XT[长城0520] 接口技术及其应用,南开大学出版社,19908.杨素行,微型计算机系统原理及应用,清华大学出版社,19959.戴梅萼、史嘉权,微型计算机技术及应用—从16位到32位(第二版),清华大学出版社,199610.张昆藏,IBM PC/XT微型计算机接口技术,清华大学出版社,199111.孟绍光,李维星,高档微机组成原理及接口技术(80386/80486/Pentium),学苑出版社,199312.吴秀清,周荷琴,微型计算机原理与接口技术,中国科学技术大学出版社目录第 1 章基础知识 (5)1.1进位计数制与不同基数的数之间的转换 (5)1.2二进制数和十六进制数的运算 (6)1.3计算机中数和字符的表示 (7)1.4几种基本的逻辑运算 (7)第 2 章80X86计算机组织 (8)2.180X86微处理器 (8)2.2基于微处理器的计算机系统构成 (8)2.3中央处理机 (9)2.4存储器 (10)2.5外部设备 (11)第 3 章80X86的指令系统和寻址方式 (12)3.180X86的寻址方式 (12)3.2程序占有的空间和执行时间 (14)3.380X86的指令系统 (14)第 4 章汇编语言程序格式 (31)4.1汇编程序功能 (31)4.2伪操作 (31)4.3汇编语言程序格式 (35)4.4汇编语言程序的上机过程 (38)第 5 章循环与分支程序设计 (40)5.1循环程序设计 (40)5.2分支程序设计 (41)5.3如何在实模式下发挥80386及其后继机型的优势 (41)第 6 章子程序结构 (43)6.1子程序的设计方法 (43)6.2子程序的嵌套 (44)6.3子程序举例 (44)第7 章高级汇编语言技术 (46)7.1宏汇编 (46)7.2重复汇编 (47)7.3条件汇编 (48)第8 章输入/输出程序设计 (49)8.1I/O设备的数据传送方式 (49)8.2程序直接控制I/O方式 (50)8.3中断传送方式 (50)第9 章BIOS和DOS中断 (53)9.1键盘I/O (53)9.2显示器I/O (55)9.3打印机I/O (56)9.4串行通信口I/O (57)第10 章图形与发声系统的程序设计 (58)10.1显示方式 (58)10.2视频显示存储器 (58)10.3EGA/VGA图形程序设计 (59)10.4通用发声程序 (60)10.5乐曲程序 (61)第11 章磁盘文件存取技术 (62)11.1磁盘的记录方式 (62)11.2文件代号式磁盘存取 (63)11.3字符设备的文件代号式I/O (64)11.4BIOS磁盘存取功能 (65)附录:《IBM—PC汇编语言程序设计》习题参考答案 (66) 第一章.习题 (66)第二章.习题 (67)第三章.习题 (68)第四章.习题 (81)第五章.习题 (86)第六章.习题 (104)第七章.习题 (117)第八章.习题 (124)第九章.习题 (129)第十章.习题 (132)第十一章.习题 (143)第 1 章基础知识【教学目的】本章内容是本课程的基础,通过本章学习,使学生明确汇编语言程序设计的学科性质、基本内容和学习意义,掌握数制的转换、数据的编码,了解本门课程的教学要求和学习方法。
第3章_1 寻址方式
16位不允许使用 、CX、DX存放 位不允许使用AX、 、 存放 存放EA 位不允许使用 × MOV AX, [CX]
3.2 寻址方式 .
存储器寻址
例1 MOV AX,[BX] , (DS)=2000H,(SS)=1000H,(BP)=120H ) , ) , ) (BX)=100H,(AX)=1234H,(20100H)=5678H ) , ) , ) 偏移地址EA=(BX)=100H ( ) 偏移地址 物理地址PA= (DS) × 16 +(BX)=20000H+100H=20100H 物理地址 ) ( ) 内 存 (DS) 2000H BH EA=(BX) 01H 2000H 20100H BL 00H 0H ×16
AL 05H
64H
...
AH 30H
AL 64H
... 操作码 指 令 代 码 段
05H
30H
...
...
例
MOV MOV MOV
AL,05H , AX,3064H , 3,AL , MOV AH, 3064H
立即数不能做目的操作数 源、目的操作数的字长一致 目的操作数的字长一致
3.2 寻址方式 .
(AX) = 5678H
AH AL
0CH 52H
56H
78H 20100 78H 20101 56H
+
PA
3.2 寻址方式 .
存储器寻址 3. 基址寻址
为:基址寄存器+位移量 基址寄存器 位移量 •16位偏移地址 位偏移地址EA 位偏移地址 数据段( ) 数据段(DS)EA=BX+8或16位移量 或 位移量 堆栈段( ) 堆栈段(SS)EA=BP+8或16位移量 或 位移量 MOV MOV MOV MOV AX, [BX] ;源操作数在数据段 AX, [BX+3] AX, 3[BX] [BP],DI ;目的操作数在堆栈段 ,
第3章 指令系统
(2) 32位寻址:任何一个32位通用寄存器可作为基址寄存器 ;除ESP之外的任一个32位通用寄存器可作为变址寄存器。 如:MOV AX,[EBX+ECX] ; 或 MOV AX,[EBX][ECX] ; DS段的字数据送AX。
17
7、带位移的基址加变址寻址:基址寄存器内容与变址 寄存器内容再加偏移量之和形成操作数的EA。即: EA=[基址寄存器]+[变址寄存器]+偏移量
:通用寄存器。长度可以是8位、16位、32位。 如reg8表示8位通用寄存器,reg16表示16位通用寄存 器。
Sreg mem imm
:段寄存器(段选择符)。
:存储器。长度可以是8位、16位、32位。如 mem8表示8位存储器。 :立即数。长度可以是8位、16位、32位。 AL,AX或EAX) 。
操作符:指令的操作符,指示CPU完成某种操作,不 可省略。 操作数:指令执行时的操作对象,可以是数据或地址 表达式。 注释:程序注解。 **方括号表示其中的内容为可选项。
START:MOV AX,DATA MOV DS,AX
;设置DS
4
数据类型
80X86主要包括以下六种数据类型: 1、无符号二进制数:
有符号二进制数以补码形式存储,地址单元分配与 无符号数类似。
3、浮点数(实数)
(从略)
6
4、BCD码 1)压缩(组合)BCD码:1字节存放两个BCD码,如图 a。 2)非压缩BCD码:1字节存放一个BCD码(低4位) ,如图b。
第三章(寻址方式)
* 不允许使用AX、CX、DX 存放 EA MOV AX , [ CX ] * SRC 和 DST 的字长一致 MOV DL , [ BX ] MOV DX , [ BX ] * 适于数组、字符串、表格的处理
(3) 直接寻址方式 * —— 有效地址 EA 由指令直接给出
例:MOV AX , [ 2000H ] EA = 2000H , 假设 (DS) = 3000H , 那么 PA = 32000HAH ALFra bibliotek3050
32000
50H 30H (AX) = 3050H
* 隐含的段为数据段 DS * 可使用段跨越前缀
loop next
(3) 寄存器相对寻址
mov cx, count mov si, 0 next : mov dl, string [ si ] mov ah, 2 int 21h inc si loop next
; mov dl, [ string + si ] ; 显示一个字符 ; mov cx, 17
访问存储器的方式
取指令 堆栈操作 一般数据访问 BP 作为基址的寻址 串操作的源操作数 串操作的目的操作数
默认的 段寄存器
CS SS DS SS DS ES
可跨越的 段寄存器
无 无 CS ES SS CS DS ES CS ES SS 无
偏移地址
IP SP 有效地址 EA BP SI DI
第3章 8086指令系统(最后有练习题)
3.1 8086的寻址方式 3.2 8086的指令系统
开始
8086CPU的指令系统的基本指令
包括数据传送类指令、算术运算类指令、 位操作类指令、串操作类指令、控制转移 类指令、处理机控制类指令。后几节将分 别介绍这些指令的语句格式和功能。
3.1 8086的寻址方式
3.1.1 数据的寻址方式 3.1.2 程序转移地址的寻址方式 3.1.3 对端口的寻址方式
[BP] BP作间址寄存器。
•段地址的确定: BX、DI、SI默认对应DS; BP默认对应SS。
【例3-4】寄存器和存储器内容分别为: (AX)=0,(BP)=0030H,(SS)=2000H, (20030H)=1234H 执行指令MOV AX,[BP],问执行后(AX)=? Step1:计算地址SS*16+BP=20030H Step2:找内容(20030H)=1234H 所以执行后:(AX)=1234H
返回本节
3.2.1.1 通用数据传送指令
1.传送指令MOV 2.数据交换指令XCHG 3.查表转换指令 XLAT
1.传送指令MOV 语句格式:MOV OPD,OPS 功能:将源操作数传送入目的地址,源地 址内容不变。即(OPS)→OPD。
下图3.1描述了MOV指令在传送数据时允许 传送的路径及类型。
汇编格式:[BR][IR] 功能:操作数在存储器中,BR的内容加IR的
内容形成操作数的偏移地址EA。
6.基址变址寻址
注意:基址变址寻址方式适于数组、字符 串、表格的处理,它必须是一个基址寄存器
(BX、BP)和一个变址寄存器(SI、DI)的组 合. 下面两种形式是错误的: MOV AX, [BX][BP] 或MOV AX, [SI][DI]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【例】
• 下列程序执行后,(AX)=?,(BX)=?
•
• •
MOV AX,1234H
MOV BX,5678H ADD AX,BX
• 该程序中MOV指令为数据传送指令操作符,ADD指令 为加法指令操作符,三条指令皆为双操作数指令。第 一、二条指令 AX 、 BX 皆为目的操作数地址,为寄存 器寻址方式。第三条指令中,AX为目的操作数地址, BX为源操作数地址。源地址和目的地址皆为寄存器寻 址方式。
执行:(20036H)+(AX) →20036H 执行后:(AX)=0040H,(BX)=0030H,(DS) =2000H,(20036H)=0090H。
返回本节
3.1.6 基址变址寻址
1)操作数有效地址为:一个基址寄存器(BX、 BP)或变址寄存器(SI、DI)的内容之和。 2)EA=(BX)|(BP)+(SI)|(DI) 物理地址=16d*(DS)+(BX)+(SI)|(DI) 物理地址=16d*(SS)+(BP)+(SI)|(DI) 3)用途:数组、表格处理 4) 【例】 (P41~42)
3.1.8 比例变址寻址方式
比例变址寻址,只用在80386及以后的微机中,8086、 80286不支持之。
1)操作数段内偏移地址是:一个变址寄存器(SI、 DI)*比例因子的内容+偏移量。
不必把变址值直接装入寄存器。 2) 【例】 (P43)
3.1.9 基址比例变址寻址方式
1)操作数段内偏移地址是:一个变址寄存 器( SI 、 DI ) * 比例因子的内容 + 一个基 址寄存器(BX、BP) 2) 【例】 MOV ECX,[EAX][EDX*8]
1 )格式: JMP (或 CALL ) FAR PTR DST (DST为另一代码段内的符号地址) FAR PTR(Far Pointer):段间转移操作符,说 明其后的符号地址于另一段内。 执行后:指令指定的偏移地址(低位)装入IP寄 存器,指令指定的段基址(高位)装入CS寄存 器 2)【例】P46
•图形表示:
•执行:1234H→AX • 5678H→BX • (AX)+(BX)→AX •执行后:(AX)=68ACH,(BX)=5678H
返回本节
【例】 MOX AL,AH
【例】(P36~38 )
除以上两种寻址方式外,其他寻址方式的操 作数都在除代码段以外的存储区域中。在汇编语 言中,内存地址采用逻辑地址的形式表示: 段基址:段内偏移地址
下列指令将两个基址寄存器或变址寄存器 同时使用,错误 OR AX,[BX][BP] (X) NOT WORD PTR[SI][DI] (X)
3.1.7 相对基址变址寻址
1 )操作数段内偏移地址是三个分量之和:一个基址 寄存器( BX 、 BP )、一个变址寄存器( SI 、 DI ) 的内容与偏移量之和。 图形表示:
第3章 80x86指令系统和寻址方式
• • • • • • • 2.1 2.2 2.3 2.4 2.5 2.6 2.7 寻址方式 数据传送类指令 算术运算类指令 位操作类指令 串操作类指令 控制转移类指令 处理机控制类指令
开 始
指令系统的组成:操作码、操作数 指令格式: 操作码 操作数 ….操作数 操作码:指示计算机所要执行的操作,即 指示计算机“做什么”。 操作数:指令在执行过程中所需的操作数, 操作数可有一、二、三个。
2.数据 OPD,OPS • 功能:将源地址与目的地址中的内容互换。即(OPD) →OPS,(OPS)→OPD。 【例】寄存器与存储器之间数据交换。 MOV AX,5678H ;(AX)=5678H MOV BX,0FFFFH ;(BX)=0FFFFH XCHG AX,BX ;(AX)=0FFFFH ,( BX)=5678H
3.1.2 寄存器寻址
• 寄存器寻址方式的操作数在指令指明的寄存器 中。 • 功能:操作数直接存放在寄存器R中。 • 寄存器的类型: AX 、BX 、 CX、 DX 、SI 、 DI 、 SP、BP • 8 位操作数: AL 、 AH 、 BL 、 BH 、 CL 、 CH 、 DL、CH • 32 位操作数: EAX 、 EBX、 ECX、 EDX 、 ESI 、 EDI、ESP、EBP
3.1 寻址方式
• • • • • • • 3.1.1 3.1.2 3.1.3 3.1.4 2.1.5 2.1.6 2.1.7 寄存器寻址 寄存器间接寻址 变址寻址 基址加变址寻址 立即寻址 直接寻址 跨段问题
返回本章首页
3.1.1 立即寻址
• 立即寻址方式中,指令操作码和操作数都在存 储器代码段中。 • 汇编格式: n ( n 为立即操作数,是用 8 位或 16 位二进制补码表示的有符号数) • 功能:操作数存放在存储器,指令下一单元的 内容为立即操作数n。 • 图形表示:
返回本节
3.1.12 与转移地址有关的寻址方式
功能:确定条件转移指令、无条件转移 指令、循环指令、子程序调用指令的转向 地址。 由于内存分段,转向何处由 CS 、 IP 决定。
1、段内直接寻址
1)格式: 程序控制指令 NEAR PTR DST (位移量 16 位) 程序控制指令 SHORT DST (位移量8位) DST:同一代码段内的符号地址 2)适合条件转移、无条件转移指令。 3)【例】JMP NEAR PTR
• 偏移地址EA计算方法如下:
物理地址=
16d*(DS)+(BX)|(SI)|(DI)+8位(16位)偏移量
物理地址=
16d*(SS)+(BP)+8位(16位)偏移量
【例】(P41)
【例】
• 设执行前: (AX)=0040H,(BX)=0030H, (DS)=2000H,(20036H)=0050H • 执行指令:ADD 6[BX],AX • 执行后:(AX)=?,(BX)=?,(DS)=?, (20036H)=? • 图形表示如下:
4、段间间接寻址
1)格式:JMP(或CALL) DWORD PTR DST (DST为内存中的一个双字)。 2)【例】P46 注:所有流程图见P44
3.2 数据传送类指令
3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 通用数据传送指令 堆栈操作指令 标志寄存器传送指令 地址传送指令 输入输出指令
【例】 (P40)
返回本节
3.1.5 寄存器相对寻址(变址寻)址
• 操作数的地址为:基址寄存器( BX 、 BP ) 或变址寄存器( SI 、 DI )的内容与位移 量之和,操作数在存储器中。 。 • 功能:操作数存放在存储器,寄存器R的 内容加位移量X为操作数的偏移地址EA。 • 图形表示如下:
【例】 SAL WORD PTR DS:[26H],1 ;把DS段内偏移地址为26H的字算术左移一位 (*2)。WORD PTR为字指针操作符,用来说 明对内存的一个字进行操作。 注意:仅用数字表示段内直接地址时,必须放 在[ ]内,否则被认为是立即数。
返回本节
• 【例】寄存器和存储器内容为:(AX)=1212H, BUF为数据段定义的变量,其偏移地址是2000H, (DS)=3000H,(32000H)=4545H。 • 执行指令:MOV AX ,BUF • 执行后:(AX)=? • 图形表示:
• 执行:(32000H)→AX • 执行后:(AX)=4545H
3.1.4 寄存器间接寻址
• 寄存器的内容为操作数的偏移地址EA。 操作数段内偏移地址在基址寄存器中BX、BP或 变址寄存器SI、DI中,操作数在存储器中; 32位寻址时的寄存器EAX、EBX、ECX、EDX、 ESP、EBP、EDI、ESI。 • 功能:操作数存放在存储器,寄存器 R 存放操 作数的偏移地址EA。
返回本章首页
3.2.1 通用数据传送指令
1.传送指令MOV 2.数据交换指令XCHG 3.查表转换指令 XLAT
• 1.传送指令MOV • 语句格式:MOV OPD,OPS • 功能:将源操作数传送入目的地 址,源地址内容不变。即( OPS ) →OPD。 • 下图描述了 MOV 指令在传送数据 时允许传送的路径及类型。
图 MOV指令所允许的数据传送路径及类型
【例】存储器与寄存器间数据传送。
MOV MOV MOV MOV MOV MOV MOV MOV MOV AX,BUF ;BUF是变量,源操作数为直接寻址 BH,[DI] ;源操作数为寄存器间接寻址 DI,ES:3[SI] ;源操作数为变址寻址,使用跨段前缀 BP,3[BX+SI] ;源操作数为基址加变址寻址 BUFA,DL ;BUFA是一字节变量 [BP],AX ;使用SS段寄存器 DS:[BP],DL ;使用跨段前缀 BUF,DS ;BUF是个字变量 ES ,BUF
2、段内间接寻址
1 )转向的地址是一个寄存器或一个存储单元的 内容,不能为立即数。转向的有效地址取代IP 寄存器的内容。 2)格式:JMP(或CALL) REG (REG为通用寄存器) JMP(或CALL) WORD PTR DST (DST 内存中的一个字) 3)【例】(P45-46)
3、段间直接寻址
【例】寄存器和存储器内容分别为:(AX)=0,(BP) =0030H,(SS)=2000H,(20030H)=1234H
•执行指令:MOV AX ,[BP] •执 行 后 : ( A X ) = ? , ( B P ) = ? , ( S S ) = ? , (20030H)=? •图形表示如下: •
3.1.3 直接寻址
1、段内偏移地址由偏移量给出。
2、如果操作数在数据段中,则 物理地址=16d*(DS)+EA, 若指定段跨越前缀,在计算物理地址时应使用指 定的段寄存器。 3 、功能:指令下一字单元的内容是操作数的偏移 地址EA。
• 段寄存器名:[EA] 。