计算机专接本之微机原理-3指令系统_第1页
计算机专接本之微机原理-3指令系统_第2页
计算机专接本之微机原理-3指令系统_第3页
计算机专接本之微机原理-3指令系统_第4页
计算机专接本之微机原理-3指令系统_第5页
已阅读5页,还剩189页未读 继续免费阅读

下载本文档

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

文档简介

1、1 1第三章第三章 指令系统指令系统2 2l x86指令的格式与寻址方式l 传送类指令l 数据操作类指令l 串操作指令l 控制类指令3 33.1x86指令的格式与寻址方式l 指令是让计算机完成某种操作的命令,指令的集合称作指令系统,不同系列计算机有不同的指令系统。l 指令系统与计算机硬件有着对应关系,用指令进行编程能够充分开发计算机硬件资源,它的程序目标代码短、运行速度快。4 43.1.1 86系列汇编语言指令语句格式系列汇编语言指令语句格式l 汇编语言指令语句格式:汇编语言指令语句格式:l 命名规则:命名规则:(1)由字母,数字或)由字母,数字或、-、?组成。组成。(2)第一个字符必须是字母

2、或)第一个字符必须是字母或、-、?,但,但?不能单独做不能单独做标识符。标识符。(3)标识符有效长度为)标识符有效长度为31 。 标号:标号:操作码操作码操作数操作数;注释;注释5 53.1.2 寻址方式寻址方式l 指令系统设计了多种操作数的来源,寻找操作数的过程就是操作数的寻址方式。l 操作数采取哪一种寻址方式,会影响机器运行的速度和效率。8086CPU8086CPU允许从寄存器、存储器中获得操作允许从寄存器、存储器中获得操作数数n寻找操作数的有效地址EA:Effective Address,有效地址6 6说明:l 按指令格式,一条指令可占一到六个字节,从形式上可分单操作数,双操作数,无操作

3、数指令。l 双操作数指令不能同为存储器操作数l 指令不同,寻址方式不同,指令执行时间不同,时间和计算机主频(时钟周期)还有关。7 7操作数操作数操作数包含在指令中,即指令中的操作数包含在指令中,即指令中的操作数部分直接给出操作数本身,操操作数部分直接给出操作数本身,操作数随指令一起从存储器中取出来后作数随指令一起从存储器中取出来后就可以参加运算,称为立即数。就可以参加运算,称为立即数。操作数在操作数在CPUCPU的某个寄存器中,由指令的某个寄存器中,由指令给出寄存器的编码来指出操作数在哪个给出寄存器的编码来指出操作数在哪个寄存器中,称为寄存器操作数。寄存器中,称为寄存器操作数。操作数在内存数据

4、区中,指令中操作数在内存数据区中,指令中的操作数部分给出此操作数地址的的操作数部分给出此操作数地址的计算方法,称为存储器操作数。计算方法,称为存储器操作数。8 8(1)立即数寻址l 8086 CPU指令系统中,有一部分指令所用的8位或16位操作数就在指令中提供,这种方式叫立即数寻址方式。l 立即寻址主要用于给存储器或寄存器赋初值。【例】【例】 MOV AX MOV AX,080AH080AH,其寻址如图所示。,其寻址如图所示。操作码操作码高址高址0AH08HAH ALAX图图 立即寻址示意图立即寻址示意图操作码操作码立即数低字节立即数低字节立即数高字节立即数高字节9 9立即数寻址演示1010说

5、明:说明:l 立即数寻址因为操作数可以从指令中直接取得,不需要运行总线周期,所以,立即数寻址方式的显著特点就是速度快。l 立即数可以为8位,也可以为16位;规定立即数只能是整数,不能是小数、变量或者其他类型的数据;另外还要注意,立即数只能作为源操作数。1111(2) 寄存器寻址寄存器寻址l 如果操作数就在CPU的内部寄存器中,那么寄存器名可在指令中指出。这种寻址方式就叫寄存器寻址方式。l 对16位操作数,寄存器可以是AX、BX、CX、DX、SI、DI、SP或BP,而对8位操作数,寄存器可以是AH、AL、BH、BL、CH、CL、DH、DL。【例】【例】 MOV AX MOV AX,BX BX 执

6、行过程如图所示。执行过程如图所示。AXBX图图 寄存器寻址示意图寄存器寻址示意图采用寄存器寻址方式的指令在执行时,操作就在采用寄存器寻址方式的指令在执行时,操作就在CPU内部进行,不需要内部进行,不需要使用总线周期,因此,使用总线周期,因此,。1212寄存器寻址演示寄存器寻址演示11313寄存器寻址演示寄存器寻址演示2: MOV DS,AX(8E08)1414(3)直接寻址(存储器直接寻址)l 使用直接寻址方式时,数据总是在存储器中,存储单元的有效地址EA由指令直接指出,所以直接寻址是对存储器进行访问时可采用的最简单的方式。 1515需要注意:需要注意:(1)采用直接寻址方式时,如果指令前面没

7、有用前缀指明操作数在哪一段,则默认为段寄存器是数据段寄存器DS。(2)如果要对其它段寄存器所指出的存储区进行直接寻址,则本条指令前必须用前缀指出段寄存器名。例如:例如:MOV AX,1070H;将;将DS段的段的1070H和和1071H两单元内容取到两单元内容取到AX中中设设DS2000H,则执行过程是将绝对地址为,则执行过程是将绝对地址为21070H和和21071H两单两单元的内容取出送元的内容取出送AX例如:例如:MOV BX,CS:3000H;将;将CS段的段的3000H和和 3001H两单元的内容送两单元的内容送BX1616直接寻址演示直接寻址演示1(MOV AX,DS:2000H)1

8、717直接寻址演示直接寻址演示21818(4)l 采用寄存器间接寻址方式时,操作数一定在存储器中,存储单元的有效地址由寄存器指出,这些寄存器可以为BX,BP,SI和DI之一l 即有效地址等于其中某一个寄存器的值。BXEA BP SI DI 1919寄存器间接寻址 (情况一) 以BX寄存器进行间接寻址 以SI和DI寄存器进行间接寻址若以若以SISI、DIDI、BXBX间接寻址,操作数通常在现行数据段中,即间接寻址,操作数通常在现行数据段中,即DSDS中的值中的值左移四位加上左移四位加上SISI、DIDI或或BXBX中的有效地址即为操作数的物理地址。中的有效地址即为操作数的物理地址。【例】【例】

9、MOV AX MOV AX,SI SI 执行过程如图所示。执行过程如图所示。( (变址寻址变址寻址) ) 2020数据段内,寄存器间接寻址(演示1)2121数据段内,寄存器间接寻址(演示2)2222l 以BP寄存器进行间接寻址若以若以BPBP间接寻址,则操作数在堆栈段中,即操作数的物理间接寻址,则操作数在堆栈段中,即操作数的物理地址位堆栈段寄存器地址位堆栈段寄存器SSSS中的值左移四位与中的值左移四位与BPBP相加。相加。 2323*寄存器间接寻址的分类(重要)寄存器间接寻址的分类(重要)BXEA BP + 8位位移量SI 16位位移量DI l 寄存器间接寻址可分为以下4种: 以BX寄存器进行

10、间接寻址数据段基址寻址 以BP寄存器进行间接寻址堆栈段基址寻址 以SI和DI寄存器进行间接寻址变址寻址 BX,BP和SI,DI寄存器组合起来进行间接寻址基址加变址寻址 采用寄存器间接寻址的时候,允许指定一个位移量,采用寄存器间接寻址的时候,允许指定一个位移量,EAEA可可以通过寄存器的内容加上一个位移量获得。位移量可以为以通过寄存器的内容加上一个位移量获得。位移量可以为8 8位位或或1616位。位。2424(1)基址寻址 EA=BXBP+8 8位偏移量位偏移量16位偏移量位偏移量数据段基址寻址数据段基址寻址堆栈段基址寻址堆栈段基址寻址以以BX和和BP寄存器进行间接寻址寄存器进行间接寻址2525

11、l 用BX寄存器进行间接寻址时,默认的段寄存器为DS,因为BX称为基址寄存器,如果要对其它段寄存器所指的区域进行基址寻址,则必须在指令前用前缀指出段寄存器名。例如:MOV CX,ES:BX 设ES3000H,BX4000H,则本指令在执行时,将34000H和34001H两单元的内容送CX。l 如果以寄存器BP对操作数进行间接寻址,操作数默认在堆栈段中,该寻址方式通常称为堆栈段基址寻址。例如:MOV BX,BP 设SS5000H,BP4000H,则本指令在执行时,将54000H和54001H两单元的内容送BX。2626(2)变址寻址l 以SI和DI寄存器进行间接寻址。l SI和DI寄存器分别称为

12、源变址寄存器和目的变址寄存器,所以用这两个寄存器来进行间接寻址也叫变址寻址。l 变址寻址通常用于对数组元素、字符串等进行操作,操作过程中,指令会自动修改变址寄存器中的地址,以指向下一个操作数。EA=SIDI+8 8位偏移量位偏移量1616位偏移量位偏移量2727 2828(3)的寻址l 将BX,BP和SI,DI寄存器组合起来进行间接寻址。l 通常将BX和BP称为基址寄存器,将SI和DI称为变址寄存器。8086指令系统允许把基址寄存器和变址寄存器组成起来构成一种新的寻址方式,叫基址加变址的寻址。EA=BXBP+8 8位偏移量位偏移量1616位偏移量位偏移量SIDI+例如:例如: MOV AX,B

13、X+SI设设DS1000H,BX5000H,SI2000H,则上面指令在执行时,有效,则上面指令在执行时,有效地址为地址为7000H,本指令将,本指令将17000H和和17001H两单元的内容取到两单元的内容取到AX中。中。2929 303031313232l 基址加变址寻址方式使用起来很灵活,特别是为堆栈中数基址加变址寻址方式使用起来很灵活,特别是为堆栈中数组的访问过程提供了极大的方便。组的访问过程提供了极大的方便。基址加变址寻址方式访问堆栈数组基址加变址寻址方式访问堆栈数组在访问堆栈数组时:(1)在BP中存放堆栈顶的地址;(2)位移量表示数组第一个元素到栈顶的距离,(3)变址寄存器SI(也

14、可为DI)指出数组某个元素。通过修改通过修改SI可遍历整个数组可遍历整个数组3333(5)I/O端口寻址端口寻址端口寻址I/O直接端口寻址直接端口寻址间接端口寻址间接端口寻址由指令直接给出输入输由指令直接给出输入输出设备的端口地址。规出设备的端口地址。规定端口地址为定端口地址为8 8位,能寻位,能寻址址256256个端口。个端口。由寄存器由寄存器DXDX给出输入输出给出输入输出设备的端口地址。由于设备的端口地址。由于DXDX是是1616位,因此能寻址位,因此能寻址64K64K个个端口。端口。【例】【例】 IN AL IN AL,20H20H;将地址为;将地址为20H20H的外设的内容读入的外设

15、的内容读入ALAL中中 OUT DX OUT DX,AL AL ;将;将ALAL中内容输出给以中内容输出给以DXDX的内容为地址的外的内容为地址的外设设3434寻址方式小结寻址方式小结(1)“”:汇编语言中,常将“”方括号中的内容作为存储单元的地址。如:BX、DI、2056H(2)除立即数寻址和寄存器寻址外,其他寻址方式都有隐含的段寄存器,操作数实际的物理地址是由段寄存器的内容和指令码中求得的有效地址的相加来求得。(3)上述寻址方式同样适用于与存储器统一编址的IO端口。若IO端口采用独立编址的方式,则对IO端口的寻址有以下两种方式: 直接端口寻址端口地址用8位地址码表示,它是指令的一部分。如:

16、IN AL,21H 间接端口寻址此时IO端口的地址由16位表示,并规定存放在DX寄存器中。如输出指令OUT DX,AL, 表示将AL中的内容输出到地址由DX寄存器内容所指定的端口中。3535寻址方式补充寻址方式补充1数据串寻址用于数据串操作指令。数据串寻址用于数据串操作指令。【例】【例】 MOVSB执行后:执行后: DI SI SISI1 DIDI1 3636练习练习【例】设(BX)3158H,(SI)12A8H,(DS)2100H,并假定没有使用段前缀,即把DS作为操作数对应的段寄存器。并且内存单元情况如图所示,试分析下列程序执行后AX的内容。 MOV AX,1000H MOV AX,BX

17、MOV AX,SI MOV AX,BX+SI+100HDS22000H24158H222A8H25500H12H34H56H78H90H1AH1BH1CH371、指出下列指令的寻址方式:、指出下列指令的寻址方式:(1) MOV CX,100(2) MOV AX,25SI(3) MOV DIBX,AX(4) ADD AX,ADDR(5) MUL BL(6) INC WORD PTR BX+25(7) SUB AX,BP6(8) JMP BX(9) IN AL,20H38383.2 传送类指令传送类指令l 传送类指令是指令系统中最活跃的一类指令,也是条数最传送类指令是指令系统中最活跃的一类指令,也

18、是条数最多的一类指令,多的一类指令,主要用于数据的保存及交换等场合主要用于数据的保存及交换等场合。l 传送类指令可以分为传送类指令可以分为4种:种:通用数据传送指令通用数据传送指令目标地址传送指令目标地址传送指令标志位传送指令标志位传送指令I/O数据传送指令数据传送指令39393.2.1 通用数据传送指令通用数据传送指令通用数据传通用数据传送指令送指令MOVMOV指令指令堆栈操作堆栈操作指令指令数据交换数据交换XCHG查表转换查表转换XLAT压栈压栈PUSH出栈出栈POP40401. 最基本的传送指令最基本的传送指令MOVn指令格式:指令格式:MOV OPMOV OP目,目,OPOP源源n指令

19、功能:将源操作数传送到目的操作数中。指令功能:将源操作数传送到目的操作数中。nOPOP目表示目的操作数,可以是寄存器、存储器。目表示目的操作数,可以是寄存器、存储器。nOPOP源表示源操作数,可以是寄存器、存储器和立即数。源表示源操作数,可以是寄存器、存储器和立即数。 4141l 例如:例如:MOV AX,BUF MOV BH,DIES : MOV DI, SIMOV BP,3BX+SIMOV BUFA,DLMOV BP,AXDS: MOV BP,DLMOV BUF,DSMOV ES ,BUF4242l MOV指令的几点说明:指令的几点说明:(1)双操作数指令不允许两个操作数同时为段寄存器或存

20、储器操作数 MOV seg ,seg ;错误 MOV mem ,mem ;错误 (2)立即数不能传送到段寄存器中。 MOV seg ,imm ; 错误(3)目的操作数不允许使用段寄存器。(4)指令指针IP,不能作为MOV指令的操作数(5)dest与src必须类型匹配,即同时是字节或字类型。(6)MOV指令不影响标志寄存器的值。4343l 寄存器具有明确的类型,例如,AL、AX分别为字节、字类型。若立即数没有明确的类型,MASM负责将立即数扩展为与目的操作数位数相同。l 有时MASM不能确定内存操作数的类型,需要用byte ptr和word ptr明确指出是字节或字类型。l 如,判断下述指令是否

21、正确: MOV 2345H,124444l MOV AX,BL l MOV DS,1000Hl MOV BX ,SIl MOV ES,CSl MOV CS,AX;类型不匹配;类型不匹配;不允许立即数送段寄存器;不允许立即数送段寄存器;不允许内存操作数之间传送;不允许内存操作数之间传送;不允许段寄存器之间传送;不允许段寄存器之间传送; CS不能作为目的操作数不能作为目的操作数;错误,类型不匹配;错误,类型不匹配;正确,;正确,MASM可以判断出要送字节可以判断出要送字节0l MOV AX,B l MOV AL,0 4545练习练习l 用用MOV指令实现两内存字节单元内容的交换指令实现两内存字节单

22、元内容的交换,要求使用要求使用直接寻址和寄存器寻址两种方式来实现。直接寻址和寄存器寻址两种方式来实现。 2035H 2045H 01H . 02H4646l 解答解答1.用直接寻址方式实现用直接寻址方式实现MOV BL, 2035;MOV CL,2045H;MOV 2045H,BL;MOV 2035H,CL;2.2.用寄存器寻址方式实现用寄存器寻址方式实现MOV SI , 2035H;MOV DI, 2045H;MOV AH, SI;MOV AL, DI;MOV 2035H,AL;MOV 2045H,AH;47472. 交换指令交换指令XCHGl 交换指令交换指令XCHG可以实现字节交换,也可

23、以实现字交换。可以实现字节交换,也可以实现字交换。l 格式:格式: XCHG DEST ,SRC;将源操作数与目的操作数的内容互换。l 交换过程可以在CPU的内部寄存器之间进行,也可以在内部寄存器和存储单元之间进行,但不能在两个存储单元之间执行数据交换过程。XCHGAL,BL XCHGBX,CX XCHG2530,CX48483. 换码指令换码指令XLATl XLAT是一条完成字节翻译功能的指令,它可以使累加器中的一个值变换为内存表格中的某一个值,一般用来实现编码制的转换。:XLAT将(BX)为首址(AL)为位移量的字节存储单元中的数据送AL寄存器。即(BX+AL)AL。l 使用换码指令时,要

24、求BX寄存器指向表的首地址,AL的内容为表中某一项与表格首地址之间的偏移量,指令执行时,会将BX和AL中的值相加,把得到的值作为地址,然后将此地址所对应的单元中的值取到AL中去。4949l XLAT指令就是通过查表方式来完成翻译功能的,因此,指令就是通过查表方式来完成翻译功能的,因此,在执行该指令之前,必须建立好一张翻译表,该表的最在执行该指令之前,必须建立好一张翻译表,该表的最大容量为大容量为256字节。字节。5050 xlatxlat指令执行演示指令执行演示5151XLAT指令的应用(教材指令的应用(教材p117)l 执行执行XLAT指令可将任意一个十进制数翻译成指令可将任意一个十进制数翻

25、译成7段段显示码,其操作步骤如下:显示码,其操作步骤如下:(1) 将译码表定位到某个逻辑段的一片连续地址中,将译码表定位到某个逻辑段的一片连续地址中, 并将并将其表首址的偏移地址置入其表首址的偏移地址置入BX寄存器中。寄存器中。(2) 将待翻译的十进制数字送入将待翻译的十进制数字送入AL寄存器中。寄存器中。(3) 执行执行XLAT指令。指令。l 例如,假设这段数据存放在偏移地址为例如,假设这段数据存放在偏移地址为2000H开开始的内存中,取出始的内存中,取出“3”所对应的所对应的7段码,用如下段码,用如下几条程序助记符即可完成:几条程序助记符即可完成:MOVBX,2000HMOVAL,3XLA

26、T52524. 堆栈操作指令l 压栈指令压栈指令指令格式:指令格式:PUSH OPPUSH OP指令功能:将寄存器或存储器单元的内容送入堆栈指令功能:将寄存器或存储器单元的内容送入堆栈OPOP为为1616位的寄存器或存储器操作数。位的寄存器或存储器操作数。操作过程:操作过程:(SP) (SP)-2(SP)+1,(,(SP) (SRC)5353l 出栈指令出栈指令指令格式:指令格式:POP OPPOP OP指令功能:将指令功能:将SPSP所指向的堆栈栈顶的一个字弹到寄存器所指向的堆栈栈顶的一个字弹到寄存器 或存储单元中。或存储单元中。OPOP为为1616位操作,可以是寄存器或存储器操作数。位操作

27、,可以是寄存器或存储器操作数。操作过程:操作过程:(DST)(SP)+1,(,(SP)(SP) (SP)+25454PUSH/POP演示演示5555例题例题堆栈堆栈SS:01F8SS:01FASS:01FCSS:01FESPAA BB(执行(执行PUSH AX之前)之前)1101H1试分析如下两条指令执行后,试分析如下两条指令执行后,SP的变化情况的变化情况: 5656例题例题n将16位通用寄存器CX的内容压入堆栈,已知:n(SS)0200H,n(SP)0008H,n(CX)12FAH。5757n弹出栈顶至弹出栈顶至CX中中58583.2.2l 这是一类专用于传送地址码的指令,可用来传送操作数

28、的这是一类专用于传送地址码的指令,可用来传送操作数的段地址或偏移地址,共包含以下段地址或偏移地址,共包含以下3条指令:条指令:1取有效地址指令 LEA2取偏移地址及数据段首址指令 LDS3取偏移地址及附加数据段指令 LES5959指令格式:指令格式:LEA OPLEA OP目,目,OPOP源源指令功能:指令功能:将源操作数的有效地址将源操作数的有效地址EAEA送到目的操作数送到目的操作数( (指定寄存器指定寄存器) )【例【例4-214-21】LEA BXLEA BX,BP+SI BP+SI ;BP+SIBXBP+SIBX LEA DI LEA DI,TABLE TABLE ;取;取TABLE

29、TABLE的有效地址送入的有效地址送入DIDI注意注意本指令处理的是变量的地址(偏移量),不是变量的值本指令处理的是变量的地址(偏移量),不是变量的值。它等效于传送有效地址的。它等效于传送有效地址的MOVMOV指令,但指令,但MOVMOV指令必须在变指令必须在变量名前使用量名前使用OFFSETOFFSET操作符。操作符。LEA指令格式中,要求源操作数必须为内存单元地址源操作数必须为内存单元地址,目的操作数必须为一个16位的通用寄存器。6060LEA 指令与MOV 指令的区别:LEA SI,BUFF;执行后:(执行后:(SI)=0002HBUFF =0123454800FEFF段起始地址段起始地

30、址MOV SI,BUFF;执行后:(执行后:(SI)=0048HLEA SI,BUFF MOV SI,BUFF;将标号将标号BUFF的偏移地址送入寄存器中的偏移地址送入寄存器中;将标号将标号BUFF所指存储单元的内容送入所指存储单元的内容送入SI61612. 将地址指针装到DS和指定寄存器指令LDSl 什么是地址指针?什么是地址指针?(段地址:偏移地址段地址:偏移地址)l 语句格式:语句格式:LDS OPDLDS OPD,OPSOPSl 功能:功能: 把把4个字节地址指针(包括一个段地址和一个偏个字节地址指针(包括一个段地址和一个偏移地址)从源操作数指定的移地址)从源操作数指定的4个存储单元取

31、出,低地址的个存储单元取出,低地址的两字节送目的操作数,高地址的两字节送两字节送目的操作数,高地址的两字节送DS段寄存器。段寄存器。OPS高 16 位 DS(隐含)低 16 位 DEST的REG (32位, 4字节)6262l LDS或LES指令将源操作数指定的4个连续字节单元内容分别送入指令指定的寄存器以及DS或ES中。l 其中:低16位送到一个指定的字寄存器,高16位送到DS或ES中57H13H68H24H例:(例:(DS)=C000H,(,(C2480H)=1357H,(,(C2482H)=2468HDS:2480HDS:2481HDS:2482HDS:2483H 13 57 SI 24

32、 68 DSLDS SI,24806363LDS、LES演示演示64643. 将地址指针装到将地址指针装到ES和指定寄存器指令和指定寄存器指令LESl LES指令与指令与LDS指令的操作基本相同指令的操作基本相同l 语句格式:语句格式:LES OPDLES OPD,OPSOPSl 区别:区别:将源操作数所指向地址指针中的段基址将源操作数所指向地址指针中的段基址(后两个后两个字节字节)传送到传送到ES段寄存器,而不是段寄存器,而不是DS段寄存器。段寄存器。65653.2.3 标志位传送指令标志位传送指令1 1读取标志指令LAHF可完成标志位传送的指令共有可完成标志位传送的指令共有4条:条:2 2

33、设置标志指令SAHF3 3标志寄存器进栈指令标志寄存器进栈指令PUSHF4 4标志寄存器出栈指令POPFPOPF66661. 读取标志指令读取标志指令l 功能:将标志寄存器的低:将标志寄存器的低8 8位送入位送入AHAH寄存器。寄存器。l 即(即(FLAGSFLAGS)7-0AH7-0AH。读取标志指令读取标志指令LAHF被执行时,被执行时,将标志寄存器中的低将标志寄存器中的低8位传送到位传送到AH中。中。l 该指令的执行对标志位该指令的执行对标志位影响。影响。l 语句格式:LAHFLAHF67672. 设置标志指令设置标志指令SAHFl 功能:将功能:将AHAH的内容送入标志寄存器的低的内容

34、送入标志寄存器的低8 8位,高位,高8 8位不位不变。即变。即(AH) FLAGS7-0. .。l 设置标志指令设置标志指令SAHF被执行后,标志寄存器内容改变,被执行后,标志寄存器内容改变,该指令的执行该指令的执行会影响PSWl 语句格式:语句格式:SAHFSAHFl 从该指令功能可看出,从该指令功能可看出,SAHF为LAHF的逆过程。68683. 对对PSW的压入堆栈和弹出堆栈指令的压入堆栈和弹出堆栈指令l PUSHF和和POPF指令一般用在子程序和中断处理程序的指令一般用在子程序和中断处理程序的首尾,起保存主程序标志和恢复主程序标志的作用。首尾,起保存主程序标志和恢复主程序标志的作用。l

35、 PUSHF指令将标志寄存器的值压入堆栈顶部,同时,堆指令将标志寄存器的值压入堆栈顶部,同时,堆栈指针栈指针SP的值减的值减2l POPF指令的功能正好相反,此指令在执行时从堆栈中弹指令的功能正好相反,此指令在执行时从堆栈中弹出一个字送到标志寄存器中,同时堆栈指针出一个字送到标志寄存器中,同时堆栈指针SP的值加的值加2。6969l 注:LAHF/SAHF指令是寄存器AH与标志寄存器PSW的低字节之间完成的字节型数据传送。PUSHF/POPF指令是标志寄存器PSW与堆栈间进行的字型数据传送。指令SAHF/POPF将影响标志位。70703.2.4 输入输入/输出数据传送指令输出数据传送指令CPU外

36、设外设I/OI/O1 1输入指令输入指令ININ2 2输出指令输出指令OUTOUTl 直接寻址直接寻址IO指令(端口地址只能指令(端口地址只能 8 位,最多位,最多256个)个) IN AL ,50H;OUT 44H , AL; IN AX ,80H;OUT 70H , AX; l 间接寻址间接寻址IO指令(端口地址是指令(端口地址是16 位,也可位,也可8 位。)位。) MOV DX,0FFF2H IN AL ,DX 71711输入指令输入指令INl 输入指令用来从指定的外设寄存器取信息送入累加器。输入指令用来从指定的外设寄存器取信息送入累加器。它有四种形式:它有四种形式:(1)语句格式:I

37、NAL,PORT 功能:(PORT)AL(2)语句格式:INAX,PORT 功能:(PORT)AX(3)语句格式:INAL,DX 功能:(DX)AL(4)语句格式:INAX,DX 功能:(DX)AL72722. 输出指令 OUT(1)语句格式:OUT PORT,AL 功能:(AL) PORT(2)语句格式:OUT PORT,AX 功能:(AX) PORT(3)语句格式:OUT DX,AL 功能:(AL) DX(4)语句格式:OUT DX,AX 功能:(AX) DXl 输出指令用来把累加器的内容送往指定的外设存储器,输出指令用来把累加器的内容送往指定的外设存储器,它有四种形式:它有四种形式:73

38、73l间接间接OUTOUT指令(端口地址是指令(端口地址是16 16 位,也可位,也可8 8 位。)位。) MOV DX MOV DX,87FEH MOV DX 87FEH MOV DX ,80H80H MOV AL MOV AL ,40H OUT DX 40H OUT DX ,ALAL OUT DX OUT DX ,ALALl 间接间接ININ指令(端口地址是指令(端口地址是16 16 位,也可位,也可8 8 位。)位。) MOV DXMOV DX,0FFF2H0FFF2H IN AL IN AL ,DXDX 7474传送类指令小结传送类指令小结指令类型指令格式指令功能状态标志位备注O S

39、Z A P C通用数据通用数据传送传送MOV 目标,源PUSH 源POP 目标XCHG 目标,源XLAT传送字节或字字压入堆栈字弹出堆栈交换字节或字字节翻译 . . . . . . 源:R、M、立即数 目标:R、M源:R、M目标:R(CS除外)、M源:通用R、M 目标:通用R、M目标地址目标地址传送传送LEA 目标,源LDS目标,源LES目标,源装入有效地址装入数据段指针到DS装入附加段指针到ES 源:内存操作数 目标:16位通用R源:内存操作数 目标: 16位通用R源:内存操作数 目标: 16位通用R标志位传标志位传送送LAHFSAHFPUSHFPOPF把FR低字节装入AH把AH内容装入FR

40、低字节把FR内容压入堆栈从堆栈中弹出FR内容 I/O数据传数据传送送IN 累加器,端口OUT 端口,累加器输入字节或字输出字节或字 累加器:AL或AX端口:地址0255或间接寄存器DX75753.3 数据操作类指令数据操作类指令数据操作类指令包括以下几种类型的指令:数据操作类指令包括以下几种类型的指令:l 3.3.1 算术运算指令算术运算指令加法指令加法指令减法指令减法指令乘法指令乘法指令除法指令除法指令BCD码运算(十进制调整)指令码运算(十进制调整)指令*l 3.3.2 逻辑运算和移位指令逻辑运算和移位指令逻辑运算指令逻辑运算指令移位指令移位指令循环移位指令循环移位指令76763.3.1

41、算术运算指令算术运算指令1. 加法指令加法指令l 不带进位的加法 ADD格式:格式: ADD DEST,SRC; DEST+SRC DESTl 带进位的加法 ADC格式:格式: ADC DEST,SRC; DEST+SRC+CF DESTl 加 1 指令 INC格式:格式: INC DEST; DEST+1 DEST (不影响(不影响CF)注:注:SRC:n,通用通用REG,M三种寻址方式三种寻址方式 DEST:通用通用REG,M两种寻址方式两种寻址方式 立即数不能做目的操作数,立即数不能做目的操作数,DEST,SRC不能同为存储器寻址方式,不能同为存储器寻址方式, 类型要一致,段寄存器不能做

42、操作数。类型要一致,段寄存器不能做操作数。 l说明:这在三条指令运算结果将影响状态标志位,但是INC指令不影响标志CF。7777(1) 不带进位位的加法指令ADDADD用来执行两个字或两个字节的相加操作,结果放在原用来执行两个字或两个字节的相加操作,结果放在原来存放目的操作数的地方。来存放目的操作数的地方。ADDBX+DI,AXADDDI,SI例如:例如:ADDAL,50H7878(2) 带进位位的加法指令ADC指令被执行时,将进位标志指令被执行时,将进位标志CF的值加在和中。的值加在和中。例如:例如:ADCAX,SIADCDX,SI7979练习l 编写程序实现两个4字节的无符号数相加,这两个

43、数分别存放在2000H和3000H开始的存储单元中,低位在前,高位在后,进行加法运算后得到的和放入2000H开始的内存单元中。 CLCMOVSI,2000HMOVAX,SIMOVDI,3000HADDAX,DIMOVSI,AXMOVAX,SI+2ADCAX,DI+2MOVSI+2,AX8080练习l 编写程序实现两个4字节的无符号数相加,这两个数分别存放在2000H和3000H开始的存储单元中,低位在前,高位在后,进行加法运算后得到的和放入2000H开始的内存单元中。 CLCMOVSI,2000HMOVAX,SIMOVDI,3000HADDAX,DIMOVSI,AXMOVAX,SI+2ADCA

44、X,DI+2MOVSI+2,AX8181(3) 增量指令INCn INC INC只有只有1 1个操作数,指令在执行时,将操作数的内容个操作数,指令在执行时,将操作数的内容加加1 1,再送回该操作数。,再送回该操作数。INCALINCCXINCBYTE PTRBX+DI+500在编程中要注意,在编程中要注意,INC指令不影响进位标志指令不影响进位标志CF的状态。的状态。n 一般用在循环程序中一般用在循环程序中修改指针修改指针和和循环次数循环次数。例如:例如:82822. 减法指令n 除除DECDEC不影响不影响CFCF外,其他都按一般规则影响状态标志位外,其他都按一般规则影响状态标志位 。l不带

45、借位减法不带借位减法 SUB SUB 格式:格式:SUB DESTSUB DEST,SRCSRC; DEST - SRC DESTDEST - SRC DESTl 带借位减法带借位减法SBBSBB 格式:格式:SBB DESTSBB DEST,SRCSRC; DEST - SRC - CF DESTDEST - SRC - CF DESTl 减减 1 1 指令指令DECDEC 格式:格式: DEC DEST DEC DEST ; DEST - 1 DESTDEST - 1 DESTl 比较指令比较指令 CMP CMP 格式:格式: CMP DESTCMP DEST,SRCSRC; DEST -

46、 SRCDEST - SRC(不回送结果)(不回送结果)l 取补指令取补指令NEGNEG 格式:格式: NEG DEST NEG DEST ; 0-DEST DEST 0-DEST DEST8383(1) 不带借位的减法指令SUB SUBSUB完成两个字节或两个字的相减,结果存于目的地址,源完成两个字节或两个字的相减,结果存于目的地址,源地址内容不变。地址内容不变。例如:例如:SUBSUBBXBX,CXCXSUBSUBBP+2BP+2,CLCL SUBSUBALAL,2020SUBSUBWORD PTR WORD PTR DIDI,1000H1000H8484(2) 带借位的减法指令SBBSB

47、BAX,2030HSBBWORD PTR DI+2,1000Hl SBB在执行减法运算时,用被减数减去减数,并减去低位字在执行减法运算时,用被减数减去减数,并减去低位字节相减时产生的借位。节相减时产生的借位。l SBB在形式上和功能上都和在形式上和功能上都和SUB指令类似,只是指令类似,只是SBB指令在指令在执行减法运算时,还要减去执行减法运算时,还要减去CF的值。的值。例如:例如:8585(3) 减量指令减量指令DECl DEC只有只有1个操作数。个操作数。l DECDEC指令是一个单操作数指令,操作数可以是寄存器或指令是一个单操作数指令,操作数可以是寄存器或存储器操作数。存储器操作数。l

48、减减1 1指令指令DECDEC也一般用于对计数器和地址指针的调整。也一般用于对计数器和地址指针的调整。DECAXDECBLDECBYTE PTR DI+2l 功能:将目的操作数减功能:将目的操作数减1 1,结果送目的地址。,结果送目的地址。 例如:例如:8686(4) 取补指令取补指令NEGl 功能:将目的操作数的每一位求反(包括符号位)后功能:将目的操作数的每一位求反(包括符号位)后加加1 1,结果送目的地址。,结果送目的地址。NEGALNEGCXl 因为对一个操作数取补码相当于用因为对一个操作数取补码相当于用0减去此操作数,所减去此操作数,所以以NEG指令执行的也是减法操作。指令执行的也是

49、减法操作。n例如:例如:8787CMPl 功能:执行目的操作数减源操作数,结果功能:执行目的操作数减源操作数,结果只影响标志位,不送回相减的结果。CMPAX,2000HCMPAL,50H CMPAX,BX+DI+100CMPDX,DIl 一般情况,一般情况,CMP指令后面经常会有一条条件转移指令,指令后面经常会有一条条件转移指令,用来检查标志位的状态是否满足了某种关系。用来检查标志位的状态是否满足了某种关系。例如:例如:88883. 乘法指令MUL/IMULl 乘法运算是乘法运算是双操作数运算双操作数运算,但是,在指令中却只指定,但是,在指令中却只指定一个操作数,另一个操作数是一个操作数,另一

50、个操作数是隐含规定的。的。l 其中的操作数可以是寄存器操作数或存储器操作数,其中的操作数可以是寄存器操作数或存储器操作数,而隐含的为而隐含的为AL或或AX,乘积存放在AH:AL或DX:AX中。无符号数乘法 MUL SRC ;(;(AX) (AL)*(SRC)字节乘法)字节乘法 ;(;(DX,AX) (AX)*(SRC)字乘法)字乘法带符号数乘法 IMUL SRC;操作同上;操作同上指令格式:指令格式:8989乘法运算规则乘法运算规则注意注意对于字节乘法,当对于字节乘法,当AHAH为为ALAL的符号扩展时,的符号扩展时,CF=OF=0,CF=OF=0,否则否则CF=OF=1CF=OF=1;对于字

51、乘法,当;对于字乘法,当DXDX为为AXAX的符号扩展时,的符号扩展时,CF=OF=0CF=OF=0,否则,否则CF=OF=1CF=OF=1。9090乘法指令演示乘法指令演示9191乘法指令运算结果只影响状态标志乘法指令运算结果只影响状态标志CFCF、OFOF。注:注:SRCSRC只能是通用只能是通用REGREG或或M M寻址,不能是立即数。寻址,不能是立即数。只能是字节乘字节或字乘字只能是字节乘字节或字乘字存储器寻址时加类型说明,如存储器寻址时加类型说明,如 MUL BYTE PTR BXMUL BYTE PTR BX,MUL WORD PTR BXMUL WORD PTR BX92924.

52、 除法指令除法指令DIV指令格式:指令格式:DIV OPDIV OP指令功能:指令功能: 完成两个不带符号的二进制数的除法运算。完成两个不带符号的二进制数的除法运算。 指令中给出的操作数是除数指令中给出的操作数是除数,它可以是,它可以是8 8位位/16/16位通位通 用寄存器及存储器;用寄存器及存储器;被除数隐含在被除数隐含在AXAX(字节除)或(字节除)或 DX DX、AXAX(字除法)中(字除法)中。操作过程:操作过程: 字节除法字节除法 AX/ OP AL AX/ OP AL AX MOD OPAH AX MOD OPAH 字除法字除法 (DXDX、AXAX)/OP AX/OP AX (

53、DXDX、AXAX)MOD OP MOD OP DXDX9393指令格式:指令格式: IDIV OP IDIV OP指令功能:指令功能: 完成两个带符号的二进制数的除法运算。商完成两个带符号的二进制数的除法运算。商 的符号根据代数规则确定,的符号根据代数规则确定,余数的符号与被余数的符号与被 除数相同除数相同( (余数始终往余数始终往0 0靠拢靠拢) )。操作数的规定。操作数的规定同同DIVDIV指令。指令。注意注意本指令在完成字节相除时最大的商为本指令在完成字节相除时最大的商为+127+127(7FH7FH),),最小的商为最小的商为-128-128(80H80H);在完成字相除时最大的商为

54、);在完成字相除时最大的商为+32767+32767(7FFFH7FFFH),最小的商为),最小的商为-32768-32768(8000H8000H)。若商)。若商超出此范围,则将产生一个类型超出此范围,则将产生一个类型0 0的中断。的中断。9494除法运算规则除法运算规则在除法运算中,如果除数8位的,则要求被除数是16位的;如果除数是16位的,则要求被除数是32位的。带符号数除法运算中,当被除数位数不够时,可进行扩展。9595除法指令演示除法指令演示9696(3)符号扩展指令1 1)字节扩展指)字节扩展指令令2 2)字扩展指令)字扩展指令指令格式:指令格式: CBW CBW指令功能:指令功能

55、: 将将ALAL中的单字节数的符号扩展到中的单字节数的符号扩展到AHAH中。中。若若AL80HAL80H,则,则0AH0AH;若;若AL80HAL80H,则,则OFFH AHOFFH AH。指令格式:指令格式:CWDCWD指令功能:将指令功能:将AXAX中的数的符号扩展到中的数的符号扩展到DXDX中。若中。若AX8000HAX8000H, 则则0DX0DX;若;若AX8000HAX8000H,则,则OFFFFH DXOFFFFH DX。注意注意这两条符号扩展指令常常放在这两条符号扩展指令常常放在IDIVIDIV指令之前,对标指令之前,对标志位没有影响。志位没有影响。9797符号扩展指令演示符号

56、扩展指令演示98985. 十进制运算调整指令所谓未组合的十进制数所谓未组合的十进制数,就是一个字节中只包含一位十进,就是一个字节中只包含一位十进制数,也即十进制数字的制数,也即十进制数字的ASCIIASCII码的高四位置为码的高四位置为0 0以后所形以后所形成的数码。成的数码。当两个以当两个以ASCIIASCII码表示的码表示的BCDBCD数相加时,也应分两步操作数相加时,也应分两步操作: 先用先用ADDADD指令按二进制规则进行加法运算;再用指令按二进制规则进行加法运算;再用AAAAAA指令对指令对ALAL中内容进行修正。中内容进行修正。为什么要十进制调整?为什么要十进制调整? 两个未组合的

57、十进制数可以直接用ADD指令相加,但要得到正确的未组合的十进制结果,必须在加法指令以后,紧接着用一条AAA指令来加以校正,于是在AX中就可以得到正确的结果。9999(1 1)非组合)非组合BCDBCD码的加法调整指令码的加法调整指令指令格式:指令格式: AAA AAA 指令功能:指令功能: 对对ALAL中的由两个非组合中的由两个非组合BCDBCD码相加所得的结果码相加所得的结果 进行调整,并将调整后的结果存于进行调整,并将调整后的结果存于AXAX中。中。操作过程:操作过程: 如果如果ALAL的低的低4 4位表示的数大于位表示的数大于9 9或者或者AF=1,AF=1,则则 将将ALAL加加6 6

58、,AHAH加加1,1,将将AFAF和和CFCF标志置标志置1 1,清除,清除ALAL的的 高四位;高四位;否则清除否则清除ALAL的高的高4 4位以及位以及AFAF和和CFCF标志。标志。 100100以上这两条指令使用时必须紧跟在以上这两条指令使用时必须紧跟在ADDADD或或ADCADC指令之指令之后。而且,这两条指令只能对后。而且,这两条指令只能对ALAL中的结果进行调整中的结果进行调整,因此对多字节的十进制数运算,只能从低字节开,因此对多字节的十进制数运算,只能从低字节开始逐个字节的进行运算和调整。始逐个字节的进行运算和调整。101101lDAA指令会根据累加器指令会根据累加器AL中的中

59、间结果和中的中间结果和AF、CF标志标志位的状态决定对累加器位的状态决定对累加器AL的中间结果进行修正,有的中间结果进行修正,有4种修种修正情况,正情况, 即加即加00(不修正不修正)、06、60、 66(修正修正)。 102102 例:试求以下两个试求以下两个2位位BCD码之和:码之和:24H+53H; 28H+53H; 91H+85H; 45H+57H。1031033.3.2 逻辑运算和移位指令逻辑运算和移位指令 1. 逻辑运算指令逻辑运算指令n求反指令求反指令NOTNOTn逻辑乘指令逻辑乘指令ANDANDn测试指令测试指令TESTTESTn逻辑加指令逻辑加指令ORORn按位加指令按位加指

60、令XORXOR注:uAND,OR和XOR指令都是双操作数指令,即可对指令都是双操作数指令,即可对8位数操位数操作,也可对作,也可对16位数操作。位数操作。u当有两个操作数时当有两个操作数时,不能同时都为存储器操作数。不能同时都为存储器操作数。u无论是目的操作数无论是目的操作数,还是源操作数还是源操作数,都不能是段寄存器。都不能是段寄存器。104104l AND指令主要用来屏蔽掉一个数中某些位,以便对剩下的主要用来屏蔽掉一个数中某些位,以便对剩下的其它位进行某些处理。其它位进行某些处理。l 对两个操作数都是对两个操作数都是1的位,目的操作数相对应位就是的位,目的操作数相对应位就是1,其,其它各种

温馨提示

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

评论

0/150

提交评论