第三章80486微处理器指令系统六页版_第1页
第三章80486微处理器指令系统六页版_第2页
第三章80486微处理器指令系统六页版_第3页
第三章80486微处理器指令系统六页版_第4页
第三章80486微处理器指令系统六页版_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、第一节 80486微处理器的寻址方式目标程序的生成CPU只能识别,存储,运行目标指令,而用机器指令编程非常困难。于是早期的专家们发明了符号指令,再经过软件把符号指令机器指令。图示如下:汇编可执行的机器指令源程序程序(目标程序)指令长度486指令长度(机器指令长度)为116字节规定:多字节指令占用连续的内存单元,存放指令第一字节的内存地址,称为“指令地址”。6编辑、编译、链接第一节 80486微处理器的寻址方式3.指令的组成指令的组成:操作码 + 操作数操作码 告诉计算机要执行的操作是什么,如:加、减、逻辑与等。操作数 执行操作过程所要操作的数,如加运算的两个加数。5第一节 80486微处理器的

2、寻址方式80486符号指令与机器指令对照表MOV: MOVE传送ADD:加SUB:减RET:RETURN 返回4操作符号指令机器指令1234HAXMOV AX, 1234HB834 12AX+BXAXADD AX, BX03C3CX-DXCXSUB CX, DX2BCA返回调用程序RETC3第一节 80486微处理器的寻址方式前言1. 指令通知 CPU执行某种操作的“命令”,CPU全部指令的集合,称为指令系统指令的书写格式 目标指令(机器指令):用一串0,1代码书写注意:硬件只能识别,存储,运行目标指令 符号指令:用规定的助记符,规定的书写格式书写的指令3第三章 80486微处理器指令系统讲授

3、内容第一节 80486微处理器寻址方式2第三章微处理器指令系统目标和基本要求教学目标介绍的寻址方式及指令系统。学习要求通过本章的学习,要求熟悉各种寻址方式的使用场合以及常用指令的使用方法。12第一节 80486微处理器的寻址方式(1)立即数寻址在这种寻址的方式下,操作数作为立即数直接存在指令中,可为 8位,16位和32位。例: MOV AX,1234H MOV BL,78HMOV ECX,12345678H以第一条指令为例的立即数寻址方式的执行过程如图。立即寻址示意图12第一节 80486微处理器的寻址方式80X86的寻址方式可分为两类:操作数的寻址方式和转移地址的寻址方式。一、操作数寻址方式

4、由于操作数作为指令的操作对象,可以存储在存储器中(称为存 储器操作数)、寄存在寄存器中(称为寄存器操作数)或直接包含在 指令中(称为立即数),因此,与之对应有多种寻址方式。80X86粗略地划分可有3类10种寻址方式,其中访问存储器操作数有8种寻址方式。11第一节 80486微处理器的寻址方式操作数存在方式在微型计算机中,操作数可能以以下三种方式存在:操作数包含在指令中即指令的操作数部分就包含着操作数本身。MOV AX, 1234H; ADD AL, 2操作数包含在CPU的某一个内部寄存器中 这时指令中的操作数是CPU内部的某一个寄存器MOV DS, AX操作数在内存的数据区中 这时指令中的操作

5、数包含着此操作数的地址MOV AX,DS:2000H ; MOV BUF , AL第一节 80486微处理器的寻址方式80486寻址方式操作数是指令的操作对象,寻址方式与地址码有密切关系. 形成操作数地址码的过程就是寻址。“寻址方式”:通俗的讲,就是通知CPU本条指令的操作数在哪儿?或者说用什么方式才能得到操作数。9第一节 80486微处理器的寻址方式7. 符号指令的书写格式如:NEXT:ADDAX , BX;AX+BX AX INC SI ;SI+1 SI标号:以字母开头,后跟字母,数字,下划线,长度31字符标号又称符号地址,代表该指令的逻辑地址。可有可无,设置是为了程序的转向注解:以“ ;

6、”开头,不执行,打印程序清单时照原样打印,“系统保留字”不能做标号。8标号:操作码助记符空格操作数助记符;注释第一节 80486微处理器的寻址方式6.指令存放先写操作码,再写操作数。多字节操作数连续存放。存放规律: 低位字节存放在低地址单元,高位字节存放在相邻的高地址单元如:12345H单元中有一条指令MOVAX,6789HMOV AX,6789H7操作码操作数6789HB8H89H67H12345H:3第一节 80486微处理器的寻址方式(2)寄存器间接寻址这种寻址方式下,操作数所在内存单元的EA由规定的寄存器指出。16位寻址时,EA可以由SI,DI,BP或BX提供。若以SI,DI,BX间接

7、寻址,则默认操作数在DS段中。若以BP间接寻址,则默认操作数在SS段中。如果操作数不在上述规定的默认段,而是在其他的段,则必须在指令中相应的操作数前加上段超越前缀。例如:MOV AX,ES:SI MOV AX,DS:BP32位寻址时,8个32位通用寄存器均可作间址寄存器。除ESP, EBP默认段寄存器为SS外,其余6个通用寄存器均默认段寄存器为DS。8第一节 80486微处理器的寻址方式(1)直接寻址在这种方式下,指令中的操作数部分直接给出了操作数的有效地址EA,它和操作码一起放在存储器的代码段中,可以是16位或32位整数。但操作数一般在数据段DS中。应注意的是,指令中的DS不能省略。例:MO

8、V AX,DS:1000H;将DS段中1000H和1001H单元的内容送到AX中。直接寻址示意图17第一节 80486微处理器的寻址方式段寄存器:基址寄存器+变址寄存器 比例因子 位移量 段超越前缀有效地址(EA)偏移地址(有效地址)可以由以下各种情况构成:直接地址 包含在指令中的16位地址偏移量。间接地址 由CPU内部某个16位寄存器的内容决定,如 BX、BP、SI、DI。基址 基址寄存器BX或BP加上指令中包含的8位或16位位移量。变址 变址寄存器SI或DI加上指令中包含的8位或16位位移量。基址加变址 由一个基址寄存器BX或BP加上一个变址寄存器SI或DI,再加上指令中包含的8位或16位

9、位移量。16第一节 80486微处理器的寻址方式3.存储器操作数寻址方式重申: 在读写内存操作数之前,CPU必须知道相关存储单元的物理地址。 由于CPU对存储器采用分段管理, 因此指令格式中只能写出存放操作数的内存单元的“逻辑地址”。 程序员的责任仅在于正确的书写逻辑地址表达式,然后由CPU自动运算以求出物理地址。程序员给出的逻辑地址形式段寄存器: 偏移地址操作系统将程序调入内存时才给段寄存器赋实际值。此时,计算出的 20位地址才是实际的物理地址第一节 80486微处理器的寻址方式(2)寄存器寻址在这种方式下,操作数存放在CPU某个8位、16位或32 位寄存器中。例: MOV EAX,EDX

10、INC CLMOV DS,AX该寻址方式指令码短,且无需从存储器取操作数,故执行速度快如:下述条指令,目标操作数即为寄存器寻址MOV EAX,12345678HMOV BL,10101010B;AAH BLMOV CL, 4;FCH CLMOV DL,5;35H DL ADD AL,0C8HMOV SI,3*5;15 SI14第一节 80486微处理器的寻址方式如:MOVEAX , 12345678HMOV BL , 10101010B;AAH BL MOVCL , 4;FCH CLMOVDL , A;41H DL ADDAL , 0C8HMOVSI , 3*5;15 SI上例源操作数即为立即

11、寻址, 立即数书写规定:立即数以数字开头,以开头的16进制数,必须前缀0。立即数的数制用后缀表示,B表示二进制数,H表示十六进制数,D或缺省为十进制数,单引号括起来的字符编译成相应的ASCII码 。可以用+ * / 组成立即数表达式程序员可以按自己的习惯书写立即数,各种合法的立即数经汇编后,一律自动转换成等值的二进制数,负数用补码表示。4+第一节 80486微处理器的寻址方式(8)相对基址比例变址寻址方式操作数的EA是变址寄存器的内容乘以比例因子,加上基址寄存器的内容,再加上位移量之和。在指令格式中,地址表达式写成:段寄存器: 基址寄存器 比例因子 变址寄存器 位移量 或:段寄存器:位移量 基

12、址寄存器 比例因子 变址寄存器 或:段寄存器:位移量 基址寄存器 比例因子 变址寄存器 这种寻址方式比相对基址变址寻址方式增加了比例因子,便于对元素为2,4,8字节的二维数组的处理。例如:MOV EAX,TABLEEBPEDI*4第一节 80486微处理器的寻址方式(7)基址比例变址寻址方式操作数的EA是变址寄存器的内容乘以比例因子再加上基址寄存器的内容之和。在指令格式中,地址表达式写成:段寄存器:变址寄存器 比例因子 基址寄存器 或:段寄存器: 基址寄存器 变址寄存器 比例因子例:MOV ECX,EAXEDX*823第一节 80486微处理器的寻址方式(6)比例变址寻址方式操作数的EA是变址

13、寄存器的内容乘以指令中指定的比例因子再加上位移量之和。在指令格式中,地址表达式写成:段寄存器:变址寄存器 比例因子 位移量 或:段寄存器:位移量变址寄存器 比例因子其中比例因子可以是1,2,4,8中的任一个数。除ESP外的任何通用寄存器均可作变址寄存器,且EBP默认SS作段寄存器,其余以DS作段寄存器。MOV EAX, TABLEESI*4 ;TABLE是位移量,4是比例因子该方式适用于对一维数组的数组元素进行检索操作。位移量表示数组起 始地址的偏移量,变址表示数组元素的下标,可变。当数组元素大小为2,4, 8时,用带比例因子的变址寻址方式更方便、更高效。22这种寻址方式只适合于32位寻址的一

14、种情况。第一节 80486微处理器的寻址方式例: MOV AL,BX+SIH低DS代5 0 0 0 0 H码+BX 1 0 0 0 H段+SI2 0 0 0 H0 2 5 0 H 50000H数5 3 2 5 0 H53250据段高AL相对基址变址寻址方式示意图21操作码50H02H30H第一节 80486微处理器的寻址方式(4)基址变址寻址方式操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和。在指令格式中,地址表达式写成:段寄存器: 基址寄存器 + 变址寄存器 在这种方式中,基址寄存器和变址寄存器都必须是规定的16位寄存器。当基址寄存器和变址寄存器默认的段寄存器不同时,一般规定由基

15、址寄存器来决定默认哪一个段寄存器作段基址指针。(5)相对基址变址寻址方式该方式中,操作数所在内存单元的有效地址是一个基址寄存器与一个变址寄存器的内容和一个常量(即位移量)之和。在指令格式中,地址表达式写成:段寄存器: 基址寄存器 / 变址寄存器 + 位移量 或:段寄存器:位移量 基址寄存器 / 变址寄存器 或:段寄存器:位移量 基址寄存器 变址寄存器 20这种寻址方式主要用于二维数组操作和二重循环等。第一节 80486微处理器的寻址方式(3)寄存器相对寻址方式在这种方式中,操作数所在内存单元的有效地址为规定的基址寄存器或变址寄存器的内容与一个常量(即位移量)之和。在指令格式中,地址表达式写成:

16、段寄存器: 基址寄存器 / 变址寄存器 + 位移量 或: 段寄存器:位移量 基址寄存器 / 变址寄存器16位寻址时,BX和BP作为基址寄存器,BX默认DS为段寄存器,BP默认 SS为段寄存器;SI和DI作为变址寄存器,默认DS为段寄存器。位移量可以为8位或16位。32位寻址时,8个32位通用寄存器均可作基址/变址寄存器,其中ESP、 EBP以SS为默认段寄存器,其余6个通用寄存器均以DS为默认段寄存器。 位移量可以为8位或32位。例如:MOV EAX,BX+24 ;也可以写成 MOV EAX,24BX MOV DX ,EAX;也可以写成 MOV DX,1500EAX5第一节 80486微处理器

17、的寻址方式补充1直接端口寻址直接端口寻址是在指令中直接给出要访问的端口地址,一般采用2位十六进制数表示,可访问的端口数为0255个。例如:IN例如:IN AL,30H ;表示从I/O端口地址为30H的端口中取出字节数据送到8位寄存器AL中。IN AX,50H ;表示从I/O端口地址为50H和 51H的两个相邻端口中取出字数据送到16位寄存器AX中。30第一节 80486微处理器的寻址方式补充8086 I/O端口寻址由于8086CPU的I/O端口采用独立编址方式,可有64K个字节端口或32K个字端口。指令系统中设有专门的输入指令IN和输出指令OUT来进行访问,I/O端口的寻址方式有直接端口寻址和

18、寄存器间接端口寻址两种。29第一节 80486微处理器的寻址方式 段间直接寻址这种寻址方式用于段间转移,指令中直接提供了目标地址的段基址和偏移地址,所以,只要用指令中指定的偏移地址取代IP寄存器的内容,用指令中指定的段基址取代CS寄存器的内容就完成了从一个段到另一个段的转移操作,指令的汇编语言格式可表示为:JMPFAR PTR NEXT 段间间接寻址该方式下,用存储器中两个相继字的内容来取代IP和CS寄存器中的原始内容,以达到段间转移的目的。这里,存储单元的地址是由指令指定除立即数方式和寄存器方式以外的任何一种数据寻址方式取得。指令的汇编语言格式可表示为:JMP DWORD PTR REL+B

19、X第一节 80486微处理器的寻址方式 段内直接寻址转移的目标地址是当前IP寄存器的内容和一个8位或16位位移量之和。指令的汇编语言格式表示为:JMP SHORT OUTSET JMP NEAR PTR PROGRM 段内间接寻址该方式中,转移的目标地址是寄存器或存储单元的内容。寄存器或存储单元的内容可以用数据寻址方式中除立即数以外的任何一种寻址方式取得,所得到的内容将用来取代IP寄存器的值。段内间接寻址转移指令的汇编格式可以表示为: JMP CXJMP WORD PTR BX+TAB1第一节 80486微处理器的寻址方式二、转移地址寻址方式在指令系统中,有一组指令为程序转移指令。程序转移指令

20、的寻址方式涉及如何确定转移的目标地址。目标地址可以在段内,也可以在段外。26第一节 80486微处理器的寻址方式存储器寻址时的段约定访存操作类型默认段寄存器允许超越的段寄存器偏移地址寄存器取指令代码CS无(E)IP堆栈操作SS无(E)SP源串数据访问DSCS, SS ,ES FS ,GS(E)SI目的串数据访问ES无(E)DI通用数据访问DSCS,SS,ES,FS,GS偏移地址以(E)BP、(E)SP间接寻址的指令SSCS,DS,ES,FS,GS偏移地址6第一类 数据传送指令通用数据传送指令:基本传送指令(MOV)格式:MOV 目标操作数,源操作数例如:MOV BYTE PTR BX,55H

21、;55H送给BX间址的字节型单元MOV BX,55H;0055H送给BX间址的字型单元注意事项:立即数不能直接送段寄存器 MOV DS, 3000H目标操作数不允许用立即数方式MOV 2000H, AL不允许在两个存储单元间传送数据 MOV2000H,3000H不允许在两个段寄存器之间传送数据 MOV DS, ES源、目属性要一致36总说明对于双操作数指令(如:MOV,ADD,CMP) 源、目操作数不可同为内存操作数 源、目操作数属性一致(长度相同) 当目标操作数为间址、变址、基址、基+变址的内存操作数,而源操作数为单字节/双字节立即数,则目标操作数必须用PTR说明类型对于单操作数指令(如:I

22、NC,DEC)若操作数为间、变、基、基+变的内存操作数,则必须用PTR说明类型3580486微处理器指令系统80X86的指令系统向上兼容,都是在8086指令的基础上发展形成的。与80286相比,增加了32位操作和访问存储器的32位寻址方式。80486可以工作在实模式、保护模式和虚拟86模式,为了支持系统工作模式,指令系统中设计了系统管理指令、保护模式控制指令以及高级语言支持指令等等。80486的基本指令按功能可分为7类:数据传送指令、算术运算指令、逻辑运算指令、字符串操作指令、控制转移指令、处理器控制指令 和按条件设置字节指令。34第一节 80486微处理器的寻址方式习题讨论4. 说明以下指令

23、中的源操作数的寻址方式。MOV AX,1234H=立即数寻址MOV DS,AX=寄存器寻址MOV AX,BX=寄存器间接寻址MOV BH,DS:2000H=直接寻址MOV AH,BX+SI=基址变址寻址MOV AL,BP+SI+30H=相对基址变址寻址MOV AL,EAX+EBX*2=基址比例变址寻址MOV AX,VAR1 +2=直接寻址33第一节 80486微处理器的寻址方式习题讨论指令ADD DI,SI中源操作数的的寻址方式是( C )。MOV DX,BP+SI隐含使用的段寄存器是(D)。JMP WORD PTR BX 是(A)。A 段内间接转移B 段间间接转移C 段内直接转移D 段间直接

24、转移A CSB DSC ESD SSA 寄存器寻址B 直接寻址C 寄存器间接寻址D 立即寻址第一节 80486微处理器的寻址方式补充2寄存器间接端口寻址当访问的端口地址数256时,直接端口寻址不能满足要求,要采用I/O端口的间接寻址方式。它是把I/O端口的地址先送到寄存器DX中,用16位的DX作为间接寻址寄存器。此种方式可访问的端口数为 065535个。例如:MOV DX,283H ;将端口地址283H送到DX寄存器。OUT DX,AL ;将AL中的内容输出到DX所指定的端口中。317习题讨论利用查表指令XLAT完成1位十进制数与其对应的显示代码间的转换。解: HUTAB DB XX,XX,X

25、X, NDB XX.LEA BX, HUTAB; MOV AL, NXLAT42 查表转换指令XLAT将DS:BX/EBX+AL单元的一个字节送AL功能:DS:BX+ALAL或DS:EBX+ALAL说明: 该指令查找数据段中的字节表,即要求数据表放在数据段,每个表元素为单字节数 指令执行前:EBX或BX=表头的有效地址 AL=表元素相对于表头的地址位移量例如:利用查表转换功能实现一位十六进制数与ASCII码的转换。 DATASEGMENTTABDB0123456789ABCDEFNUMDB?;0F中的任一数 DATAENDS代码段设置如下指令,可查出与NUM单元中的数相对应的ASCII编码:

26、MOVAX,DATAMOVDS,AXMOVBX,OFFSET TABMOVAL,NUM XLAT 指针传送指令格式: LDS/LES/LFS/LGS/LSS 目标操作数,源操作数LDS REG,SRC执行的操作: (REG) (SRC)(DS) (SRC+2)把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中.该指令常指定SI寄存器.例如:设数据段有 XYZ1 DF 1234567890ABHXYZ2 DD 56781234H如此时DS已指向数据段:LES EBX,XYZ1 ;ES=1234H,EBX=567890ABH LDS SI,XYZ2;DS=5678H,SI=1234H

27、地址传送指令LEA传送指令格式: LEA目标操作数,源操作数例如:TABLE DB 31H,32H,33H,34HLEA DI,TABLE 等效于 MOV DI,OFFSET TABLEDS=1000h例: LEA BX, DS:100H执行后 BX=100HBUF 10100h 00 0100h BX LEA BX, BUF 02 00 20 39交换指令XCHG格式: XCHG目标操作数,源操作数在寄存器间或寄存器与存储器间交换信息(不允许使用段寄存器)。源操作数: 寄存器、存储器目的操作数:寄存器、存储器执行的操作:( OPRD1) (OPRD2 )例: XCHG BX, BP+SI(B

28、X) = 6F30H(BP) = 0200H结果:(SI) = 0046H(BX)=1234H (2F246H)=6F30H(SS) = 2F00H(2F246H) = 1234H38 符号扩展传送指令MOVSX格式:MOVSX目标操作数,源操作数 例如:MOVDL,-16;DL = F0HMOVSXBX,DL;BX = FFF0H,而DH,DL不变 零扩展传送指令MOVZX格式:MOVZX目标操作数,源操作数例如:MOVZX EAX,CX;将CX中16位数高位加0扩展为32位送入EAXMOVSX和MOVZX这两条指令常被用于作除法时对被除数位数的扩展。378数据进栈过程(以16位操作数进栈为

29、例)SP2SP高8位SS:SP-1低8位SS:SP-2堆栈区双字节操作数低字节 3 4 HSP高字节 1 2 H483 4 H1 2 HX X HX X H数据进栈过程(以16位操作数进栈为例)SP2SP高8位SS:SP1低8位SS:SP2堆栈区双字节操作数低字节 3 4 HSP高字节 1 2 H471 2 HX X HX X H数据进栈过程(以16位操作数进栈为例) SP2SP高8位SS:SP1双字节操作数堆栈区低字节 3 4 H高字节 1 2 HSP46X X HX X H2)堆栈指令堆栈按照先进后出的原则组织的一段内存区域。堆栈指针SP的初值决定了堆栈的大小,SP始终指向堆栈的顶部,即始

30、终指向最后推入堆栈的信息所在的单元。00000SS:0000堆栈段堆栈段寄存器SS:存放堆栈段段基址SS:SP堆栈指针ESP(SP):存放栈顶单元的偏移地址 SS、ESP(SP)初值,由程序员赋值或DOS系统自动赋值 字节交换指令BSWAP将32位寄存器4个字节对称交换顺序格式:BSWAP32位寄存器 标志寄存器传送指令LAHF/SAHF格式:LAHF 或SAHF44习题讨论将0-15的平方值表存放在数据段SQRTAB开始的内存连续单元中,试编制一段程序,使其能实现:用查表的方法求数N(N=0-15)的平方值,并将其在表结果放在标号为RSL的内存单元中。解:SQRTAB DB 0,1,4,9,

31、16,25,36,49DB 64,81,100,121,144,.LEA BX, SQRTAB MOV AL, N XLATMOV RSL, AL916位标志寄存器压栈/弹栈指令PUSHF/POPF格式:PUSHFPOPF注:POPF指令影响标志位O、S、Z、A、P、C 。32位标志寄存器压栈/弹栈指令PUSHFD/POPFD格式:PUSHFDPOPFD全部16位通用寄存器压栈/弹栈指令PUSHA/POPA格式:PUSHAPOPA全部32位通用寄存器压栈/弹栈指令PUSHAD/POPAD格式:PUSHADPOPAD54压栈指令PUSH格式:PUSH 源操作数说明:非直接寻址的内存操作数,必须用

32、PTR说明属性如: PUSH WORDPTR BX PUSH DWORD PTR SI+5弹栈指令POP格式:POP 目标操作数如: PUSHAXPOPBX;BX=AX说明:非直接寻址的内存操作数,必须用PTR说明属性53数据出栈过程(以16位操作数出栈为例)SS:SP目标(目标寄存器,目标单元)低8位 SS:SP+1目标高8位SP+2SP堆栈区16位目标寄存器低字节3 4 H高字节 1 2 HSP 80X86的堆栈是向低地址方向延伸的,栈顶是“浮动” 的注:一次进栈、出栈的数据至少是2字节523 4 H1 2 HX X HX X H数据出栈过程(以16位操作数出栈为例)SS:SP目标(目标寄

33、存器,目标单元)低8位 SS:SP+1目标高8位SP+2SP16位目标寄存器堆栈区低字节 3 4 HSP高字节 1 2 H513 4 H1 2 HX X HX X H数据出栈过程(以16位操作数出栈为例)SS:SP目标(目标寄存器,目标单元)低8位 SS:SP+1目标高8位堆栈区16位目标寄存器低字节 3 4 HSP高字节 5 6 H503 4 H1 2 HX X HX X H数据出栈过程(以16位操作数出栈为例)SS:SP目标(目标寄存器,目标单元)低8位堆栈区16位目标寄存器低字节 7 8 HSP高字节 5 6 H493 4 H1 2 HX X HX X H10习题讨论5. 给定寄存器及存

34、储单元的内容为:(DS) = 2000H,(BX)= 0100H,(SI) = 0002H,(20100) = 32H,(20101) = 51H,(20102) = 26H,(20103) = 83H,(21200) = 1AH, (21201) = B6H,(21202) = D1H,(21203) = 29H。试说明下列各条指令执行完后,AX寄存器中保存的内容是什么。MOV AX,BXSIEA =(BX)(SI)= 0100H0002H = 0102H,PA =(DS)10HEA = 2000H10H0102H = 20102H,执行后,(AX)= 8326H60习题讨论5. 给定寄存器

35、及存储单元的内容为:(DS) = 2000H,(BX)= 0100H,(SI) = 0002H,(20100) = 32H,(20101) = 51H,(20102) = 26H,(20103) = 83H,(21200) = 1AH, (21201) = B6H,(21202) = D1H,(21203) = 29H。试说明下列各条指令执行完后,AX寄存器中保存的内容是什么。MOV AX,BXEA = (BX)= 0100H,PA =(DS)10HEA = 2000H10H0100H = 20100H,执行后,(AX)= 5132HMOV AX,1100HBXEA =(BX)1100H =

36、0100H1100H = 1200H,PA =(DS)10HEA = 2000H10H1200H = 21200H,执行后,(AX)= B61AH59习题讨论给定寄存器及存储单元的内容为:(DS) = 2000H, (BX) = 0100H,(SI) = 0002H,(20100) = 32H, (20101) = 51H,(20102) = 26H,(20103) = 83H, (21200) = 1AH,(21201) = B6H,(21202) = D1H,(21203) = 29H。试说明下列各条指令执行完后,AX寄存器中保存的内容是什么。MOV AX,1200H;执行后,(AX)=

37、1200HMOV AX,BX;执行后,(AX)= (BX)= 0100HMOV AX,1200H直接寻址,EA = VAL = 1200H,PA =(DS)10HEA = 2000H10H1200H = 21200H,执行后,(AX)= B61AH58小结 源操作数可以是8位、16位或32位的立即数、寄存器、段寄存器或存储 器操作数,目标操作数是与源操作数等长的寄存器、段寄存器(CS除外)或存储器操作数。 源操作数和目标操作数不能同时为存储器操作数。如:MOV BP, SI是非法指令。 源操作数和目标操作数不能同在段寄存器中,如:MOV DS,ES是非法指令。 立即数不能作为目标操作数。如:M

38、OV 1234H,AX是非法指令。 不能将立即数直接传送到段寄存器,如:MOV SS,1000H 是非法 指令。 当目标操作数为非直接寻址的存储器操作数时,如源操作数是单字节的立即数,则应用PTR运算符说明目标操作数的属性,否则将被默认为字型操作数。数据传送指令除SAHF和POPF外,其余均不影响标志.3)I/O指令直接寻址的I /O指令格式:INAL/AX,PORT OUTPORT,AL/AX直接寻址方式要求端口地址=255DX间址的I/O指令格式:INAL/AX/EAX,DXOUTDX,AL/AX/EAX56习题讨论设SS=4000H, SP=1200H,执行下列程序段,在有分号的行尾给出

39、该指令执行后AX,SP以及栈顶元素的值。MOV AX, 23AAHPUSH AX; (1) AX= 23AAH ,SP= 11FEH(SP)= 23AAH MOV AX, 6735HPUSH AX; (2) AX= 6735H ,SP= 11FCH ,(SP)= 6735H MOV BP,SPADD WORD PTRBP,3000H; (3) AX= 6735H ,SP= 11FCH ,(SP)= 9735H POP AX; (4) AX= 9735H ,SP= 11FEH ,(SP)= 23AAH55112 F 3 6 51F 3 6 5 + 5 E 0 2 4 + E 0 2 48 D 3

40、 8 9D 3 8 9First210 0 0 2+ 0 0 0 50 0 0 8SecondMOV AX, FirstADD AX, SecondThirdMOV Third, AX MOV AX, First+2 ADC AX, Second+2MOV Third+2, AX6665F3020024E0050089D30800例2:在内存的First和Secontd开始的区域中分别存放着2F365H和 5E024 H两个数,First要求求其和,并存入Third中。Second2 F 3 6 5+ 5 E 0 2 4 8 D 3 8 9Third6565F30200 24E005001)基

41、本四则运算加法指令ADD/带进位加法指令ADC格式:ADD目标操作数,源操作数;目标操作数= 源操作数 + 目标操作数格式:ADC目标操作数,源操作数;目标操作数= 源操作数 + 目标操作数CF64第二类 算术运算指令分类名称格式功能O S Z A P C加法指令加法指令ADD DST,SRC加法(字、字节)O S Z A P C带进位加法指令ADC DST,SRC带进位加法(字、字节)O S Z A P C加 1 指令INC OPRD加 1(字、字节)O S Z A P减法指令减法指令SUB DST,SRC减法(字、字节)O S Z A P C带借位减法指令SBB DST,SRC带借位减法(

42、字、字节)O S Z A P C减 1 指令DEC OPRD减 1(字、字节)O S Z A P比较指令CMP DST,SRC比较(字、字节)O S Z A P C求补指令NEG OPRD求补码O S Z A P C乘法指令无符号数乘法MUL SRC不带符号数乘法(字,字节)OC带符号数乘法IMUL SRC带符号数乘法(字,字节)OC除法指令无符号数除法DIV SRC不带符号数除法(字,字节)带符号数除法IDIV SRC带符号数除法(字,字节)符号扩展指令CBW扩展AL中的符号不影响符号扩展指令CWD扩展AX中的符号不影响十进制调整指令习题讨论6.分析下列指令的正误,对于错误的指令要说明原因并

43、加以改正。MOVBYTE PTRBX,1000错误,1000超出字节空间存储范围MOV BX,OFFSET MAYDATSI正确MOVCS,AX错误,MOV指令CS不能做目的操作数,可改为MOV DS,AXMOV DS,BP正确62习题讨论6.分析下列指令的正误,对于错误的指令要说明原因并加以改正。MOVAH,BX错误,寄存器类型不匹配,可改为MOV AX,BXMOV BX,SI错误,两个操作数不能都为存储单元,可改为MOV BX, SI或MOV BX,SIMOVAX,SIDI错误,寻址方式中只能出现一个变址寄存器,可改为MOV AX,BXDI。MOV MYDATBXSI,ES:AX错误,AX

44、 前不能有段跨越前缀,去掉ES:,改为MOV MYDATBXSI,AX6112带符号数乘法指令IMUL格式:IMUL 源操作数;EAX/AXAL/AX源操作数 IMUL 目标操作数,源操作数;目标操作数目标操作数源操作数IMUL 目标操作数,源操作数,立即数;在三操作数格式下,目标操作数只能是16或32位的通用寄存器,源操作数是与目标操作数等长的寄存器操作数或内存操作数,立即数也与它们等长。8位立即数能自动进行符号扩展,转换成 16或32位的立即数。72无符号数乘法指令MUL源操作数:通用寄存器、存储器(不能是立即数)目的操作数:DX, AX (隐含)执行的操作:字节操作 (AH,AL) (A

45、L)(SRC)字操作(DX,AX) (AX)(SRC)例:求 B4*11MOV AL, 0B4H MOV BL, 11H MUL BL71比较指令CMP格式:CMP 目标操作数,源操作数;目标操作数-源操作数注意: (1) 该指令同 SUB , 但其不保存运算结果;(2) 该指令后面通常跟一条转移指令,根据标志位产生不同的程序分支。比较并交换指令CMPXCHG格式: CMPXCHG 目标操作数,源操作数 ; 将目标操作数与累加器AL,AX或EAX比较,若相等则将源操作数传送到目标操作数,否则将目标操作数传送到累加器。70求补指令NEG格式:NEG 目标操作数 ;目标操作数= 0 目标操作数NE

46、G的应用:求出目标操作数的负值如:MOVAH , 5MOVAL , -6NEGAH ;AH=-5=FBH NEGAL;AL=6交换加法指令XADD格式:XADD目标操作数,源操作数;将源操作数和目标操作数进行互换,然后将源操作数与目标操作数之和送给目标操作数。指令执行后的源操作数是指令执行前的目标操作数。69数据段:N DB 0FFH, 0FFH , 0 , 0代码段:MOV BX , OFFSET NINC BX不等价,INC BYTE PTR BX ;N单元为0执行结果INC WORD PTR BX ;N、N+1单元都为0不同INC DWORD PTR BX ;N、N+1单元都为0;且N+

47、2单元为168加1指令INC/减1指令DEC格式:INC目标操作数;目标操作数= 目标操作数 + 1 DEC目标操作数;目标操作数= 目标操作数 1。操作数:通用寄存器、存储器 (不能是段寄存器或立即数) INC 执行的操作:OPRD OPRD + 1DEC 执行的操作:OPRD OPRD - 1功能: 用于在循环中修改地址指针及循环次数等。注:该指令影响标志位例: INC BX例: DEC BXINC byte ptr SIDEC word ptrSI注意: (1) 该指令将操作数视为无符号数;(2) 该指令不影响进位标志 C13 BCD码数的加减运算BCD码数是用4位二进数代表1位十进数其

48、运算法则应是:“逢十进一,减一当十”假设:N1=7=(0000 , 0111)BCD N2=6=(0000 , 0110)BCD则:N1+N2=07+06=13即结果应当等于(0001 , 0011)BCD78如:69的BCD码数应写成69H指令中:即:MOVAL, 69H ; 则AL=0110,1001或:MOVAL,09H ; 则AL=00001001MOV AH,06H ; 则AH=00000110若:MOVAL, 69 ; 则AL=0100,0101内存数据定义: 即:BUF DB 69H或:BUF DB 09H,06H若:BUF DB69则错77十进制数的表示BCD码 用二进制编码的

49、十进制数。 组合/未组合BCD码数(即压缩/未压缩BCD码数)8位8位未组组合合BCD码码十位个位7600000000100100000000100110012)十进制调整指令前面提到的所有运算指令都是二进制数的运算指令,怎样得到十进制的运算结果呢?80X86提供了一套十进制调整指令。75符号位扩展(数据宽度变换)指令CBW,CWD,CWDE,CDQ格式:CBW/CWD/CWDE/CDQ说明: CBW将AL中的8位带符号数带符号扩展为16位AX中。 CWD将AX中的16位带符号数带符号扩展为32位DX:AX中。 CWDE将AX中的16位带符号数带符号扩展为32位EAX中。 CDQ将EAX中的3

50、2位带符号数带符号扩展为64位EDX:EAX中。74无符号数除法DIV/带符号数除法IDIV源操作数:通用寄存器、存储器 (不能是立即数)目的操作数:DX, AX (隐含)执行的操作:字节操作 (AL) (AX) / (SRC) 商(AH) (AX) / (SRC) 余数字操作(AX) (DX,AX) / (SRC) 商(DX) (DX,AX) / (SRC) 余数说明:若除数为0或商过大(超过保存商的累加器容量)时,产生0号中断731)逻辑运算指令逻辑与/或/异或指令AND/OR/XOR格式:AND/OR/XOR 目标操作数,源操作数例:屏蔽AL寄存器的低四位。MOV AL,0FFH1 1

51、1 1 1 1 1 1AND AL ,0F0H1 1 1 1 0 0 0 01 1 1 1 0 0 0 0例:屏蔽AL寄存器的高两位。MOV AL,0FFH1 1 1 1 1 1 1 1AND AL ,3FH 0 0 1 1 1 1 1 10 0 1 1 1 1 1 14AND通常用于使某些位置0,其它位不变的情况。第三类 逻辑运算指令分类名称格式功能O S Z A P C逻辑运算指令逻辑与指令AND DST, SRC与(字、字节)O S Z P C逻辑或指令OR DST, SRC或(字、字节)O S Z P C逻辑非指令NOT OPRD非(字、字节)不影响逻辑异或指令XOR DST, SRC

52、异或(字、字节)O S Z P C测试指令TEST DST, SRC测试(字、字节)O S Z P C移位指令逻辑左移指令SHL OPRD, COUNT逻辑左移(字、字节)O S Z P C算术左移指令SAL OPRD, COUNT算术左移(字、字节)O S Z P C逻辑右移指令SHR OPRD, COUNT逻辑右移(字、字节)O S Z P C算术右移指令SAR OPRD, COUNT算术右移(字、字节)O S Z P C循环移位指令循环左移指令ROL OPRD, COUNT循环左移(字,字节)OC循环右移指令ROR OPRD, COUNT循环右移(字,字节)OC带进位循环左移指令RCL

53、OPRD, COUNT带进位循环左移(字,字节)OC带进位循环右移指令RCR OPRD, COUNT带进位循环右移(字,字节)OC十进制调整指令格式:DAA ;组合BCD码数的加法调整指令 DAS ;组合BCD码数的减法调整指令 AAA ;分离BCD码数的加法调整指令 AAS ;分离BCD码数的减法调整指令AAM ;分离BCD码数的乘法调整指令AAD;分离BCD码数的除法调整指令除法运算前,把AX中分离BCD码调整为二进制数。AAA(ADD),AAS(DAS),AAM在程序中紧跟在ADD,SUB, MUL之后,AAD在DIV之前。例如:MOV AL,08HADD AL,09H82DAA结果:

54、AL = 17H笔算CPU运算加法调整63 + 541170110,0011ADD) 0101,01001011,0111 +) 0110,00001,0001,0111高四位出现非法BCD码数,对运算结果加60H修正871000,0111因为C标=1, 低四位出现非法 + 86 ADD) 1000,0110BCD码,对运算结果加66H修正1731,0000,1101 +) 0110,01101,0111,00118180笔算CPU运算加法调整430100,0011C标=0,A标=0,高低四位均没有出现非 + 55 ADD) 0101,0101法BCD码,结果正确,不修正981001,1000

55、39 + 49880011,1001 ADD) 0100,10011000,0010 +)01101000,1000低四位有进位,即A标=1,对运算结果加06H修正调整原理以加法调整为例。+ 6 + 0 1 1 0 + 0 1 1 0 1 31 1 0 11 0 0 1 1D0 0 0 1 0 0 1 113 (H)不同的运算指令的调整方法不同,但道理是一样的。7915例:将F0H 除以2。带符号MOV AL,F0H1 1 1 1 , 0 0 0 0F0H= (-10H)= -16DSAR AL,11 1 1 1 , 1 0 0 0F8H= (- 8H)= - 8D无符号MOV AL,F0H1

56、 1 1 1 ,0 0 0 0F0H= 240 DSHR AL,10 1 1 1 ,1 0 0 078H = 120 D移位指令的作用:移位指令通常用来做乘2 或 除2 的操作:左移一位操作数2 ;右移一位操作数2算术移位指令适用于带符号数的运算。逻辑移位指令适用于无符号数的运算。902)移位指令算术/逻辑左移指令SAL/SHL格式:SAL/SHL操作数,移位次数CFMSB 操作数LSB0算术/逻辑右移指令SAR/SHR格式:SAR/SHR操作数,移位次数CFMSB 操作数LSBCFMSB 操作数LSB890逻辑非指令NOT格式:NOT 操作数功能: 实现操作数的按位取反运算。例如: NOT

57、ALNOT BX88例:检测CX内容是否为 0,为 0 则转移。01010001TEST CX,0FFFFHJZ Next 1111111101010001Next: MOV AX,100000000 11111111CMP CX,000000000JZ NextNext:MOV AX,187测试指令TEST格式:TEST 目标操作数,源操作数例:检测AL中的最低位是否为1,若为1则转移。MOV AL,data0 1 0 0 0 0 0 1TEST AL,01H0 0 0 0 0 0 0 1JNZ Next0 0 0 0 0 0 0 1Next: MOV BL,001010000 000000

58、0100000000TEST 通常用于检测一些条件是否满足,但又不希望改变原来操作数的情况,该指令后通常带有条件转移指令。注意运行后CF=0。86例:使某数的第4、5位置1。MOV AL,03H0 0 0 0 0 0 1 1OR AL,30H0 0 1 1 0 0 0 00 0 1 1 0 0 1 1OR指令通常用于将某些位置18516第四类字符串操作指令例:把数据段SOURCE开始的若干字节,依次传送到 ES附加段BUF开始的缓冲区思路: SOURCE:CPUBUF:数据段SOURCE DB 12H, LLLEQU $-SOURCE附加段:BUFDB LLL DUP(?)9612H向前位扫描

59、指令BSF, 向后位扫描指令BSR举例例:MOVBX,40A0HBSFAX,BX;指令执行后,(AX)=5BSRAX,BX;指令执行后,(AX)=1495向前位扫描指令BSF格式:BSF目标操作数,源操作数BSF用于对16位或32位源操作数OPRD2从低位b0到高位(b15或 b31)进行扫描,并将扫描到的第一个“1”的位号送入OPRD1指定的目标寄存器。如果OPRD2所有位均为0,则将ZF标志位置1,OPRD1中的结果无定义;否则(OPRD20),将ZF清0, OPRD1中为位号。向后位扫描指令BSR格式:BSR目标操作数,源操作数;对源操作数所指定的字或双字从左向右进行扫描,找出第一个是“

60、1”的位,把此位的下标放在目标操作数中。BSR指令的功能同BSF,只是从高位到低位进行反向扫描。943)位测试指令与位扫描指令位测试指令格式:BT目标操作数,源操作数;测试指定的位并将它拷贝至进位标志位CFBTS标操作数,源操作数;测试指定的位并将它拷贝至进位标志位CF,再将该位置1 BTR目标操作数,源操作数;测试指定的位并将它拷贝至进位标志位CF,再将该位清0 BTC目标操作数,源操作数;测试指定的位并将它拷贝至进位标志位CF,再将该位取反例:MOV CX,4BT BX,CX ;检查由BX指向的数的b4位,且将b4位放入CF中JC NEXT; b4位=1,转移至NEXTNEXT:93说明:

温馨提示

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

评论

0/150

提交评论