汇编语言:第3章80x86的指令系统和寻址方式II

合集下载

80X86汇编语言电子教案(3-2-MOV指令)

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指令系统-汇编语言程序设计教程-陆遥-清华大学出版社

第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寻址方式

第3章 8086的指令系统—3.1寻址方式
EA=[基址寄存器]+([变址寄存器] *比例因子)+位移量 BX,BP SI,DI 1 0,8,16
例:(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? 操作码 操作数或操作数地址 指令的格式

第3章 8086指令系统及汇编语言程序设计

第3章 8086指令系统及汇编语言程序设计

图3-7 立即数寻址
第3章 8086指令系统及汇编语言程序设计
注意: (2)寄存器寻址方式 ● 寄存器寻址方式的指令操作在CPU 定义:操作数放在寄存器内,由指令直接给出某个 内部执行,不需要执行总线周期,执行速 寄存器的名字,以寄存器的内容作为操作数。寄存器可以 度快。 是16位的 AX、BX、CX、DX、SI、DI、SP、BP寄存器, ● 寄存器寻址方式既适用于指令的源 也可以是8位的 AH、AL、BH、BL、CH、CL、DH、DL 寄存器。 操作数,也适用于目的操作数,并且可同 时用于源操作数和目的操作数。 【例3-2】 MOV AX,CX ;(AX)←(CX) INC AL ;(AL)←(AL)+1 指令执行结果如图3-8 所示
图3-8 寄存器寻址
第3章 8086指令系统及汇编语言程序设计
(3)直接寻址方式 定义:操作数在存储器中,指令中直接给出操作数所在存 注意: 储单元的有效地址。有效地址( EA)也称为偏移地址,它代表 ●直接寻址方式的操作数所在存储单元的段地址一 操作数所在存储单元距离段首址的字节数。有效地址是一个无 般在数据段寄存器DS中。 符号的16位二进制数。 ●如果操作数在其他段,则需要在指令中用段超越 【例3-3】 前缀指出相应的段寄存器名。 ● VALUE是一种符号表示法,此内容将在伪指令中 MOV AH, [1234H ] ;将DS段中1234H单元的内容送给AH 给予讲解。 MOV AH ,VALUE ;将DS段中VALUE单元的内容送给AH ●在实地址方式下,物理地址=16*段地址(DS) MOV AX, [2100H] ;将DS段中2100H单元的内容送给AL, +偏移地址(EA) 2101H单元的内容送给AH MOV BX,ES:【2000H】 ;段超越,操作数在附加段。即 物理地址=(ES)*16+2000H

汇编语言寻址方式

汇编语言寻址方式
80x86的寻址方式
计算机是通过执行指令序列来解决问题的,因此每种计算机都 有一组指令系统提供给用户使用,这组指令集就称为计算机的 指令系统。 计算机中的指令由操作码字段和操作数字段两部分组成。 操作码 操作数 ... 操作数
指令的操作码字段在机器里面的表示比较简单,只需对每一种 操作指定确定的二进制代码就可以了。 指令的操作数字段情况较为复杂。 确定指令中用于说明操作数所在地址的方法称为寻址方法。 8086/8088有七种基本的寻址方式。
1.立即寻址方式 操作数就包含在指令中,它作为指令的一部分,跟在操作后存 放在代码段,这种操作数就称为立即数。 立即数可以是8位的,也可以是16位的。 如果是16位立即数,按“高高低低”原则进行读取。 例如:MOV AX, 1234H
再如:MOV AL, 5 MOV BX, 2064H
则执行指令后(AL)=05H 则执行指令后,(BX)=3064H
指令中也可指定段超越前缀来取得其它段中的数据。 如,MOV AX , ES : [BX] 引用的段寄存器是ES 请熟悉下面的表达形式: MOV [SI] , AX ; 目的操作数间接寻址 MOV [BP] , CX ;目的操作数引用的段寄存器是SS MOV SI , AX; 目的操作数寄存器寻址
5.寄存器相对寻址方式 操作数在存储器中,操作数的有效地址是一个基址寄存器 (BX、BP)或变址寄存器(SI、DI)内容加上指令中给定的8 位或16位位移量之和。 即:
7.相对基址加变址寻址方式 操作数在存储器中,操作数的有效地址是由: 基址寄存器之一的内容与变址寄存器之一的内容 及指令中给定的8位或16位位移量相加得到。 即:
在一般情况下,如果BP之内容作为有效地址的一部分,那么 引用的段寄存器是SS;否者以DS之内容为段值。 在指令中给定的8位或16位位移量采用补码形式表示。在计算 机有效地址时,如果位移量是8位,那么被带符号扩展成16位。 当所取得的有效地址超过FFFFH是,就取64K的模。

80x86微机原理参考答案

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章 指令系统和寻址方式

汇编语言第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指令系统

第3章 8086(8088)CPU指令系统
数据段 BX + SI 10H
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
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

例:循环指令的应用-1
• 判别(BX)的二进制表示中有多少个1. • 分析:
– 如何判别一位上的1?有几种方法? – 如何判别每一位上的1?
例:循环指令的应用-2
• 如何将(BX)的二进制表示中用十六进 制表示并输出?
3.3.4串处理指令
MOVS:串传送 • SCAS:串扫描 • STOS:存入串 • INS:串输入
与之配合使用的前缀: REP重复 REPE/REPZ 相等/为零则重复
CMPS:串比较 LODS:从串取 OUTS:串输出
REPNE/REPNZ
不相等/不为零则重复
与REP相配的MOVS、STOS和LODS指令
• REP MOVS、 REP LODS、 REP STOS等 • 执行的操作: REP重复串操作直到(CX)=0为止 1)若(CX)=0,则退出REP,否则往下执行。 2)(CX)←(CX)-1 3)执行其后的串指令 4)重复1)~3) 注:为方便起见,CX表示一般的计数寄存器
串操作
• 批量数据处理 • 串
– 一系列存放在存储器中的字或字节数据 – 最大串长64KB
• 串元素
– 串中的成员 – 每种串操作指令只对串中的元素作同一种操 作
串指令
串指令的操作规则
• 串指令的操作
– 源串位于DS段内(可以使用段前缀),偏移量 由SI给出 – 目的串位于ES段内(不允许使用段前缀),偏移 量由DI给出 – 每次执行后修正SI/DI,增减方向由DF确定 (DF=1:减量;DF=0:增量)。(STD/CLD) – 串的长度(字节/字数)存放在CX中 – 可以在存储器之间操作
逻辑运算指令举例
• MOV AL, 0BFH • AND AL, 0FCH ;结果(AL)=0BCH,屏
蔽0、1两位
• XOR AL,20H;结果(AL)=09CH • OR AL,01H;结果(AL)=0BFH • NOT AL;结果(AL)=040H
注意
1、NOT不允许使用立即数; 例:NOT 56H;错误 2、除非源操作数是立即数,4条(除NOT) 指令,至少有一个操作数必须存放在寄 存器中,另一个操作数则可以使用任意 寻址方式。 例:OR BYTE PTR[1234H],89H;正确 AND BX,6AH;正确
1) 2) 3) 4) BTR BTR BTC BTC AX,4 AX,DL AX,4 AX,DL
答案:1)CF=1,(AX)=1224H, 2)CF=0,(AX)=1234H,
3) CF=1,(AX)=1224H,4) CF=0, (AX)=1274H
位扫描指令
• • • • 386BSF:正向位扫描 格式:BSF REG,SRC 指令从0位开始自右向左扫描源操作数,检索 第一个为1的位。如遇到,则ZF=0,(REG) 该位位置;否则,ZF=1,REG无定义 • BSR:反向位扫描 • 与BSF类似,但自左向右
字节操作 ((DI))←((SI)) (SI)←(SI)±1 (DI)←(DI)±1 字操作 ((DI))←((SI)) (SI)←(SI)±2 (DI)←(DI)±2
MOVS串传送指令
当方向标志DF=0时用 +,当方向标志DF=1时用 - 。
MOVSD(双字)
• 操作: ((EDI))←((ESI)) (ESI)←(ESI)±4 (EDI)←(EDI)±4
3.19 运算结果与标志位变化
OF MOV AX, 0 DEC AX ADD AX,7FFFH ADD AX,2 NOT AX SUB AX 0FFFFH ADD AX, 8000H SUB AX,1 AND AX,58D1H
(AX) ; 0 ; 0FFFFH ;07FFEH ; 8000H ; 7FFFH ; 8000H ; 0000H ; FFFFH ;58D1H CF SF ZF
SHLD、SHLD 例
设 (SI)=1455H , (BX)=1234H , (CL)=3 , (EBX)= 98761234H,(EAX)=13572468H SHLD SI,BX,CL
SHLD EAX,EBX,8
SHRD EAX,EBX,8
SHLD SI,BX,CL
指令分别执行后:(SI)=?,(EAX)=?,CF=?
第 3章 80x86的指令系统和寻址方式
Part II
3.3.3逻辑指令
• • • • 逻辑运算指令 位测试并修改指令 位扫描指令 移位指令
逻辑运算指令
按位运算
• • • • • AND:逻辑与,AND DST,SRC OR:逻辑或,OR DST,SRC NOT:逻辑非, NOT OPR XOR:异或,XOR DST,SRC TEST:测试,TEST OPR1,OPR2
标志位的影响情况
• • • • • NOT AND OR XOR TEST DEST ;不影响标志位 DEST,SRC DEST,SRC CF/OF→0 DEST,SRC AF无效 DEST,SRC ZF/SF/PF有效 即SF、ZF和PF则根据运算结果设置。
TEST 测试指令
1. 格式:TEST OPR1,OPR2 2. 执行的操作:(OPR1)(OPR2)
SHL逻辑、SAL算术左移
0
CF OPR
SHR:逻辑右移
OPR 0 CF
SAR:算术右移
CF OPR
ROL:循环左移
CF
OPR
• ROR:循环右移
CF
OPR
RCL:带进位循环左移
CF
OPR
RCR:带进位循环右移
CF OPR
SHLD:双精度左移
0
CF
DST
REG
SHRD:双精度右移
0 CF DST
判别正误
设CL=3,BX=5 • SHL DX,4 • ROR AX,BX • RCL DL,1 • SAR DX,CL • SHR DI,[BX]

设(SI)=1455H,CF=1,(CL)=3, 1) SHR SI,CL 2) SAR SI,1 3) ROL SI,CL 4) RCR SI,CL 5) ROR SI,1 6) RCL SI,CL 指令执行后:(SI)=?,CF=?
MOVS与其它简略形式比较
1. MOVSB 与MOVS ES:BYTE PTR[DI], DS:[SI] 等价 2. MOVSW 与 MOVS ES:WORD PTR[DI], DS:[SI]等价 3. MOVSD 与 MOVS ES:DWORD PTR[EDI], DS:[ESI]等价
– 两个操作数相与的结果不保存,只根据其 特征置条件码
3. 用途:可测试操作数的某些位是否为0:
如测试BX第3位是否为0,可设8H,做 TEST BX,8H 若为0,则ZF=1;否则ZF=0
测试与转移
• 例:要测试AL寄存器中第2位是否为1, 如为 1 则转移到 EXIT 去执行,指令序列 如下:
MOV DL,AL ;设(AL)=0FH, NOT DL ;(DL)=F0H, 标志位不变 TEST DL,0000 0100B JE EXIT ;(DL)=00H, 标志位:CF=OF=0, AF位无定义,SF=0、ZF=1、PF=1
练习
1、分析下面程序段,回答指定问题: Mov AX,5C8FH Mov BX,0AB8FH XOR AX,BX XOR AX,BX 问:AX=?,BX=?,CF=?,SF=?,ZF=?
移位指令
SHL:逻辑左移 SAL:算术左移 SHR:逻辑右移 SAR:算术右移
ROL:循环左移 ROR:循环右移 RCL:带进位循环左移 RCR:带进位循环右移
格式:移位指令 OPR,CNT SHLD:双精度左移 SHRD:双精度右移
格式: SHLD DST,REG,CNT
SHRD DST,REG,CNT
串指令的操作规则
• 串操作
– 单次操作
• 按指令内容执行一次操作 • 修正SI/DI
– 重复操作
• REP前缀 • 重复指令串指令规定的操作,直至次数到或条件 成立 • 如 REPRC; MOVSB(字节); MOVSW(字); MOVSD(双字) • 执行的操作:16位地址的情况
1) 2) 3) 4) BT AX,4 BT AX,DL BTS AX,4 BTS AX,DL 2)CF=0,
答案:1) CF=1,
3) CF=1,(AX)=1234H,4) CF=0 ,(AX)=1274H
BTR、BTC:位测试
格式:BTR DST,SRC 指定位置0 BTC DST,SRC 指定位变反 例:设(AX)=1234H,(DL)=6
不变 1 0 0 1 1 1 0
1 0 1 1 1 1 1 0
0 0 0 0 0 1 0 0
0 0 1 1 1 1 0 0
位测试并修改指令
386-机型 1. BT: 位测试 2. BTS:位测试并置1 3. BTR:位测试并置0 4. BTC:位测试并变反
自学
BT、BTS:位测试
格式:BT DST,SRC BTS DST,SRC 指定位置1 例:设(AX)=1234H,(DL)=6

注意:
1. 地址长度为32位时用ESI,EDI; 2. 地址长度为16位时用SI,DI 3. 数据段中的源串首地址或末地址(如反向) 放入 SI寄存器中 4. 附加段中的目的串首地址或末地址(如反 向) 放入DI寄存器中
方向标志 DF
• CLD:该指令使DF=0,在执行串处理指 令时可使地址自动增量
习题3.27:(DX)=0b9h,(CL)=3, cf=1
指令 shr dx,1 sar dx,cl shl dx,cl shl dl,1 ror dx,cl rol dl,cl sal dh,1 rcl dx,cl rcr dl,1 (DX) 5CH 17H 05C8H 72H 2017H 0CDH B9H 05CCH 0DCH CF 1 0 0 1 0 1 0 0 1
相关文档
最新文档