工学第3章指令系统课件_第1页
工学第3章指令系统课件_第2页
工学第3章指令系统课件_第3页
工学第3章指令系统课件_第4页
工学第3章指令系统课件_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 第3章 80X86的寻址方式和指令系统第1节 80X86的数据类型第2节 80X86的寻址方式第3节 80X86的指令系统1第1页,共106页。学习指导和要求掌握80486的七种数据类型;熟练掌握九种寻址方式;熟记各种类型的指令格式及功能,并能编写简单程序。2第2页,共106页。 第1节 80X86的数据类型 80486汇编语言中可使用的数据类型有以下七种: 无符号二进制数 字节(8位):0255 (00FFH),占用一字节存储单元。 字(16位):065535 (00FFFFH),占用连续的两字节存储单元,低地址存储单元存放低8位数据,高地址存储单元存放高8位数据,低字节地址为该字的地址。

2、 双字(32位):04294967299 (00FFFFFFFFH),占用连续的四字节存储单元,最低地址存储单元存放最低8位数据,最高地址存储单元存放最高8位数据,最低字节地址为该双字的地址。3第3页,共106页。有符号二进制数字节: -128+127 (80HFFH, 00H7FH)字: -32768+32767 (8000HFFFFH, 00000H7FFFH)双字:-2147483650+2147483649 (80000000HFFFFFFFFH,000000000H7FFFFFFFH) 以补码形式存储,地址单元分配与无符号数类似。浮点数(实数)单精度数(32位):数据格式如下: 阶

3、码 有 效 数 31 30 23 22 0符号位1.1位符号,8位阶码,24位有效数(显式23位,外加1位隐含的整数“1.”。4第4页,共106页。双精度数(64位): 数据格式如下:1位符号,11位阶码,53位有效数(显式52位,外加1位隐含的整数“1.”。 63 62 52 51 0 阶 码 有 效 数符号位1.扩展精度数(80位): 数据格式如下:79 78 64 63 62 0 阶 码 1 有 效 数符号位1位符号,15位阶码,64位有效数(内含1位整数1,小数点是隐含的。.5第5页,共106页。BCD码压缩BCD码:1字节存放两个BCD码,格式如图a 7 4 3 0 7 4 3 0

4、(a) (b)非压缩BCD码:1字节存放一个BCD码(低4位),格式如图b串数据位串:从任何字节的任何位开始的相邻位序列,最长可达232-1位字节/字/双字串:是字节、字、双字的相邻序列,最长可达232-1字节。十位 个位0或任意 个位6第6页,共106页。ASCII码数据 ASCII码字符串: 如ABC123 ASCII码数: 如30H39H(09),41H46H(AF)指针数据近指针(32位): 是一个32位的段内偏移地址,段内寻址时使用。远指针(48位): 是一个由16位选择符和32位偏移量组成,段间寻址时使用。返 回7第7页,共106页。 第2节 80X86的寻址方式 寻找指令中所需操

5、作数或操作数地址的方式称为寻址方式。指令的操作数来自:(1)操作数包含在指令中。(2)操作数包含在CPU的某个内部寄存器中。(3)操作数在内存储器中。寻找此操作数,先找到该操作数在内存中存放的地址,再从该地址中取操作数。内存单元的地址由段基址和偏移地址组成。偏移地址由基址寄存器、间(变)址寄存器、比例因子、位移量组合而成。8第8页,共106页。由偏移地址元素按某种计算方法组合形成的偏移地址称为有效地址EA(Effective Address)。计算方法:EA=基址+(间址比例因子)+位移量采用16位寻址,位移量是8位或16位,用BX和BP作基址寄存器,SI和DI作间址寄存器,比例因子为1。采用

6、32位寻址,可使用8位和32位的位移量,32位的通用寄存器都可作基址寄存器或间址寄存器(ESP不用于间址),可采用1、2、4、8几种比例因子。9第9页,共106页。80X86的寻址方式共有11种:1.立即数寻址2.寄存器寻址3.直接寻址4.寄存器间接寻址5.(带位移的)基址寻址 6.(带位移的)间址寻址7.(带位移的)比例间址寻址8.基址加间址寻址9.基址加比例间址寻址10. 带位移的基址加间址寻址11. 带位移的基址加比例间址寻址10第10页,共106页。1 立即寻址 指定的操作数紧跟在操作码之后,直接存放在代码段中。如:MOV BL,56H ;BL 56H MOV AX,2056H ;AX

7、 2056H MOV ECX,12345678H ;ECX 12345678H 立即数只能作源操作数。不能作目的操作数。2 寄存器寻址操作数在CPU的寄存器中,而寄存器的名由指令指出。如:INC CL ;CL (CL)+1 MOV AX,BX ;AX (BX)11第11页,共106页。3 直接寻址操作数有效地址(16位或32位)直接包含在指令中,它位于操作码之后,存放在代码段中。如果指令无前缀指明在那一段中,则默认操作数存放在数据段。 如:MOV AX,2000H ;DS段2000H的内容送AL, 2001H的内容送AH MOV AX,FS:2000H;FS段2000H的内容送AL, 2001

8、H的内容送AH4 寄存器间接寻址操作数的偏移地址存放在寄存器中,而操作数存放在存储器中。 (1)16位寻址 EA= (SI)、(DI)、 (BX)、(BP) 无前缀默认操作数存放在数据段无前缀默认操作数存放在堆栈段12第12页,共106页。例如: MOV AX,BX ; AX (DS)*10H+(BX) MOV AX,BP ; AX (SS)*10H+(BP) MOV AX,ES:BX; AX (ES)*10H+(BX) MOV AX,DS:BP; AX (DS)*10H+(BP)(2)32位寻址EA= (EAX)、(EBX)、 (ECX)、(EDX)、(ESP)、(EBP) 、(ESI)、(

9、EDI)ESP、EBP默认操作数存放在堆栈段,其它默认操作数存放在数据段。 例如:MOV AX,EBX ;DS段字数据送AX MOV AX,EBP ;SS段字数据送AX MOV ECX,ES:EBX ; ES段双字数据送ECX 13第13页,共106页。5 (带位移的)基址寻址基址寄存器内容与位移量之和形成操作数的有效地址。即: EA=(基址寄存器)+位移量 (1) 16位寻址 EA=(BX)、(BP)+位移量(带符号8或16位整数),BX默认段寄存器DS,BP默认段寄存器SS如: MOV AX,2040HBX 或 MOV AX,BX+2040H;DS段(BX)+2040H中的字 数据送AX。

10、 (2) 32位寻址 EA=(8个32位通用寄存器)+位移量(带符号8或32位整数) 如:MOV ECX,1500HEAX;DS段(EAX)+1500H 或MOV ECX, EAX +1500H 中的双字数据送ECX。14第14页,共106页。6 (带位移的)间址寻址间址寄存器内容与位移量之和形成操作数的有效地址。即: EA=(间接寄存器)+位移量 (1) 16位寻址 EA=(SI)、(DI)+位移量(带符号8或16位整数)如: MOV AX,2040HSI 或 MOV AX,SI+2040H;DS段(BX)+2040H中的字 数据送AX。 MOV DX, COUNTDI (2) 32位寻址

11、EA=(除ESP外的其他7个寄存器)+位移量(带符号8或32位整数) 如:MOV ECX,1500HEAX;DS段(EAX)+1500H 或MOV ECX, EAX +1500H 中的双字数据送ECX。(带位移的)基址寻址、间址寻址合称为相对寄存器间址15第15页,共106页。7 (带位移的)比例间(变)址寻址(32位寻址) 间址寄存器内容乘以比例因子再加位移量之和形成操作数的32位有效地址。即: EA=(变址寄存器)*比例因子+位移量 如:MOV EAX,1200HESI*48 基址加间(变)址寻址 基址寄存器内容与间址寄存器内容之和形成操作数的有效地址。即:EA=(基址寄存器)+(变址寄存

12、器) (1) 16位寻址 基址寄存器:BX、BP; 变址寄存器:DI、SI如:MOV AX,BX+SI或MOV AX,BXSI;DS段(BX)+(SI)中的字数 据送AX。 16第16页,共106页。 (2) 32位寻址 基址寄存器: 任何一个32位通用寄存器 变址寄存器:除ESP之外的任一个32位通用寄存器 如:MOV AX,EBX+ECX ;DS段(EBX)+(ECX)中 或 MOV AX,EBXECX 的字数据送AX。 9 基址加比例间(变)址寻址(32位寻址)基址寄存器的内容加变址寄存器内容乘以比例因子,形成操作数的32位有效地址。即: EA= (基址寄存器) +(间址寄存器)*比例因

13、子如:MOV AX,EBX*4+ESI(默认段DS)17第17页,共106页。10 带位移的基址加间址寻址基址寄存器内容与变址寄存器内容再加偏移量之和形成操作数的有效地址。即: EA=(基址寄存器)+(变址寄存器)+偏移量 如 : MOV A X,1234HBX+DI 或MOV AX,BX+DI+1234H 或MOV AX,1234HBXDI ;DS段 (BX)+(DI)+1234H中的字数据送AX。18第18页,共106页。11 带位移的基址加比例间(变)址寻址(32位寻址)基址寄存器的内容加变址寄存器内容乘以比例因子再加上位移量之和,形成操作数的32位有效地址。即:EA =(基址寄存器)+

14、(变址寄存器)*比例因子+位移量如:MOV AX,EDI*8+EBX+40H MOV ECX,2000HEDX*4EAX比例变址寻址、基址加比例变址寻址、带位移的基址加比例变址寻址只有32位寻址一种情况。19第19页,共106页。与跳转有关的寻址方式与跳转有关的寻址方式用于确定程序转移或调用的目标。如:无条件转移语句:JMP dst dst:转移目标调用语句:CALL dst dst:调用目标 参见转移和调用指令一节。练习题:假设(DS)=2000H, (ES)=2100H, (SS)=1500H, (SI)=00A0H, (BX)=0100H, (BP)=0040H,指令 MOV AX, s

15、rc中, 以下src为何种寻址方式?有效地址和物理地址各是多少? (1)100HBX (2)BX (3)BP (4)ES:BX+10H (5)BX (6)1000H (7)SI (8)1000HBX+SI (9)1000HBPSI (10)BXSI20第20页,共106页。 第3节 80X86的指令系统一、指令格式 指令格式: 标号: 操作码 操作数, ;注释 其中: 标号:确定汇编语句的位置,提供跳转、循环的目标。 操作码:汇编语句操作。 操作数:操作数据项,数目因操作码而异。 注释:程序注解。 如:START:MOV AX,DATA MOV DS,AX ;设置DS21第21页,共106页。

16、一条指常由6个字段组成,字段1为前缀字段,字段26为基本字段。1. 前缀字段前缀字段用于修改指令操作的某些属性,为可选字段。 (1)段超越前缀:用于指明某个段寄存器取代指令中默认的段寄存器。(2)操作数宽度前缀:用于改变当前操作数的默认宽度值。(3)地址宽度前缀:用于改变当前地址的默认宽度值。(4)重复前缀:用于重复串的操作。(5)总线锁定前缀:用于产生LOCK信号,防止其他设备中断CPU在总线上的操作。22第22页,共106页。2. 操作码字段(OP Code)它规定了指令的操作性质。此字段不可省咯。3. 寻址方式字段(mod r/m和s-i-b)此两个字段称为寻址方式说明符字段。mod r

17、/m为主寻址字节,而s-i-b为第二寻址字节。4. 位移量字段(Displ)当寻址方式中需要位移量时,指令中将出现此字段。其长度为1,2,4个字节,通常用带符号数(补码)表示。5. 立即数字段(Data)当寻址方式是立即数寻址时需用此字段,其长度为I,2,4个字节,立即效字段总是该指令的最后字段。操作码字段是必选字段,其它各字段可根据不同的寻址方式选用。23第23页,共106页。二、指令系统 80X86的指令系统分为整数指令、浮点数指令和操作系统指令。 整数指令:数据传送类、算术运算类、逻辑运算类、串操作类、控制转移类、处理器控制类、高级和保护控制类指令等浮点数指令:数据传送、算术运算、比较、

18、超越函数、常量、控制等指令操作系统型指令24第24页,共106页。 指令操作数符号说明: OP1,OP2,OP3:操作数 reg :通用寄存器。长度可以是8位、16位、32位 reg8 :8位通用寄存器 reg16 :16位通用寄存器 reg32 :32位通用寄存器 Sreg :段寄存器(段选择符) mem :存储器。长度可以是8位、16位、32位 mem8 :8位存储器 mem16 :16位存储器 mem32 :32位存储器 imm :立即数。长度可以是8位、16位、32位 imm8 :8位立即数 累加器:Acc I/O端口:Port src(源):源操作数 dst(目标):目标操作数25第

19、25页,共106页。与运算有关的标志标志寄存器FLAGS中存放运算结果的属性。CF:进位/借位标志。加、减运算最高位产生进位/借位时置1。AF:辅助进位/借位标志。加、减运算时低半字节位产生进位/借位时置1。OF:溢出标志。有符号数二进制加、减运算结果超出范围时置1。ZF:零标志。结果为零时置1。SF:符号标志。结果为负时置1。PF:奇偶标志。结果最低字节“1”的个数为偶数时置1。26第26页,共106页。 指令执行对标志位影响的符号说明: X :表示相应标志位状态依运算或操作结果决定 0 : 表示相应标志位无条件清“0” 1 :表示相应标志位无条件置“1” U : 表示相应标志位状态未定义,

20、状态随机 - : 表示相应标志位状态不受影响,保持原状态 r : 恢复原来保存的值27第27页,共106页。数据传送类指令 用于实现存储器与寄存器、寄存器与寄存器、累加器与I/O端口之间字节、字或双字的传送,也可将立即数传送到存储器或寄存器。这类指令基本上不影响标志位。传送指令MOV 指令格式:MOV OP1, OP2 reg/Sreg,reg reg, Sreg reg/Sreg, mem mem, reg/Sreg reg, imm mem, imm28第28页,共106页。 功能:把OP2的内容传送到OP1中,OP1和OP2为字节、字或双字 说明:立即数只能作为源操作数,而其他三种既可作

21、源操作数又可作目的操作数; 存储器和存储器之间(串操作除外)以及段寄存器和段寄存器之间不允许传数,CS不能作目的操作数,立即数不能直接送段寄存器,源操作数和目标操作数不能一个是字节一个是字,类型要一致,立即数只能出现在源操作数位置。 例如:用如下指令可给数据段寄存器DS赋初值 MOV AX,DATA MOV DS, AX 再如:MOV EBX, 12345678H MOV AX, BX+2429第29页,共106页。交换指令XCHG 指令格式:XCHG OP1, OP2 reg, reg mem,reg reg, mem 功能:用于交换两个操作数。 说明:指令中的两个操作数可以是两个寄存器操作

22、数,或一个寄存器与一个存储器操作数。 例如:XCHG AX, BX XCHG AX, BX XCHG BX+20H, AX30第30页,共106页。I/O指令IN和OUT 指令格式: IN OP1,OP2 OUT OP1, OP2 AL, imm8 imm8, AL AX,imm8 imm8, AX EAX,imm8 imm8, EAX AL, DX DX, AL AX, DX DX, AX EAX,DX DX, EAX 功能:用于在I/O端口和CPU之间的信息交换,只能用AL、AX或EAX接收或发送数据。 31第31页,共106页。 例如: IN AL,0FAH ;从端口FAH读一个字节到A

23、L IN EAX,28H ; 从端口28H读一个双字到EAX MOV DX,3AEH; I/O地址大于255时应通过 DX间接寻址 IN AX,DX ;从DX指定的端口读入一个字到AX OUT 21H,AL ;将8位数从AL输出到端口21H OUT DX,EAX ;将32位数从EAX输出到DX指 定的端口32第32页,共106页。装入有效地址指令LEA 格式: LEA OP1, OP2 reg32,mem reg16,mem 功能:将有效地址(即偏移地址)送通用寄存器。 例如:LEA ECX, DOLLARESI*4+EDX 设: EDX=30H,ESI=32H,DOLLAR=7580H, 则

24、 ( ECX)=7678H(32H*4 + 30H +7580H)33第33页,共106页。装入全地址指令LDS,LES,LFS.LGS,LSS 格式: LDS reg,mem LES reg,mem LFS reg,mem LGS reg,mem LSS reg,mem 功能:取mem指示的32位或48位全地址指针,装入段寄存器和16位或32位reg中。 34第34页,共106页。 对于实地址方式和虚拟8086方式,段基址和偏移地址都是16位 ,段基址送段寄存器,偏移地址送reg中。 例如:X DD 12345678H LDS SI ,X ;DS=1234H,SI=5678H 对于16位和3

25、2位保护方式,选择符送段寄存器,偏移地址送reg中。 例如:X1 DF 123456780010H; 32位偏移值+ 16 位选择符 LDS ESI,X1 ; DS=1234H , ESI=56780010H 35第35页,共106页。压栈/弹栈指令PUSH/POP 格式:PUSH OP1 POP OP1 imm16 mem16 imm32 mem32 mem16 reg16 mem32 reg32 reg16 功能: reg32 PUSH指令使(E)SP的内容减2或减4,然后把16位或32位的立即数、存储器操作数或寄存器操作数压入堆栈, SS:(E)SP指向新的栈顶。 POP指令从堆栈把字或

26、双字弹出至16位或32位存储器或通用寄存器中,(E)SP的内容加2或加4。 36第36页,共106页。例如:PUSH AX;(SP)-2 SP,(AX) (SP) PUSH BX;(SP)-2 SP,(BX) (SP) PUSH CX;(SP)-2 SP,(CX) (SP) . . . POP CX;(SP) CX,(SP)+2 SP POP BX;(SP) BX,(SP)+2 SP POP AX;(SP) AX,(SP)+2 SP 堆栈为“先进后出”的数据结构。37第37页,共106页。栈底栈底SPSP00H20H60H30H40H60H栈顶SSSS图A图B设: AX=6040H,BX=30

27、60H,CX=2000H 执行PUSH指令后,堆栈状态如图A,执行POP指令后,堆栈状态如图B。38第38页,共106页。已知(IP)=1000H,(SP)=2000H,(BX)=283FH,CALL WORD PTRBX指令的机器码是FF17H,试问执行该指令后,SS:1FFEH的值是多少?( )(A) 28H (B) 3FH (C) 00 (D) 02H39第39页,共106页。全部通用寄存器压栈和出栈指令格式:PUSHA/POPA;16位通用寄存器压栈和 出栈指令。入栈顺序为: AX、CX、DX、 BX、 SP、BP、SI和DI。 PUSHAD/POPAD;32位通用寄存器压栈和 出栈指

28、令。入栈顺序为: EAX、ECX、EDX、EBX、 ESP、EBP、ESI和EDI。 其中:SP和ESP为操作前的栈顶指针。 40第40页,共106页。 标志寄存器传送指令指令格式:LAHF ; F寄存器内容送AH指令SAHF ; AH内容送F寄存器指令PUSHF ; 16位F内容进栈指令(保存F)POPF ; 16位F内容出栈指令(恢复F)PUSHFD;32位F内容进栈指令(保存F)POPD ;32位F内容出栈指令(恢复F)41第41页,共106页。查表转换指令XLAT 格式:XLAT ; AL (BX)+(AL) 功能:完成一个字节的查表转换 BX指向表的首地址(DS段内),AL装入要转换

29、的代码在表中的序号,并XLAT指令执行的结果存于AL中。 例如:查找ASCII码表中, (BX) 3的ASCII码。 程序如下: (BX)+(AL) MOV DS,AX LEA BX,TABLE;DS段表的首地址送BX MOV AL,3 ;要转换的代码在表中的序号3送AL XLAT ;AL (BX)+(AL),查找到的3的 ASCII码33H保存在AL中序号01234.TABLE 30H 31H 32H 33H 34H . . 42第42页,共106页。算术运算指令 支持加、减、乘、除四种基本算术运算,其操作对象可以是字节、字、双字的二进制整数,也可以是压缩、非压缩BCD码。算术运算指令一般会

30、影响FLAGS寄存器中的状态标志。加法和减法指令ADD/SUB格式:ADD OP1,OP2; OP1 OP1+OP2,置标志位 reg, reg reg, mem reg, imm mem,reg mem,imm43第43页,共106页。ADD的功能:将OP1和OP2相加,结果存放在OP1。例:ADD AX,BX ; AX (AX)+(BX)ADD EBX,ECX ;EBX (EBX)+(ECX)ADD 3000H,AX ;3000H (3000H)+(AX)ADD 3000H,23 ; 3000H (3000H)+23SUB OP1,OP2 ; OP1 OP1-OP2 ,置标志位 reg,

31、reg reg, mem reg, imm mem,reg mem,imm44第44页,共106页。SUB的功能:从OP1中减去OP2,结果存OP1中。例:SUB AX,BX ; AX (AX)-(BX) SUB EAX,ECX ;EAX (EAX)-(ECX) SUB N,12345678H; N (N)-12345678HADD和SUB对标志位的影响:OF SF ZF AF PF CFX X X X X X例:设AL=64H,AH=0A8H,求执行下列指令的结果和标志位的状态。 (1) ADD AL,AH ; AL (AL)+(AH),有符号数.解:01100100 100D 得: (AL

32、)=0CH(正确) + 10101000 -88D OF SF ZF AF PF CF 1 00001100 12D 0 0 0 0 1 145第45页,共106页。(2) SUB AL,AH ; AL (AL)-(AH),有符号数.解:| 01100100 100D 得: (AL)=BCH(不正确) - 10101000 -88D OF SF ZF AF PF CF 10111100 -68D 1 1 0 1 0 1 有符号数加、减的结果有“溢出”的判断规则: 对于加法: 正数+正数=负数,负数+负数=正数 对于减法: 正数-负数=负数, 负数-正数=正数 例:设(AL)=7FH,(BL)=

33、40H,判断执行ADD AL,BL指令的结果是否正确。解: 01111111 127D 得: (AL)=0BFH(不正确) + 01000000 64D OF SF ZF AF PF CF 10111111 -65D 1 1 0 0 0 046第46页,共106页。带进/借位的加、减法指令ADC/SBB格式:ADC OP1,OP2;OP1 OP1+OP2+CF ,置标志位 reg, reg reg, mem reg, imm mem,reg mem,immADC的功能:将OP1、OP2和进位标志位CF相加,结果存放在OP1。例: ADC AX,375 ; AX (AX)+375+CF ADC

34、EBX,ECX;EBX (EBX)+(ECX)+CF47第47页,共106页。SBB OP1,OP2; OP1 OP1-OP2-CF ,置标志位 reg, reg reg, mem reg, imm mem,reg mem,immSBB的功能:从OP1中减去OP2,再减去借位标志CF,结果存OP1中。例: SBB AX,BX;AX (AX)-(BX)-CF SBB ECX,456789ABH; ADC和SBB对标志位的影响: OF SF ZF AF PF CF X X X X X X48第48页,共106页。格式:DEC OP1 ; OP1 OP1-1,置标志位 mem reg功能:INC使操

35、作数的值加1;DEC使操作数的值减1,常用于修改计数器或地址指针。例:下面是从300H端口输出256个字节数据的程序段:BUFFER DB 12,34, MOV CX,256 MOV SI,OFFSET BUFFER MOV DX,300HNEXT :MOV AL,SI OUT DX,AL INC SI ;地址加1,取下一个数 LOOP NEXT ;未完,继续49第49页,共106页。INC和DEC对标志位的影响:OF SF ZF AF PF X X X X X 交换加法指令XADD 格式:XADD OP1,OP2;OP1 OP1+OP2 OP2 OP1 功能:OP1与OP2相加,结果存于OP

36、1中,并将OP1的值送OP2中。 例:XADD EAX,ECX ;EAX (EAX)+(ECX) ECX (EAX)变反指令NEG 格式:NEG OP1 ;OP1 0-OP1,置标志位 功能:求OP1的相反数。50第50页,共106页。ADD 和ADC、SUB和SBB经常配合使用,完成64位加、减法运算。例:ADD EAX,ECX;EAX (EAX)+(ECX)ADC EBX,EDX;EBX (EBX)+(EDX)+CFSUB EAX,ECX ;EAX (EAX)-(ECX) SBB EBX,EDX ;EBX (EBX)-(EDX)-CF加1/减1指令INC/DEC格式:INC OP1; OP

37、1 OP1+1,置标志位 mem reg 51第51页,共106页。例:NEG AL ;AL 0-(AL)若(AL)=13H,执行NEG指令后,(AL)=EDH比较指令CMP格式:CMP OP1,OP2;OP1-OP2,置标志位 reg, reg reg, mem reg, imm mem,reg mem,imm功能:将OP1减去OP2,但结果不存在OP1中,只使结果影响标志位。 CMP指令用于比较OP1与OP2的大小,由标志位来反映两数的关系(见表A)。52第52页,共106页。 A-B CF ZF SF OF A=B 0 1 0 0 AB 0 0 - - AB - 0 0/1 0/1表A

38、比较并交换指令CMPXCHG 格式:CMPXCHG OP1,OP2 功能:将OP1与累加器(AL、AX或EAX)的内容进行比较,若相等则将OP2存于OP1中;否则将OP1送到累加器中。例:CMPXCHG CX,DX;若(CX)=(AX) 则CX (DX),否则AX (CX)第53页,共106页。无符号数乘法指令MUL 格式:MUL OP1 reg mem 功能:被乘数隐含在累加器中(AL,AX,EAX),OP1为乘数。字节运算时乘积返回到AX;字运算时乘积 返 回 到 DX:AX;双 字 运 算 时 乘 积 返 回 到 EDX:EAX。源操作数不能是立即数。例:MUL CL; AX ( AL)

39、*(CL) MUL BX;DX:AX (AX)*(BX) MUL DWORDESI;EDX:EAX (EAX)*(ESI) MUL指令影响标志位 OF和 CF: 若积的高字节、字或双字为“0”,则OF、CF清“0”,否则OF、CF置“1”。54第54页,共106页。 有符号乘法指令IMUL 指令格式有下列三种: (1)单操作数:IMUL OP1 reg mem 功能:被乘数隐含在累加器中(AL,AX,EAX),OP1为乘数。字节运算时乘积返回到AX;字运算时乘积 返 回 到 DX:AX;双 字 运 算 时 乘 积 返 回 到 EDX:EAX。 (2)双操作数:IMUL OP1,OP2 reg,

40、 reg reg, mem reg, imm功能:OP1乘以OP2,积存放在OP1中。Reg为16或32位。55第55页,共106页。 (3)三操作数:IMUL OP1,OP2,OP3 reg, reg, imm reg, mem, imm 功能:OP2乘以OP3,积存放在OP1中。reg为16位。 例如: IMUL DL ;AX (AL)*(DL) IMUL EBX ;EDX:EAX (EAX)*(EBX) IMUL BX,CX ;BX (BX)*(CX) IMUL BX,CX,4 ;BX (CX)*4IMUL指令影响标志位 OF 和 CF对(1)若乘积的高半部分是低半部分的符号位的扩展,则

41、CF=OF=0,否则CF=OF=1。对(2)、(3)如果乘积超过目标寄存器所能 存储的范围,则系统将置溢出标志OF为1。56第56页,共106页。除法指令DIV/IDIV 格式:DIV OP1 ;无符号除法 reg mem IDIV OP1 ;有符号除法 reg mem 功能: 字节运算时,被除数隐含在AX中,OP1为字节除数,商存入AL,余数存入AH。 字运算时,被除数隐含在DX:AX中,OP1为字除数,商存入AX,余数存入DX 双字运算时,被除数隐含在EDX:EAX中,OP1为双字除数,商存入EAX,余数存入EDX。57第57页,共106页。 例如: DIV BL ;(AX)/(BL),商

42、存入AL,余数存入AH。 IDIV ECX ;(EDX:EAX)/(ECX) 商存入EAX,余数存入EDX。 符号扩展指令 格式: CBW ;将AL中8位带符号数扩展为16位存入AX。 CWD ;将AX中16位带符号数扩展为32位存入DX:AX CWDE;将AX中16位带符号数扩展为32位 存入EAX。 CDQ ;将EAX中32位带符号数扩展为64位 存入 EDX:EAX。58第58页,共106页。符号扩展指令常用于带符号数除法运算时,对被除数位数的扩展。当两个带符号数的字节/字/双字数相除时,必须将被除数扩展为双倍长度。例如:编写程序,计算789AH/1234H。BUFFER DW 789A

43、H ;被除数 DW 1234H ;除数 DD 0 ;存结果 START: MOV BX,OFFSET BUFFER MOV AX,BX ;取被除数 CWD ;字扩展为双字,AX符 号位扩展到DX各位 IDIV 2BX ;带符号除 MOV 4BX,AX ;存商 MOV 6BX,DX ;存余数59第59页,共106页。 十进制(BCD码)调整指令 压缩BCD码运算:将压缩BCD数用二进制加、减指令 (ADD, SUB, ADC, SBC)运算,运算结果必须用以下调整指 令调整为压缩BCD数的结果。 指令格式及功能: DAA ;将AL中的和调整为压缩BCD数 DAS ;将AL中的差调整为压缩BCD数

44、 非压缩BCD字节数加、减、乘、除(ASCII调整) 非压缩BCD码运算:将非压缩BCD数用二进制加、减、乘、除指令运算,配合相应的调整。 AAA ;将AL中的和调整为非压缩BCD数 AAS ;将AL中的差调整为非压缩BCD数 AAM ;将AL中的积调整为非压缩BCD数 AAD ;调整AX中的被除数,相除的商即为非压缩BCD数第60页,共106页。DAA: 若AL的低4位9AF=1,则: (AL)(AL)+6,AF1;若AL的高4位9CF=1,则: (AL)(AL)+60H,CF1。 DAS:若AL的低4位9AF=1,则: AL(AL)-6,AF1;若AL的高4位9CF=1,则: AL(AL)

45、-60H,CF1。 61第61页,共106页。AAA: 如果AL的低4位9 或AF=1,则: AL(AL)+6,AH(AH)+1,AF1 AL(AL)0FH) CFAF否则AL(AL)0FHAAS: 如果AL的低4位9或AF=1,则: AL(AL)-6,AH(AH)-1,AF1 AL(AL)0FH CFAF否则AL(AL)0FH。 62第62页,共106页。AAM:AH(AL)/0AH,AL(AL)%0AH AAD: AL(AH)10+(AL),AH0 63第63页,共106页。BCD码运算编程举例例1 求组合BCD数1283+2574=3857 BCD1 DB 83H,12H BCD2 DB

46、 74H,25H BCD3 DB ?, ?START: MOV AL,BCD1 ADD AL,BCD2 DAA ;调整,(AL)=57H MOV BCD3,AL ;存和的底字节 MOV AL,BCD1+1 ADC AL,BCD2+1 DAA ;调整,(AL)=38H MOV BCD+1,AL ;存和的高字节64第64页,共106页。例2 两个ASCII码数(7-5)相减 MOV AL, 7 ;37H SUB AL, 5 ;37H-35H AAS ;调整,(AL)=02H例3 非组合BCD数6*8=48 MOV AL, 06H MOV BL, 08H MUL BL ;AX (AL)*(BL) A

47、AM ;调整,(AX)=0408H例4 非组合BCD数17/5=3余2 MOV AX,0107H MOV BL, 05H AAD ;调整被除数,(AX)=0011H DIV BL ;相除,(AL)=03,(AH)=02第65页,共106页。逻辑运算与移位指令 这类指令包括与、或、非、异或、测试和左移、 右移、循环左/右移指令。除NOT外,都影响某些标志位(OF、CF、PF、SF、ZF),对AF无影响或随机。 逻辑与/或/异或指令AND/OR/XOR格式:AND/OR/XOR OP1, OP2 reg,mem reg,imm mem,reg mem,imm功能:两操作数按位与、或、异或,结果存入

48、OP1中。第66页,共106页。例如:MOV AL,6 AND AL,0FH ;(AL)=06H MOV AL,6 OR AL,30H ;(AL)=36H MOV AL,0F0H XOR AL,0F0H ;(AL)=00H 测试指令TEST 格式:TEST OP1,OP2 reg, reg reg,mem reg,imm功能:两操作数按位与,置标志位,不保存结果。 67第67页,共106页。TEST常用于测试某位的状态。例如测试打印机是否空闲的程序段如下: MOV DX,3BDHPRTBUSY:IN AL,DX ;读打印机状态 TEST AL,80H ;测试是否空闲 JZ PRTBUSY ;忙

49、,继续测试 . . .逻辑非指令NOT格式: NOT OP1 reg mem功能:将操作数各位求反,对标志位没有影响.68第68页,共106页。算术/逻辑左移指令SAL/SHL格式: SAL/SHL OP1, OP2 reg, imm8 mem,imm8 reg, CL mem, CL 功能:将OP1向左移位,移动的次数由OP2决定,若移动的次数为1,OP2为立即数,其它情况将移动的次数送入CL中。操作数每左移一位,在最低位补0,最高位移进CF中。 例:设(AL)=01010011B,将AL的内容左移3位。 MOV CL,3 SHL AL,CL ; (AL)=1001100069第69页,共1

50、06页。算术/逻辑右移指令SAR/SHR 格式: SAR/SHR OP1, OP2 reg, imm8 mem,imm8 reg, CL mem, CL 功能:将OP1向右移位,移动的次数由OP2决定,若移动 的次数为1,OP2为立即数,其它情况将移动的次数送入CL 中。 对于SHR指令,操作数为无符号数,每右移一位,在最高位补0,最低位移进CF中。 对于SAR指令,操作数为有符号数,每右移一位,最高位保持不变,最低位移进CF中。70第70页,共106页。71第71页,共106页。例:设(AL)=10101001B,将AL的内容算术/逻辑右移3位。算术右移3位: MOV CL,3 SAR AL

51、,CL;(AL)=11110101B逻辑右移3位: MOV CL,3 SHR AL,CL; (AL)= 00010101B 72第72页,共106页。循环移位指令ROL/ROR/RCL/RCR格式:ROL/ROR/RCL/RCR OP1, OP2 reg,imm8 mem,imm8 reg,CL mem,CL功能:ROL 为左循环移位指令,ROR为右循环移位指令,RCL和RCR则分别为带CF的左循环移位和右循环移位指令。CFCFCFCFROLRORRCLRCR73第73页,共106页。串操作指令 串操作是指对存储器中的一个或多个长度为字节、字或双字的字符串进行操作,包括串传送、串装入、串存储、

52、串比较、串扫描、串输入、串输出等。 串操作指令采用隐含寻址方式,约定: DS:SI(ESI)寻址源串,ES:DI(EDI)寻址目的串。 且偏移指针SI(ESI),DI(EDI)可根据DF方向标志自动增量或减量,以指向串中下一项。即: 当DF=0时,增1(字节)、2(字)或4(双字) 当DF=1时,减1(字节)、2(字)或4(双字)74第74页,共106页。串传送指令格式:MOVSB ;字节传送 MOVSW ;字传送 MOVSD ;双字传送功能:将DS:SI(ESI)指定源串中的数据传送到ES:DI(EDI)指定的目的串中,并修自动改源、目指针。串装入指令格式:LODSB ;装入字节串 LODS

53、W ;装入字串 LODSD ;装入双字串功能:将 DS:SI(ESI)指定源串中的数据传送到AL、AX或EAX中,并自动修改源指针。75第75页,共106页。串比较指令格式:CMPSB ;字节串比较 CMPSW ;字串比较 CMPSD ;双字串比较功能:将DS:SI(ESI)指定源串中的数据与ES:DI(EDI)指定的目的串中的数据进行比较,置标志位并自动修改指针。串存储指令格式:STOSB ;存字节串 STOSW ;存字串 STOSD ;存双字串功能:将AL、AX或EAX中的数据传送到由ES:DI(EDI)指定的目的串中,并修改指针。 76第76页,共106页。串扫描指令格式:SCASB ;

54、扫描字节串 SCASW ;扫描字串 SCASD ;扫描双字串功能:用AL、AX或EAX中的数据减去由ES:DI(EDI)指定的目的串中的数据,置标志位并自动修改目的指针。 串输入指令格式:INSB ;输入字节串 INSW ;输入字串 INSD ;输入双字串功能:从DX指定的端口输入数据至由ES:DI(EDI)指定的目的串中,并自动修改目的指针。77第77页,共106页。串输出指令格式:OUTSB ;输出字节串 OUTSW ;输出字串 OUTSD ;输出双字串功能:将 DS:SI(ESI)指定源串中的数据输出到由DX指定的端口,并自动修改源指针。 重复前缀REP/REPZ/REPE/REPNE/

55、REPNZ 在串操作指令前加上重复前缀,可使该指令重复执行。重复前缀的功能为: REP: CX (CX)-1 ,当(CX) 0时重复。 REPZ/REPE:相等时重复。即: CX (CX)-1,当(CX) 0且ZF=1时重复。 REPNE/REPNZ:不相等时重复。即: CX (CX)-1,当(CX) 0且ZF=0时重复。 REP常与MOVS和STOS指令配合使用。 REPZ/REPE 和REPNE/REPNZ常与CMPS和SCAS指令配合使用。78第78页,共106页。串操作指令应用举例 使用串操作指令时,根据需要设置以下内容: 设置DS:SI(ESI);ES:DI(EDI)设置DF标志设置

56、CX(ECX)选用重复前缀REP、REPE/REPZ、REPNE/REPNZ79第79页,共106页。例1 将数据段中的字符串ABC45传送到附加段中。程序如下:DATA SEGMENT ST:MOV AX,DATA YCH DB ABC45 MOV DS,AX DATA ENDS MOV AX,EXTRA EXTRA SEGMENT MOV ES,AX MCH DB 5 DUP(?) LEA SI,YCHEXTRA ENDS LEA DI,MCHCODE SEGMENT MOV CX,5 ASSUME CS:CODE CLD ASSUME DS:DATA REP MOVSB ASSUME E

57、S:EXTRA CODE ENDS END ST 80第80页,共106页。 控制转移指令 控制转移指令包括: 无条件转移指令(JMP) 条件转移指令(JA、JB、JE) 循环控制指令(LOOP、LOOPZ、LOOPNZ) 调用/返回指令(CALL、RET) 中断/中断返回指令(INT、IRET)无条件转移指令JMP格式:JMP OP1 lable ;标号 reg mem 功能:无条件地控制程序转移到OP1所指定的目标地址。81第81页,共106页。JMP寻址方式:短转移:在段内的短距离(-128-127)转移。段内转移:CS值不变,只给出地址偏移值。段间转移:CS和(E)IP的值都发生改变的

58、转移为明确表示标号或存储单元的类型,可在操作数前加SHORT、NEAR、FAR、WORD、DWORD、FWORD等修饰符来限定,默认近转移。如:段内直接短转移:JMP SHORT 标号段内直接近转移:JMP NEAR PTR 标号(范围:16位)段内间接转移:JMP reg 或 WORD PTR mem段间直接转移:JMP FAR PTR 标号或JMP segment:offset 段间间接转移:JMP DWORD PTR mem(低16位:IP,高16位:CS)(直接:直接给出,间接:寄存器或存储器给出) 82第82页,共106页。例如: JMP NEAR PTR TABLE ;带标号的段内

59、转移 JMP FAR PTR TABLE ;带标号的段间转移 JMP SHORT TABLE ;带标号的短转移 JMP WORD PTR DX ;16位寻址时不带标号的段内转移 JMP DWORD PTRDX ;16位寻址时不带标号的段间转移 JMP DWORD PTREDX;32位寻址时不带标号的段间转移 JMP FWORD PTREDX;32位寻址时不带标号的段间转移83第83页,共106页。条件转移指令Jcc (p77表)格式:Jcc OP1 lable ;短标号或近标号功能:根据CPU中的标志位状态组成的转移条件CC,决定程序的执行流向。 共19条指令,分为无符号数和有符号数的条件转移

60、,执行后均不影响标志位84第84页,共106页。单标志位条件转移:指令助记符 转移条件 说明JC CF=1 有进位转移JNC CF=0 无进位转移JE/JZ ZF=1 等于/为零转移JNE/JNZ ZF=0 不等于/非零转移JO OF=1 有符号数结果溢出转移JNO OF=0 有符号数结果不溢出转移JP/JPE PF=1 结果低8位奇偶校验为偶转移JNP/JNPE PF=0 结果低8位奇偶校验为奇转移JS SF=1 结果为负时转移 JNS SF=0 结果为非负时转移 85第85页,共106页。无符号数条件转移指令:指令助记符 转移条件 说明JA/JNBE CF=ZF=0 高于/不低于或等于转移

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论