微机原理(第三版)第三章_第1页
微机原理(第三版)第三章_第2页
微机原理(第三版)第三章_第3页
微机原理(第三版)第三章_第4页
微机原理(第三版)第三章_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

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

文档简介

1、1第3章 8086/8088指令系统指令系统3.1 3.1 概述概述u1. 指令指令的一般格式的一般格式u操作码(操作码(Operation Code)u操作数(操作数(Operand) u源操作数(源操作数(Source Operand)u目的操作数(目的操作数(Destination Operand)操作码目的操作数,源操作数何种操作存放运算数据或结果的地址参加运算的数据或数据的地址2立即数立即数直接在指令中出现,只能做为源操作数直接在指令中出现,只能做为源操作数寻址(寻址(Addressing):):取得操作数的途径取得操作数的途径2. 操作数的类型操作数的类型寄存器操作数寄存器操作数寄

2、存器做为操作数寄存器做为操作数存储器操作数存储器操作数指令含直接或间接的地址信息,指令含直接或间接的地址信息,可能默认使用若干地址寄存器可能默认使用若干地址寄存器where?33. 指令的分类(1)数据传送类;)数据传送类;(2)算术运算类;)算术运算类;(3)逻辑运算和移位;)逻辑运算和移位;(4)串操作;)串操作;(5)控制转移类;)控制转移类;(6)处理器控制。)处理器控制。每个指令类具有多种格式,如运算有每个格式中的操作数具有多个寻址方式8086可以组合出千余种具体的指令4l在8086指令系统中,说明操作数所在地址的寻址方式可分为8种: 立即寻址立即寻址 寄存器相对寻址寄存器相对寻址

3、直接寻址直接寻址 基址基址- -变址寻址变址寻址 寄存器寻址寄存器寻址 相对的基址相对的基址- -变址寻址变址寻址 寄存器间接寻址寄存器间接寻址 隐含寻址隐含寻址3.2 80863.2 8086的的寻址寻址方式方式51. 立即寻址立即寻址Immediate AddressingMOV AX,1234H操作码低8位代码段高8位立即数注意:注意:1)立即数只可以作源操作数.2)立即数的类型与目的操作数相同MOVBL,25562. 直接寻址直接寻址Direct AddressingMOVAX, 1000h1) 地址用方括号标识,以区别于立即数;指令码直接地址默认段寄存器+EAPAMemory2) 有

4、效地址有效地址(EA, Effective Address);3) 默认的段寄存器为默认的段寄存器为DS,但也可以显式地指定其,但也可以显式地指定其他段寄存器他段寄存器称为段超越前缀称为段超越前缀;4) 偏移地址也可用符号地址来表示,如偏移地址也可用符号地址来表示,如BUFFER73. 寄存器寻址寄存器寻址RegisterMOVAX, 1234HMOVBL, 255MOVAH, AL寄存器操作数,寻址速度快指令码寄存器编码Datum寄存器84. 寄存器间接寻址寄存器间接寻址Register IndirectADDAX, BXMOVDX, SIMOVDI, AL指令码寄存器编码默认段寄存器+EA

5、PA地址信息寄存器Memoryu只有寄存器BX,BP,SI,DI 可以作为间接寻址的寄存器;u其中BP对应的是SS,其它对应DS95. 寄存器相对寻址寄存器相对寻址Register RelativeMOVBX1000H, DX指令码寄存器编码默认段寄存器+EAPA地址信息寄存器偏移地址+MemoryMOVAX, BP+8堆栈段106. 基址基址-变址寻址变址寻址Based IndexedADD cx,bxdi基址寄存器:BX , BP 变址寄存器:DI , DI指令码基址寄存器编码默认段寄存器+EAPA基址信息基址寄存器变址寄存器编码+变址信息变址寄存器Memory117. 基址基址-变址相对

6、寻址变址相对寻址 Relative Based IndexedMov ax,bxsi2000h指令码基址寄存器编码默认段寄存器+EAPA基址信息基址寄存器变址寄存器编码+变址信息Memory偏移地址码变址寄存器12课堂练习:1. 判断下列指令操作数属于哪种寻址方式.MOV AX, DS: BP DIMOVAL,AMOV CX, TABLESI ;TABLE 为字符常数MOV 3F00H, AXMOV AX, BX BP MOV ES: AX, DX MOV AX, DX2. 下列指令格式正确吗?课堂练习:1. 已知8086中一些寄存器的内容和一些存储单元的内容如图,试指出下列指令执行后,AX中

7、的内容?12H34H56H78H 2AH4CHB7H65H30100H30101H30102H30103H31200H31201H31202H31203H0100H0002H3000HBXSIDS1)MOV AX, 1200H2)MOV AX, BXSI3) MOV AX, 1100HBX4)MOV AX, 1100HBX+SI143.3 8086/80883.3 8086/8088指令系统指令系统学习和应用指令需要关注的问题:n 指令的功能类别,n 具体格式,寻址方式限制n 执行时间,指令的字节数(时空)n 指令执行对 F 寄存器的影响n 是否影响堆栈n 是否需要特定的寄存器实现配合 153

8、.3.1 数据传送指令 细分,如下四种:n 通用传送(*)n 目标地址传送n 标志传送n 输入输出(*)立即数立即数寄存器寄存器存储器存储器I/OI/O16(1) MOV dest,src; destsrc 可实现:1.通用传送指令通用传送指令i.寄存器之间传送(除寄存器之间传送(除CS 和和 IP) 例例: MOV: MOV CL CL,DL MOV DSDL MOV DS,AXAX MOV MOV AX AX,BX MOV AXBX MOV AX,ESESii.寄存器(除寄存器(除CS、IP)与存储器之间传送)与存储器之间传送 例:例: MOV AX MOV AX ,SI MOV 1000

9、HSI MOV 1000H,ALAL MOV DS MOV DS,DATASI+BX DATASI+BX MOV DESTBP+DI MOV DESTBP+DI ,ESES17uMOV指令使用规则: 1、源操作数与目的操作数类型要一致。2、不能在两个存储单元之间直接传送。MOV 1000H ,2000H (某些单片机内部RAM可以)3、立即数不能送段寄存器。 MOV DS ,300H 3、段寄存器之间不能传送。 MOV DS ,ES5、CS、IP不能做目的操作数。 MOV CS ,AX6 6、立即数不允许作为目的操作数原则:逻辑上合理,有必要,使用频率高,效率高iii.iii.立即数送通用立即

10、数送通用REGREG或存储器或存储器 例:例:MOV CL MOV CL ,4 4 MOV AX MOV AX ,03FFH03FFH MOV BYTE PTR BX MOV BYTE PTR BX ,5 5 MOV WORD PTR 100H MOV WORD PTR 100H ,5678H5678H18u几个不能直接传送的解决办法: (用AX等寄存器作桥梁)l 存储器存储器存储器:存储器: MOV AX, 1000H MOV 2000H ,AXl 段寄存器段寄存器段寄存器:段寄存器: MOV AX,DS MOV ES,AXl 段寄存器段寄存器立即数:立即数: MOV AX,DATA MOV

11、 DS,AX19例:例:指出下列指令的错误指出下列指令的错误: MOV BX, DI MOV AH, CX MOV AX, SIDI MOV CS,0 MOV DS, 100 ; MOV 1000H, 23H MOV IP, 2000H ; MOV AX, 0100H+BX+BP20练习:n已知ES=3000H, DS=2000H,BX=5006H,SI=2008H,指令MOV AX,BXSI中,源操作数的寻址方式是 ,相应的物理地址是 。 21 MOV SI ,OFFSET MEM1 MOV DI ,OFFEST MEM2 MOV CX,200NEXT: MOV AL ,SI MOV DI

12、,AL INC SI INC DI DEC CX JNZ NEXT HLTMEM1, MEM2是符号地址(变量)先定义后使用。在这是字节传送, 定义为字节变量应用举例:应用举例:把内存中首地址为把内存中首地址为MEM1MEM1的的200200个字节个字节送到首地址为送到首地址为MEM2MEM2的区域中。的区域中。200MEM1MEM2.22 SS SS指示堆栈段的段基址,堆栈指针SPSP始终指向堆栈的顶部,SP的初值规定了所用堆栈区的大小。堆栈的最高地址叫栈底。 2 堆栈操作指令堆栈操作指令堆栈堆栈LIFO方式工作、被分配的连续存储区域;方式工作、被分配的连续存储区域;8086的堆栈的堆栈以字

13、为单位以字为单位进行压入进行压入/弹出操作。弹出操作。栈底栈底低地址低地址高地址高地址SPSS堆栈段堆栈段进栈方向退栈方向栈顶栈顶23 压栈指令压栈指令格式:格式: PUSH src ; 源操作数可为源操作数可为REG、M,目的隐含,目的隐含SP例:例:PUSH AX,设(AX)=1020H(SS)=1050H,(SP)=0004H操作:操作: (SP)-1高字节AH, (SP)-2低字节AL (SP)(SP)- 2进栈方向执行后执行后10500H10501H10502H10503H10504H栈基址1020栈顶执行前执行前栈基址栈顶栈底AX10 2010500H10501H10502H105

14、03H10504H24 弹出指令弹出指令格式:格式: POP dest ;目的操作数可为;目的操作数可为REG、M例:例:POP BX,设(SS)=1050H,(SP)=0002H操作:操作:(BL)SP (BH)SP+1 (SP)(SP)+210 20执行前栈基址栈基址栈顶栈顶栈底栈底1020BX10500H10501H10502H10503H10504H执行后10500H10501H10502H10503H10504H栈基址栈基址栈顶栈顶出栈方向出栈方向2580868086堆栈指令使用时应注意几点:堆栈指令使用时应注意几点:堆栈操作总是按堆栈操作总是按字字进行进行不能从栈顶弹出一个字给不能

15、从栈顶弹出一个字给CSCS堆栈指针为堆栈指针为SS:SPSS:SP,SPSP永远指向栈顶永远指向栈顶入栈时入栈时SPSP先自动先自动-2,-2,出栈后出栈后SPSP自动增量自动增量+2+226课堂练习课堂练习:已知已知 (SS)=0A2F0H, (SP)=00C0H, (AX)=8B31H, (CX)=0F213H, 执行指令执行指令 PUSH AX PUSH CX POP AX (SP)=? (AX)=? 27格式:XCHG dest ,src ;交换两操作数的内容 通用REG 通用REG 要求: M M u 两操作数中必须有一个在寄存器中;u 操作数不能为段寄存器和立即数;u 源和目地操作

16、数类型要一致。举例: XCHGXCHGAXAX,BXBX XCHG XCHG20002000,CLCL XCHG AL, BL(3)交换指令XCHG28(4)(4)查表指令查表指令XLATXLAT 执行的操作:AL(BX)+(AL) 又叫查表转换指令,它可根据表项序号查出表中对应代码的内容。执行时先将表的首地址(偏移地址)送到BX中,表项序号存于AL中。 29303132.394142.4546.42000H+042000H+110129ABEF十六进制数十六进制数ASCIIASCII码表码表存储器例如:例如:内存数据段有一张内存数据段有一张1616进制数的进制数的ASCIIASCII码表,码

17、表, ASCIIASCII表在表在DSDS段,并假段,并假设设(DS) =4000H(DS) =4000H。设表。设表首地址偏移量是首地址偏移量是2000H2000H,如欲查出表中第如欲查出表中第1111个个代码(代码序号从代码(代码序号从0 0开开始)即十六进制数始)即十六进制数B B的的ASCIIASCII码。码。30则可用如下几条指令实现则可用如下几条指令实现:MOV ALMOV AL,0BH0BHXALTXALT注意:转换表长度最大为注意:转换表长度最大为256256个表项个表项( (字节字节) )。31(3)字节/字扩展格式:CBW ; combine byte to wordCWD

18、 ; combine word to double wordCBW隐含的源操作数AL;结果存AXCWD隐含的源操作数AX;结果存DX322. 输入输出(I/O)指令功能: CPU访问I/O端口只用累加器AL或AX来传送信息。外设外设I/OI/OCPU(1)(1)输入指令输入指令格式格式: IN acc,PORT : IN acc,PORT ;PORT;PORT端口号端口号0 0255255 例例: : 1 1)IN ALIN AL,80H 80H ;(AL;(AL)(80H(80H端口端口) ) 2) IN AX,80HIN AX,80H ;(AH) (81H ;(AH) (81H端口端口);

19、 (AL); (AL)(80H(80H端口端口) ) 3)MOV DX, 03B0HMOV DX, 03B0H IN AL IN AL,DX ;(ALDX ;(AL)(DX)(DX)IN acc,DX ;DX表示的端口范围达表示的端口范围达64K33例:例:OUT 68HOUT 68H,AX AX ;(69H;(69H,68H68H)(AXAX)(2) 输出指令OUT格式: OUT port,acc 或 OUT DX,acc MOV DX, 220H OUT DX,AL ;(DX)(AL)34例例: 已知已知 (AX)=8060H,(DX)= 03F8H, 端口端口PORT1的地址是的地址是4

20、8H,内容是内容是40H, 请指出下请指出下列指令执行的结果列指令执行的结果. 1) OUT DX, AL 2) IN AL, PORT1353.3.2 3.3.2 算术运算指令算术运算指令指令本身并不区分无符号数和带符号数:l无符号数可用CF标志判断是否溢出;l带符号数可用OF标志判断是否溢出;l带符号数的溢出是一种出错状态,在运算过程中应当避免。无符号数的溢出可看作是向更高位的进位。361) 不带进位的加法指令 ADD destADD dest,srcsrc ; dest dest+src; dest dest+src1.加法指令srcsrc:n,通用,通用REG,M三种寻址方式三种寻址方

21、式 dest:通用通用REG,M两种寻址方式两种寻址方式n实例:实例: ADD CL ADD CL ,10 10 ; ADD SIADD SI,BX+20HBX+20H; ADD DIADD DI,200H ; 200H ; 37例:例: MOV AL, 7EH ADD AL, 5BH对标志位的影响:对标志位的影响:CF=0,AF=1OF=1,PF=0SF=1ZF=038n实例:实例: ADC AXADC AX,BX BX ; ADC BX + 200HADC BX + 200H,CL CL ;2) 2) 带进位的加法指令带进位的加法指令 ADC dest,srcADC dest,src ;

22、dest dest+src+CF; dest dest+src+CF3) 3) 加加1 1指令指令 INC destINC dest ; dest+1 dest( ; dest+1 dest( 不影响不影响 CF,CF,常用循环指令中修改常用循环指令中修改 指针或循环次数指针或循环次数 )39例:已知数据如图,低位在前, 高位在后.1) 将其看作两个4字节(双倍精度字 )的无符号数相加: 28164148H+84522258=?结果存放在SUM开始的存储区。lADC指令用于多字节加法运算中 程序段如下:程序段如下:MOV AXMOV AX,NUM1NUM1MOV BX,NUM2MOV BX,N

23、UM2ADD AXADD AX,BX BX ; ;低字相加低字相加MOV SUM, AXMOV SUM, AXMOV AXMOV AX,NUM1+2NUM1+2MOV BXMOV BX,NUM2+2NUM2+2ADC AXADC AX,BX BX ; ;高字相加高字相加 ; ;包括低字的进位包括低字的进位MOV SUM+2, AXMOV SUM+2, AX数据段16H28H58H22H48H41H52H84H被加数加数NUM1NUM2SUM40 MOV CX,4 LEA SI,NUM1 LEA DI,NUM2 LEA BX,SUM 字节运算:字节运算:AGAIN:MOV AL,SI ADC A

24、L,DI MOV BX,AL CLC INC SI INC DI INC BX LOOP AGAIN41思考题:2)将其看作从NUM1单元开始的连续8个字节数据相加,和为16位数,放在SUM和SUM+1单元中.42(1) (1) 不考虑借位的减法指令不考虑借位的减法指令SUBSUB SUB dest, srcSUB dest, src ; dest(dest)-(src)dest(dest)-(src)2. 2. 减法指令减法指令(2) (2) 考虑借位的减法指令考虑借位的减法指令SBBSBB(主要用于多字节的减法)(主要用于多字节的减法) SBB dest, srcSBB dest, src

25、 ;dest(dest)-(src)-(CF)dest(dest)-(src)-(CF)(3) (3) 减减1 1指令指令DECDEC DEC destDEC dest ;dest(dest)-1,;dest(dest)-1,不影响不影响CFCFu例:例: SUB ALSUB AL,60H 60H ; SUB BX+20HSUB BX+20H,DXDX SBB AX SBB AX,CX CX ; SBB WORD PTRSISBB WORD PTRSI,2080H2080H DEC CL DEC CL ; DEC BYTE PTRDI+2DEC BYTE PTRDI+243(4) (4) 求补

26、指令求补指令NEGNEG: NEG oprNEG opr ; opr 0-(opr)opr 0-(opr) 对一个操作数取补码相当于用对一个操作数取补码相当于用0 0减去此操作数,减去此操作数,故利用故利用NEGNEG指令可得到负数的绝对值。指令可得到负数的绝对值。(5) (5) 比较指令比较指令CMPCMP CMP dest, srcCMP dest, src ;(dest)-(src)(dest)-(src) CMP CMP也是执行两个操作数相减也是执行两个操作数相减, ,但结果不送目标但结果不送目标操作数操作数, ,其结果只反映在标志位上。其结果只反映在标志位上。例:例: CMP ALC

27、MP AL,0AH0AH; CMP DICMP DI,BX+03BX+0344根据标志位来判断比较的结果比较的是两个有符号数,须考虑两个数是同号或异号。比较的是两个有符号数,须考虑两个数是同号或异号。 1)1)根据根据ZF判断两个数是否相等。若判断两个数是否相等。若ZF=1,=1,则两数相等。则两数相等。2)2)若两个数不相等若两个数不相等, ,则分两种情况考虑则分两种情况考虑: : 比较的是两个无符号数比较的是两个无符号数 若若CF=0,=0,则则destdestsrc;src; 若若CF=1,=1,则则destdestsrcsrc。若若OF SF=0=0,则,则destdestsrc; s

28、rc; 若若OF SF=1=1,则,则destdestsrcsrc。但这样来使用标志位太繁琐,所以但这样来使用标志位太繁琐,所以80868086指令系统中的指令系统中的条件转移指令自动确定应该用哪些标志判断。条件转移指令自动确定应该用哪些标志判断。45n例:在内存中从DATA单元开始两个8位数,试比较大小,将大者送到MAX单元。 MOV AL,DATA CMP AL,DATA+1v若是带符号数 JG 大于转移 JNC DONE ;判断;判断CF分支,或用分支,或用JA指指令令 MOV AL,DATA+1DONE: MOV MAX,AL 46进行乘法时:进行乘法时:8 8位位* *8 8位位16

29、16位乘积,位乘积, 1616位位* *1616位位3232位乘积位乘积隐含的操作数为隐含的操作数为AXAX,DXDX3. 乘法指令(1) (1) 无符号数的乘法指令无符号数的乘法指令 MUL src ;字节操作数;字节操作数 (AX) (AL) (src) ;字操作数;字操作数 (DX, AX) (AX) (src)(2) (2) 有符号数乘法指令有符号数乘法指令 IMUL src IMUL src ;要求两操作数均为;要求两操作数均为有符号数有符号数例:例: MULMULBL BL ;(AL)(AL)(BL),(BL),乘积在乘积在AXAX中中MUL MUL CX CX ;(AX)(AX)

30、(CX),(CX),乘积在乘积在DX,AXDX,AX中中IMUL BL IMUL BL ;(AX)(AL)(AX)(AL)(BL)(BL)MUL MUL BYTE PTRBXBYTE PTRBX474. 除法指令进行除法时:进行除法时:1616位位/8/8位位8 8位商位商 3232位位/16/16位位1616位商位商隐含的操作数为隐含的操作数为AXAX,DXDX(1)(1)无符号数除法指令无符号数除法指令 DIV src DIV src ;字节操作;字节操作(AX)/(SRC)(AX)/(SRC), ;(;(ALAL)商,商,(AH)(AH)余数余数 ;字操作;字操作(DX, AX)/(SR

31、C)(DX, AX)/(SRC), ;(;(AXAX)商,商,(DX) (DX) 余数余数 (2) (2) 有符号数除法指令有符号数除法指令 IDIV src IDIV src 例:例: DIV DIV WORD PTRBX WORD PTRBX DIV CL DIV CL485.BCD码运算的十进制调整指令n压缩BCD码指令: DAA(加法调整)、DAS(减法调整)n非压缩BCD码指令: AAA(加法调整)、AAS(减法调整) AAM(乘法调整)、AAD(除法调整)1、这类指令都是无操作数指令,隐含的源操作数是AL/AX,目的是AL/AX。2、先执行二进制运算指令如ADD、SUB、MUL等(

32、除法除外),并将结果放AL(AX),然后紧接着执行BCD码指令。49l指令操作指令操作( (调整方法调整方法) ): 若若ALAL的低的低4 4位位9 9AF=1 AF=1 则则(AL)(AL)+6(AL)(AL)+6,AF1AF1 若若ALAL的高的高4 4位位9 9CF=1 CF=1 则则(AL)(AL)+60H(AL)(AL)+60H,CF1CF1 0110 1000 0110 1000 6868 + 0101 1001 + 0101 1001 5959 1100 0001 1100 0001 + 0110 0110 + 0110 0110 +66+66 1 1 0010 0111001

33、0 0111压缩压缩BCDBCD码加法调整码加法调整DAA例:例:压缩压缩BCD码码 68H+59H=? MOV AL,68H MOV BL,59H ADD AL,BL DAA 最后结果为:最后结果为: (AL)=27H, CF=1, AF=150例例: :已知数据如图,已知数据如图,从从NUM1和和NUM2开始的压缩开始的压缩BCD码相加,和放在码相加,和放在SUM和和SUM+1单元中单元中. MOV CX,4 LEA SI,NUM1 LEA DI,NUM2 LEA BX,SUM CLCAGAIN:MOV AL,SI ADC AL,DI DAA MOV BX,AL INC SI INC DI

34、 INC BX LOOP AGAIN数据段16H28H58H22H48H41H52H84H被加数加数NUM1NUM2SUM513.3.3 逻辑运算和位移指令1.1. 逻辑运算指令逻辑运算指令 运算规则:按位操作,无进运算规则:按位操作,无进/ /借位借位 对标志位的影响对标志位的影响( (除除NOTNOT指令外指令外) ): CF OF SF ZF PF AF 0 0 * * * 无定义无定义 根据运算结果设置根据运算结果设置 AND DESTAND DEST,SRCSRC ;“与与”两位都是两位都是1 1,结,结果为果为1 1, 否则为否则为0,0,用于屏蔽。用于屏蔽。52例1:保留AL中低

35、4位,高4位清0。例3:测试AL的bit7,bit5,bit2是否都是1。 AND AL,0FH例2:AL中有字符az, 将其转换成大写。AND AL,01011111BAND AL, 10100100BCMP AL, 10100100B JZ MATCHNOTMATCH: JMP CONTINUEMATCH: CONTINUE:53OR DEST,SRC ; “或或”两位都是两位都是0,结果为,结果为0, ; 否则为否则为 1 。用于置位。用于置位。例例1 1:把AL中的非压缩BCD码变成相应十进制数的ASCII码。例1:把AX寄存器清零OR AL, 30H例例2:把:把AL的第5位置为1O

36、R AL, 00100000B XOR DEST,SRC ; “异或异或 ”,两位相同为两位相同为0 ,两位不,两位不 ; 同为同为1 。指定位取反或自身清。指定位取反或自身清0例2:把DH的bit4,3变反XOR DH,18H MOV AX,0 XOR AX,AX AND AX,0 SUB AX,AX54NOT DEST ; 按位取反。 测试指令TEST ; 操作与AND指令类似,但不将”与”的结果送回,只影响标志位。常用于位测试,与条件转移指令一起用。例:测试AL的内容是否为负数。 TEST AL,80H ;检查AL中D7=1? JNZ MINUS ;是1(负数),转MINUS ;否则为正

37、数MINUS:552.移位指令(1)(1)非循环移位指令非循环移位指令 算术左移指令 SAL( (Shift Arithmetic Left)Shift Arithmetic Left) 算术右移指令 SAR( (Shift Arithmetic Right)Shift Arithmetic Right) 逻辑左移指令 SHL( (Shift Left)Shift Left) 逻辑右移指令 SHR( (Shift Right)Shift Right) 这4条指令的格式相同 SAL mem/reg,CL ;移位位数大于移位位数大于1时时1 ;移位位数等于移位位数等于1时时56移位指令执行的操作如

38、下图所示:最低位最高位最低位最高位CF(c)逻辑右移SHR0CF(b)算术右移SAR最低位最高位CF0(a)算术/逻辑左移SAL/SHL57u移位1位时,位数1直接写在指令寄存器中;u移位位数多于1时,事先用指令将其放在CL寄存器中。例如: MOV CL,4 SHR AL,CL ;AL中的内容右移4位u 影响C,P,S,Z,O标志。58例:把AL中的数x乘10因为10=8+2=23+21,所以可用移位实现乘10操作。程序如下:MOV CL,3SAL AL,1 ; 2xMOV AH,AL SAL AL,1 ; 4x SAL AL,1 ; 8x ADD AL,AH ; 8x+2x = 10 x59

39、循环左移指令 ROL循环右移指令 ROR带进位位的循环左移指令 RCL带进位位的循环右移指令 RCR(2)循环移位指令60循环移位指令功能示意图循环移位指令功能示意图最低位(c) RCL最低位(d) RCR最低位最高位CF(a) ROL最高位CF最低位最高位CF(b) ROR最高位CF61循环移位举例:例1:将AL的高4位与低4位互换。 MOV CL,4 ROL AL,CL例2:一双字,四字节:高字节放DX中,低字节放AX中,若左移一位 SAL AX,1 RCL DX,1例3: 可实现对数据的检测: 如检测CF中0或1的个数.623.3.5 程序控制指令控制转移指令分为n转移指令转移指令n调用

40、和返回指令调用和返回指令n循环控制指令循环控制指令n中断指令中断指令63n 转移指令的实质: 改变PC,在8086系列,即(CS:IP)的内容。n 转移指令分为转移指令分为无条件转移无条件转移和和条件转移条件转移。 无条件转移的寻址方式较多,转移范围大;无条件转移的寻址方式较多,转移范围大; 条件转移的测试条件丰富,转移范围小。条件转移的测试条件丰富,转移范围小。1.转移指令64例:程序片段例:程序片段CODE 1 SEGMENT - JMP AGAIN -JMPfar goonAGAIN: - -CODE 1 ENDS CODE 2 SEGMENT - goon: - -CODE 2 END

41、Sn程序片段中,程序片段中,JMP AGAIN,为段内转,为段内转移,其标号在同一段移,其标号在同一段内;内;nJMP far goon为段为段间转移,其的标号在间转移,其的标号在另一个程序段中。另一个程序段中。n标号标号代表地址,也代表地址,也称为称为符号地址符号地址,可由,可由软件工具将其转化为软件工具将其转化为逻辑地址逻辑地址。(1) 无条件转移指令 - JMPSEGMENT,ENDS是汇编语言程序中的伪指令(是汇编语言程序中的伪指令(Directives)65 直接转移:直接给出目标地址直接转移:直接给出目标地址/相对的位移量相对的位移量 间接转移:间接给出目标地址的寻址方式间接转移:

42、间接给出目标地址的寻址方式段内转移:目标地址在同一段内,只改变段内转移:目标地址在同一段内,只改变IP段间转移:目标地址不在同一段内,改变段间转移:目标地址不在同一段内,改变CS:IP根据JMP的远近根据目标地址的寻址方式66段内直接短转移nJMP SHORT LABLE nLABLE代表目标地址n2字节指令编码:n机器码EBn8位偏移量eEBe.源地址目标地址e=目标地址-源地址源地址=指令存储地址+2n执行时e带符号扩展再加到IP中,于是下一指令周期从目标地址处执行。转移范围?67段内直接转移nJMP NEAR LABLE nLABLE代表目标地址n3字节指令编码:n机器码E9n16位偏移

43、量eE9e_H.源地址目标地址e_Le=目标地址-源地址源地址=指令存储地址+3n执行时e加到IP中,于是下一指令周期从目标地址处执行。转移范围?68段间直接转移nJMP FAR LABLEnLABLE是另一段中的符号地址n5字节编码n机器码EAn16位段地址n16位偏移量EAoffset_H 01seg_L FFseg_H FF.offset_L 00FFFF0100CS IP目标地址n执行CS:IP被更新为目标地址,于是下一指令周期从目标地址处执行。转移范围?例如 LABLE = FFFF:000069段内间接转移nJMP OPERANDnOPERAND寄存器操作数或存储器操作数,16位n

44、目标地址与寻址方式有关n例:JMPBXIP(BX) 实现转移n例:JMPWORD PTR BX+DI 通过寻址,在存储器中获得一个字,用于更新IP,实现转移70段内间接转移nJMP OPERANDnOPERAND为存储器操作数,32位n按寻址方式在存储器中获得一个双字,低16位用于更新IP,高16位用于更新CS,从而实现转移n例:JMP DWORD PTR BX 设(DS)=3000H, (BX)=3000H, (33000H)(33003)依次为0BH,20H,10H,80H 试分析转移过程和目标地址n解:PA = (DS)*16+(BX) =33000H IP 200BH,CS8010H

45、执行后,新的目标地址 8010:200BH71(2)条件转移指令 Jxx labelnXXXX为测试条件,根据某标志位或几为测试条件,根据某标志位或几个标志位的组合,决定是否进行转个标志位的组合,决定是否进行转移;移;n形成程序分支(形成程序分支(BranchBranch););n一律为短转移,一律为短转移,转移范围为-128+127n结合无条件转移,可以转移得更远结合无条件转移,可以转移得更远72单个标志做判断条件JC JNC JE / JZ JNE /JNZJS JNS JO JNO JPJNP ZFSFOFPFJCXZ (CX = 0 转)转)CF 无符号数条件转移(测试标志无符号数条件

46、转移(测试标志 CF、ZF)JB JNB JA JNA 判断有符号数的大小判断有符号数的大小(测试测试 SF、OF、ZF) JL JNL JG JNG732.循环控制指令n指令格式1:LOOP labeln循环次数先置于CX中;nLabel标识一个循环的开始地址nLOOP指令确定循环继续或结束 操作:CX (CX)-1;若(CX)0,则转至label处执行;否则循环结束,执行LOOP后面的指令;相当于相当于 DEC CX DEC CX 和和 JNZ labelJNZ label两条指令两条指令nlabel距离本指令-128+127的范围之内。74n指令格式2: LOOPZ label 操作:操作:(CX)-1CX, (CX) 0继续循环;继续循环;但但ZF1可提前结束循环。可提前结束循环。n指令格式3: LOOPNZ label 操作:操作:(CX)-1CX, (CX) 0继续循环,继续循环,但但ZF=1可提前结束循环。可提前结束循环。n循环中的比较指令等,影响循环中的比较指令等,影响ZF标志;标志; 例如,在数据块中寻找某个关键字,找到后例如,在数据块中寻找某个关键字,找到后可以提前结束循环。可以提前结束循环。75例:例: 在以在以DATADATA为首地址的内存数据段中,存放有为首地址的内存数据段中,存放有2002

温馨提示

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

最新文档

评论

0/150

提交评论