




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一讲第三章 指令系统-寻址方式回顾: 8086/8088的内部结构和寄存器,地址分段的概念,8086/8088的工作过程。重点和纲要:指令系统-寻址方式。有关寻址的概念;6种基本的寻址方式及有效地址的计算。教学方法、实施步骤时间分配教学手段回 顾5”×2板书计算机投影仪多媒体课件等讲 授40” ×2提 问3” ×2小 结2” ×2讲授内容:3.1 8086/8088寻址方式首先,简单讲述一下指令的一般格式:操作码操作数操作数计算机中的指令由操作码字段和操作数字段组成。操作码:指计算机所要执行的操作,或称为指出操作类型,是一种助记符。操作数:指在指令执行
2、操作的过程中所需要的操作数。该字段除可以是操作数本身外,也可以是操作数地址或是地址的一部分,还可以是指向操作数地址的指针或其它有关操作数的信息。寻址方式就是指令中用于说明操作数所在地址的方法,或者说是寻找操作数有效地址的方法。80868088的基本寻址方式有六种。1立即寻址所提供的操作数直接包含在指令中。它紧跟在操作码的后面,与操作码一起放在代码段区域中。如图所示。例如:MOV AX,3000H立即数可以是8位的,也可以是16位的。若是16位的,则存储时低位在前,高位在后。立即寻址主要用来给寄存器或存储器赋初值。2直接寻址操作数地址的16位偏移量直接包含在指令中。它与操作码起存放在代码段区域,
3、操作数一般在数据段区域中,它的地址为数据段寄存器DS加上这16位地址偏移量。如图2-2所示。例如: MOV AX,DS:2000H;图22(对DS来讲可以省略成 MOV AX,2000H, 系统默认为数据段)这种寻址方法是以数据段的地址为基础,可在多达64KB的范围内寻找操作数。8086/8088中允许段超越,即还允许操作数在以代码段、堆栈段或附加段为基准的区域中。此时只要在指令中指明是段超越的,则16位地址偏移量可以与CS或SS或ES相加,作为操作数的地址。MOV AX,2000H ;数据段MOV BX,ES:3000H ;段超越,操作数在附加段即绝对地址(ES)163000H3寄存器寻址操
4、作数包含在CPU的内部寄存器中,如寄存器AX、BX、CX、DX等。例如:MOV DS,AXMOV AL,BH4寄存器间接寻址操作数是在存储器中,但是,操作数地址的16位偏移量包含在以下四个寄存器SI、DI、BP、BX之一中。可以分成两种情况:(1) 以SI、DI、BX间接寻址,则通常操作数在现行数据段区域中,即数据段寄存器(DS)16加上SI、DI、BX中的16位偏移量,为操作数的地址, 例如: MOV AX, SI 操作数地址是:(DS)*16+(SI)(2) 以寄存器BP间接寻址,则操作数在堆栈段区域中。即堆栈段寄存器(SS)16与BP的内容相加作为操作数的地址, 例如:MOV AX,BP
5、 操作数地址是:(SS)*16+(BP)若在指令中规定是段超越的,则BP的内容也可以与其它的段寄存器相加,形成操作数地址。例如: MOV AX,DS:BP 操作数地址是:(DS)*16+(BP)5变址寻址由指定的寄存器内容,加上指令中给出的8位或16位偏移量(当然要由一个段寄存器作为地址基准)作为操作数的偏移地址。(操作数在存贮器中)可以作为寄存器变址寻址的四个寄存器是SI、DI、BX、BP。若用SI、DI和BX作为变址,则与数据段寄存器相加,形成操作数的地址即默认在数据段;若用BP变址,则与堆栈段寄存器相加,形成操作数的地址即默认在堆栈段例如: MOV AX,COUNTSI;操作数地址是:(
6、DS)*16+(SI)+COUNT但是,只要在指令中指定是段超越的,则可以用别的段寄存器作为地址基准。6基址加变址寻址把BX和BP看成是基址寄存器,把SI、DI看着是变址寄存器,把一个基址寄存器(BX或BP)的内容加上一个变址寄存器(SI或DI)的内容,再加上指令中指定的8位或16位偏移量(当然要以一个段寄存器作为地址基准)作为操作数的偏移地址,如图所示。操作数在存贮器中,其偏移地址由(基址寄存器)(变址寄存器)相对偏移量形成基址寄存器BX:数据段、BP:堆栈段;变址寄存器SI、DI。例如:MOV AX,BXSI 或 MOV AX,BX+SI也可放置一个相对偏移量,如COUNT 、MASK等等
7、,用于表示相对寻址。MOV AX,MASKBXSI MOV BH,COUNTDIBP;MOV BH,COUNTBP+DI² 若用BX作为基地址,则操作数在数据段区域² 若用BP作为基地址,则操作数在堆栈段区域但若在指令中规定段是超越的,则可用其它段寄存器作为地址基准。 P28 表2-1 段寄存器使用的基本约定访问存储器类型默认段寄存器可指定段寄存器段内偏移地址来源取指令码CS无IP堆栈操作SS无SP串操作源地址DSCS、ES、SSSI串操作目的地址ES无DIBP用作基址寄存器SSCS、DS、ES根据寻址方式求得有效地址一般数据存取DSCS、ES、SS根据寻址方式求得有效地址
8、习题与思考:1假定DS=2000H,ES=2100H,SS=1500H,SI=00A0H,BX=0100H,BP=0010H,数据变量VAL的偏移地址为0050H,请指出下列指令源操作数是什么寻址方式?其物理地址是多少?(1)MOV AX,0ABH(2)MOVAX,100H(3)MOVAX,VAL(4)MOVBX,SI(5)MOVAL,VALBX(6)MOVCL,BXSI(7)MOVVALSI,BX(8)MOVBPSI,1002已知SS=0FFA0H,SP=00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令,试画出堆栈区和SP内容变化的过程示意图。(标出
9、存储单元的地址)第二讲 3.2 指令系统-数据传输、算术运算回顾:8086/8088的内部结构和寄存器,8086/8088的工作过程。8086/8088的寻址方式及操作数地址的计算。重点和纲要:要求学生了解指令的功能,掌握数据传送类,算术运算类指令的使用方法。(掌握指令内涵,会用)教学方法、实施步骤时间分配教学手段回 顾5”×2板书计算机投影仪多媒体课件等讲 授40” ×2提 问3” ×2小 结2” ×2讲授内容:3.2 8086/8088 指令系统80868088的指令系统可以分为以下六个功能组。1数据传送(Data Transter) 2算术运算(A
10、rithmetic) 3逻辑运算(Logic) 4串操作(String menipulation) 5程序控制(Program Control) 6处理器控制(Processor Control)一、数据传送指令主要介绍 MOV,XCHG、堆栈和地址传送指令。1数据传送MOV指令一般格式:MOV OPRD1,OPRD2MOV 是操作码,OPRD1和OPRD2分别是目的操作数和源操作数。功能:完成数据传送具体来说,一条数据传送指令能实现:CPU内部寄存器之间数据的任意传送(除了代码段寄存器CS和指令指针IP以外)。MOV AL,BL;字节传送MOV CX,BX;字传送MOV DS,BX立即数传送
11、至CPU内部的通用寄存器组(即AX、 BX、CX、DX、BP、SP、SI、DI),MOV CL,4MOV AX,03FFHMOV SI,057BHCPU内部寄存器(除了CS和IP以外)与存储器(所有寻址方式)之间的数据传送。MOV AL,BUFFERMOV AX,SIMOV DI,CXMOV SI,BLOCKBPMOV DS,DATASI+BXMOV DESTBP+DI,ES 能实现用立即数给存储单元赋值例如:MOV 2000H,25HMOV SI,35H对于MOV 指令应注意几个问题:存储器传送指令中,不允许对CS和IP进行操作;两个操作数中,除立即寻址之外必须有一个为寄存器寻址方式,即两个
12、存储器操作数之间不允许直接进行信息传送;如我们需要把地址(即段内的地址偏移量)为AREAl的存储单元的内容,传送至同一段内的地址为AREA2的存储单元中去,MOV指令不能直接完成这样的传送,但我们可以用CPU内部寄存器为桥梁来完成这样的传送: MOV AL,AREAl MOV AREA2,AL两个段寄存器之间不能直接传送信息,也不允许用立即寻址方式为段寄存器赋初值;如:MOVAX,0;MOVDS,AX目的操作数,不能用立即寻址方式。2堆栈指令 (简述堆栈的概念及存取特点,如先进后出)包括入栈(PUSH)和出栈(POP)指令两类。仅能进行字运算。(操作数不能是立即数) 入栈指令PUSH一般格式:
13、PUSH OPRD源操作数可以是CPU内部的16位通用寄存器、段寄存器(CS除外)和内存操作数(所有寻址方式)。入栈操作对象必须是16位数。功能:将数据压入堆栈执行步骤为:SP=SP-2;SP=操作数低8位;SP+1= 操作数高8位例如:PUSH BX执行过程为:SP=SP-1,SP=BH;SP=SP-1,SP=BL,如图2-8所示。 出栈指令POP一般格式:POP OPRD功能:将数据弹出堆栈对指令执行的要求同入栈指令。例如:POP AX 图2-8POP BX POP DS3交换指令 XCHG一般格式:XCHG OPRD1,OPRD2功能:完成数据交换这是条交换指令,把一个字节或一个字的源操
14、作数与目的操作数相交换。交换能在通用寄存器与累加器之间、通用寄存器之间、通用寄存器与存储器之间进行。但段寄存器和立即数不能作为一个操作数,不能在累加器之间进行。例如: XCHG AL,CLXCHG AX,DIXCHG BX,SIXCHG AX,BUFFERXCHG DATASI,DH4累加器专用传送指令有三种,输入、输出和查表指令。前两种又称为输入输出指令。 IN 指令一般格式:IN AL,n ; B ALnIN AX,n ; W AXn+1nIN AL,DX ; B ALDXIN AX,DX ; W AXDX+1DX功能:从I/O端口输入数据至AL或AX。输入指令允许把一个字节或一个字由一个
15、输入端口传送到AL或AX中。若端口地址超过255时,则必须用DX保存端口地址,这样用DX作端口寻址最多可寻找64K个端口。 OUT 指令一般格式:OUT n,AL ; B ALn OUT n,AX ; W AXn+1n OUT DX,AL ; B ALDX OUT DX,AX ; W AXDX+1DX功能:将AL或AX的内容输出至I/O端口。该指令将AL或AX中的内容传送到一个输出端口。端口寻址方式与IN指令相同。 XLAT指令一般格式:XLAT ; AL=(DX)×16(BX)+(AL)功能:完成一个字节的查表转换。要求:寄存器AL的内容作为一个256字节的表的下标。表的基地址在B
16、X中,转换后的结果存放在AL中. TABLE: 例如:MOV BX,OFFSET TABLE MOV AL,8 IN AL,1 第9个字符 AAH XLAT ;查表 OUT 1,AL ;(AL) AAH 表长度256 本指令可用在数制转换、函数表查表、代码转换等场合。5地址传送指令(有三条地址传送指令) LEA (Load Effective Address)一般格式: LEA OPRD1,OPRD2功能:把源操作数OPRD2的地址偏移量传送至目的操作数OPRD1。要求:源操作数必须是一个内存操作数,目的操作数必须是一个16位的通用寄存器。这条指令通常用来建立串操作指令所须的寄存器指针。例:L
17、EA BX,BUFR;把变量BUFR的地址偏移量部分送到BX LDS (Load pointer into DS)一般格式: LDS OPRD1,OPRD2功能:完成一个地址指针的传送。地址指针包括段地址部分和偏移量部分。指令将段地址送入DS,偏移量部分送入一个16位的指针寄存器或变址寄存器。要求:源操作数是一个内存操作数,目的操作数是一个通用寄存器/变址寄存器。例如:LDS SI,BX ;将把BX所指的32位地址指针的段地址部分送入DS,偏移量部分送入SI。图2-9 LDS指令示意如图2-9所示。 LES (Load pointer into ES) 一般格式: LES OPRD1,OPRD
18、2这条指令除将地址指针的段地址部分送入ES外,与LDS类似。例如: LES DI,BX+COUNT6标志寄存器传送(有四条标志传送指令) LAHF (LOAD AH WITH FLAG)将标志寄存器中的SF、ZF、AF、PF和CF(即低8位)传送至AH寄存器的指定位,空位没有定义。 SAHF (STORE AH WITH FLAG)将寄存器AH的指定位,送至标志寄存器的SF、ZF、AF、PF和CF位(即低8位)。根据AH的内容,影响上述标志位,对OF、DF和IF无影响。 PUSHF (PUSH FLAG)将标志寄存器压入堆栈顶部,同时修改堆栈指针,不影响标志位。 POPF (POP FLAG)
19、堆栈顶部的一个字,传送到标志寄存器,同时修改堆栈指针,影响标志位。二、算术运算指令80868088提供加、减、乘、除四种基本算术操作。这些操作都可用于字节或字的运算,也可以用于带符号数与无符号数的运算。 带符号数用补码表示。同时80868088也提供了各种校正操作,故可以进行十进制算术运算。参与加、减运算的操作数可如上图所示。1加法指令 (Addition)一般形式:ADD OPRD1,OPRD2 功能:OPRD1OPRD1+OPRD2完成两个操作数相加,结果送至目的操作数OPRD1。目的操作数可以是累加器,任一通用寄存器以及存储器操作数。例如:ADD AL,30;累加器与立即数相加ADD B
20、X,3000H;通用寄存器与存储单元内容相加ADD DI,CX;通用寄存器之间ADD DX,DATABX+SI;通用寄存器与存储单元内容相加ADD BETASI,DX;存储器操作数与寄存器相加这些指令对标志位CF、DF、PF、SF、ZF和AF有影响。一般形式:ADC OPRD1,OPRD2;带进位的加法功能:OPRD1OPRD1+OPRD2 +CF这条指令与上条指令类似,只是在两个操作数相加时,要把进位标志CF的现行值加上去,结果送至目的操作数。ADC指令主要用于多字节运算中。若有两个四字节的数,已分别放在自FIRST和SECOND开始的存储区中,每个数占四个存储单元。存放时,最低字节在地址最
21、低处,则可用以下程序段实现相加。MOV AX,FIRSTADD AX,SECOND;进行字运算MOV THIRD,AXMOV AX,FIRST+2ADC AX,SECOND+2MOV THIRD+2,AX这条指令对标志位的影响与ADD相同。一般形式:INC OPRD ;功能:OPRDOPRD+1完成对指定的操作数OPRD加1,然后返回此操作数。此指令主要用于在循环程序中修改地址指针和循环次数等。这条指令执行的结果影响标志位AF、OF、PF、SF和ZF,而对进位标志没有影响。如:INC AL INC BX2减法指令(Subtraction)一般形式:SUB OPRD1,OPRD2 ;功能:OPR
22、D1OPRD1-OPRD2完成两个操作数相减,也即从OPRD1中减去OPRD2,结果放在OPRD1中。例如: SUB CX,BX SUB BP,CL一般形式:SBB OPRD1,OPRD2 ;功能:OPRD1OPRD1-OPRD2-CF 这条指令与SUB类似,只是在两个操作数相减时,还要减去借位标志CF的现行值本指令对标志位AF、CF、OF、PF、SF和ZF都有影响。同ADC指令一样,本指令主要用于多字节操作数相减。一般形式:DEC OPRD ;功能:OPRDOPRD-1-CF对指令的操作数减1,然后送回此操作数,在相减时,把操作数作为一个无符号二进制数来对待。指令执行的结果,影响标志AF、O
23、F、PF、SF和ZF但对CF标志不影响(即保持此指令以前的值)。例如: DEC SI DEC CL一般形式:NEG OPRD 功能: (NEGDate)取补对操作数取补,即用零减去操作数,再把结果送回操作数。例如: NEG AL NEG MULRE(AL00111100)则取补后为11000100即000000000011110011000100若在字节操作时对-128,或在字操作时对-32768取补,则操作数没变化,但标志OF置位。此指令影响标志AF、CF、OF、PF、SF和ZF。此指令的结果一般总是使标志CF=1。除非在操作数为零时,才使CF=0。一般形式:CMP OPRD1,OPRD2
24、;功能: OPRD1-OPRD2比较指令完成两个操作数相减,使结果反映在标志位上,但并不送回结果(即不带回送的减法)。例如: CMP AL,100CMP DX,DICMP CX,COUHTBPCMP COUNTSI,AX比较指令主要用于比较两个数之间的关系。在比较指令之后,根据ZF标志即可判断两者是否相等。² 相等的比较:若两者相等,相减以后结果为零,ZF标志为1,否则为0。若两者不相等,则可在比较指令之后利用其它标志位的状态来确定两者的大小。² 大小的比较:如果是两个无符号数(如CMPAX,BX)进行比较,则可以根据CF标志的状态判断两数大小。若结果没有产生借位(CF=0
25、),显然AXBX;若产生了借位(即CF1),则AXBX。习题与思考:1设有关寄存器及存储单元的内容如下:DS=2000H,BX=0100H,AX=1200H,SI=0002H,20100H=12H,20101H=34H,20102H=56H,20103=78H,21200=2AH,21201H=4CH,21202H=0B7H,21203H=65H。试说明下列各条指令单独执行后相关寄存器或存储单元的内容。(1)MOVAX,1800H (2)MOVAX,BX(3)MOVBX,1200H (4)MOVDX,1100BX(5)MOVBXSI,AL (6)MOVAX,1100BXSI2写出实现下列计算的
26、指令序列。(假定X、Y、Z、W、R都为字变量)(1)Z=W+(Z+X)(2)Z=W-(X+6)-(R+9)3若在数据段中从字节变量TABLE相应的单元开始存放了015的平方值,试写出包含有XLAT指令的指令序列查找N(015)中的某个数的平方。(设N的值存放在CL中)第三讲 3.3 指令系统-算术运算、逻辑运算、控制转移回顾:8086/8088的内部结构和寄存器,8086/8088的工作过程。8086/8088的寻址方式及操作数地址的计算。重点和纲要:要求学生了解指令的功能,掌握算术运算类、逻辑运算和移位指令的功能和应用。(掌握指令内涵,会用)教学方法、实施步骤时间分配教学手段回 顾5”
27、15;2板书计算机投影仪多媒体课件等讲 授40” ×2提 问3” ×2小 结2” ×2讲述内容:3乘法指令(分为无符号乘法指令和带符号乘法指令两类)(1) 无符号乘法指令MUL 一般格式: MUL OPRD 完成字节与字节相乘、字与字相乘,且默认的操作数放在AL或AX中,而源操作数由指令给出。8位数相乘,结果为16位数,放在AX中;16位数相乘结果为32位数,高16位放在DX,低16位放在AX中。注意:源操作数不能为立即数。例如:MOV AL,FIRST;MUL SECOND ;结果为AX=FIRST*SECONDMOV AX,THIRD;MUL AX ;结果DX
28、:AX=THIRD*THIRDMOV AL,30HCBW ; 字扩展AX=30HMOV BX,2000HMUL BX ;(2) 带符号数乘法指令IMUL 一般格式:IMUL OPRD ;OPRD 为源操作数这是一条带符号数的乘法指令,同MUL一样可以进行字节与字节、字和字的乘法运算。结果放在AX或DX,AX中。当结果的高半部分不是结果的低半部分的符号扩展时,标志位CF和OF将置位。4除法指令(1) 无符号数除法指令 DIV一般格式:DIV OPRD (2) 带符号数除法IDIV一般格式:IDIV OPRD该指令执行过程同DIV指令,但IDIV指令认为操作数的最高位为符号位,除法运算的结果商的最
29、高位也为符号位。在除法指令中,在字节运算时被除数在AX中;运算结果商在AL中,余数在AH中。字运算时被除数为DX:AX构成的32位数,运算结果商在AX中,余数在DX中。例如:AX=2000H,DX=200H,BX=1000H,则 DIV BX执行后,AX=2002H ,DX=0000。除法运算中,源操作数可为除立即寻址方式之外的任何一种寻址方式,且指令执行对所有的标志位都无定义。由于除法指令中的字节运算要求被除数为16位数,而字运算要求被除数是32位数,在8086/8088系统中往往需要用符号扩展的方法取得被除数所要的格式,因此指令系统中包括两条符号扩展指令。(3) 字节扩展指令CBW一般格式
30、:CBW该指令执行时将AL寄存器的最高位扩展到AH,即若D7=0,则AH=0;否则AH=0FFH。(4) 字扩展指令CWD一般格式:CWD该指令执行时将AX寄存器的最高位扩展到DX,即若D15=0,则DX=0;否则DX=0FFFFH。CBW、CWD指令不影响标志位。5十进制调整指令计算机中的算术运算,都是针对二进制数的运算,而人们在日常生活中习惯使用十进制。为此在8086/8088系统中,针对十进制算术运算有一类十进制调整指令。在计算机中人们用BCD码表示十进制数,对BCD码计算机中有两种表示方法:一类为压缩BCD码,即规定每个字节表示两位BCD数;另一类称为非压缩BCD码,即用一个字节表示一
31、位BCD数,在这字节的高四位用0填充。例如,十进制数25D,表示为压缩BCD数时为:25H;表示为非压缩BCD数时为:0205H,用两字节表示。相关的BCD转换指令见表2-2。表2-2 十进制调整指令指令格式指令说明DAA压缩的BCD码加法调整DAS压缩的BCD码减法调整AAA非压缩的BCD码加法调整AAS非压缩的BCD码减法调整AAM乘法后的BCD码调整AAD除法前的BCD码调整例如:ADD AL,BLDAA若执行前:AL=28H,BL=68H,则执行ADD后:AL=90H,AF=1;再执行DAA指令后,正确的结果为:AL=96H,CF=0,AF=1。MUL BLAAM若执行前:AL=07,
32、BL=09,则执行MUL BL 后,AX=003FH,再执行AAM指令后,正确的结果为:AH=06H,AL=03H。注意:BCD码进行乘除法运算时,一律使用无符号数形式,因而AAM 和AAD应固定地出现在MUL之前和DIV之后。三、 逻辑运算和移位指令 包括逻辑运算、移位和循环移位指令1逻辑运算指令(1) 一般格式:NOT OPRD功能:对操作数求反,然后送回原处,操作数可以是寄存器或存储器内容。此指令对标志无影响。例如:NOT AL(2) 一般格式:AND OPRD1,OPRD2功能:对两个操作数进行按位的逻辑“与”运算,结果送回目的操作数。其中目的操作数OPRD1可以是累加器、任一通用寄存
33、器,或内存操作数(所有寻址方式)。源操作数OPRD2可以是立即数、寄存器,也可以是内存操作数(所有寻址方式)。8086/8088的AND指令可以进行字节操作,也可以进行字操作。例如: AND AL,0FH ;可完成拆字的动作AND SI,SI ; 将SI清0(3) 一般格式:TEST OPRD1,OPRD2 功能:完成与AND指令相同的操作,结果反映在标志位上,但并不送回。通常使用它进行测试, 例如 若要检测 AL中的最低位是否为1,为1则转移。可用以下指令:TEST AL,01HJNZ THERETHERE:若要检测CX中的内容是否为0,为0则转移。该如何做呢?(4) 一般格式:OR OPR
34、D1,OPRD2功能:对指定的两个操作数进行逻辑“或”运算。结果送回目的操作数。其中,目的操作数OPRD1,可以是累加器,可以是任通用寄存器,也可以是一个内存操作数(所有寻址方式)。源操作数OPRD2,可以是立即数、寄存器,也可以是内存操作数(所有寻址方式)。AND AL,0FHAND AH,0FOHOR AL,AH ; 完成拼字的动作OR AX,0FFFH ;将AX低12位置1OR BX,BX ; 清相应标志(5) 一般格式:XOR OPRD1,OPRD2功能:对两个指定的操作数进行“异或”运算,结果送回目的操作数。其中,目的操作数OPRD1可以是累加器,可以是任一个通用寄存器,也可以是一个
35、内存操作数(全部寻址方式)。源操作数可以是立即数、寄存器,也可以是内存操作数(所有寻址方式)。例如:XOR AL,AL ;使AL清0XOR SI,SI ;使SI清0XOR CL,0FH ;使低4位取反,高4位不变逻辑运算类指令中,单操作数指令NOT的操作数不能为立即数,双操作数逻辑指令中,必须有一个操作数为寄存器寻址方式,且目的操作数不能为立即数。它们对标志位的影响情况如下:NOT不影响标志位,其它四种指令将使CF=OF=0,AF无定义,而SF、ZF和PF则根据运算结果而定。2移位指令(1)算术/逻辑移位指令 算术左移或逻辑左移指令 SALSHL OPRD,M ; 算术右移指令 SAR OPR
36、D,M 逻辑右移指令 SHR OPRD,M M是移位次数,可以是1或寄存器CL这些指令可以对寄存器操作数或内存操作数进行指定的移位,可以进行字节或字操作;可以一次只移1位,也可以移位由寄存器CL中的内容规定的次数(2)循环移位指令ROL OPRD,M ;左循环移位 ROR OPRD,M ;右循环移位 RCL OPRD,M ;带进位左循环移位RCR OPRD,M ;带进位右循环移位前两条循环指令,未把标志位CF包含在循环的环中,后两条把标志位CF包含在循环的环中,作为整个循环的一部分。循环指令可以对字节或字进行操作。操作数可以是寄存器操作数,也可以是内存操作数。可以是循环移位一次,也可以循环移位
37、由CL的内容所决定的次数。左移一位,只要左移以后的数未超出一个字节或一个字的表达范围,则原数的每一位的权增加了一倍,相当于原数乘2。右移位相当于除以2。在数的输入输出过程中乘10的操作是经常要进行的。而X10=X*2+X*8,也可以采用移位和相加的办法来实现*10。为保证结果完整,先将AL中的字节扩展为字。MOV AH,0 SAL AX,1 ;X*2 MOV BX,AX ;移至BX中暂存 SAL AX,1 ;X*4 SAL AX,1 ;X*8 ADD AX,BX ;X*10 例1 BCD码转换为ASCII码若在内存某一缓冲区中存放着若干个单元的用BCD码表示的十进制数。每个单元中放两位BCD码
38、,要求把它们分别转换为ASCII码。高位的BCD码转换完后放在地址较高的单元。分析:转换公式:ASCIIBCD+30H算法:源串和目的串的表首分别设两个指针。取BCD转ASCII 后存入(先低位,后高位)MOVSI,OFFSET BCDBUFF;设置源地址指针MOVCX,COUNT ;设计数初值MOVDI,OFFSET ASCBUF ;设置目的地址指针AGAIN:MOVAL,SIMOVBL,ALANDAL,0FH ;取低位BCD码ORAL,30H ;转换成ASCII码MOVDI,AL ;存入INCDI ;修改指针MOVAL,BLPUSHCXMOVCL,4SHRAL,CLORAL,30H ;高位
39、转换成ASCII码MOVDI,AL ;存入POPCXINCDI INCSI ;修改指针LOOPAGAIN ;重复工作习题与思考:1写出实现下列计算的指令序列。(假定X、Y、Z、W、R都为字变量)(1)Z=(W*X)/(R+6)(2)Z=(W-X)/5*Y)*22假定DX=1100100110111001B,CL=3,CF=1,试确定下列各条指令单独执行后DX的值。(1)SHRDX,1(2)SHLDL,1(3)SALDH,1(4)SARDX,CL(5)RORDX,CL(6)ROLDL,CL(7)RCRDL,1(8)RCLDX,CL3试分析下列程序完成什么功能? MOVCL,4 SHLDX,CL
40、MOVBL,AH SHLBL,CL SHRBL,CL ORDL,BL4已知程序段如下:MOVAX,1234HMOVCL,4ROLAX,CLDECAXMOVCX,4MULCXINT20H试问:(1)每条指令执行后,AX寄存器的内容是什么?(2)每条指令执行后,CF,SF及ZF的值分别是什么?(3)程序运行结束时,AX及DX寄存器的值为多少?第四讲:3.4 指令系统-循环、子程序调用、中断、其他回顾:8086/8088的内部结构和寄存器,8086/8088的工作过程8086/8088的寻址方式及操作数地址的计算。重点和纲要:要求学生了解串操作指令的功能。指令系统-循环、子程序调用、中断、其他(掌握
41、指令内涵,会用)教学方法、实施步骤时间分配教学手段回 顾5”×2板书计算机投影仪多媒体课件等讲 授35” ×2提 问3” ×2小 结2” ×2讨 论5” ×2讲授内容:四、 串操作类指令 (选讲或简单介绍)串操作类指令可以用来实现内存区域的数据串操作。这些数据串可以是字节串,也可以是字串。1重复指令前缀串操作类指令可以与重复指令前缀配合使用。从而可以使操作得以重复进行,及时停止。重复指令前缀的几种形式见表2-3所示。表2-3重复前缀汇编格式执行过程影响指令REP(1)若(CX)0,则退出;(2)CX=CX-1;(3)执行后续指令;(4)重复(1
42、)-(3)MOVS,STOS,LODSREPE/REPZ(1)若(CX)0或ZF=0,则退出;(2)CX=CX-1;(3)执行后续指令;(4)重复(1)-(3)CMPS,SCASREPNE/REPNZ(1)若(CX)0或ZF=1,则退出;(2)CX=CX-1;(3)执行后续指令;(4)重复(1)-(3)CMPS,SCAS2串指令串指令共有五种,具体见表2-4。对串指令要注意以下几个问题:(1) 各指令所使用的默认寄存器是:SI(源串地址),DI(目的地址),CX(字串长度),AL(存取或搜索的默认值)。(2) 源串在数据段,目的串在附加段。表2-4 串操作指令功能指令格式执行操作串传送MOVS
43、 DST,SRCMOVSBMOVSW由操作数说明是字节或字操作;其余同MOVSB或MOVSW(ES:DI)(DS:SI);SI=SI±1,DI=DI±1;REP控制重复前两步(ES:DI)(DS:SI);SI=SI±2,DI=DI±2;REP控制重复前两步串比较CMPS DST,SRCCMPSBCMPSW由操作数说明是字节或字操作;其余同CMPSB或CMPSW(ES:DI)(DS:SI);SI=SI±1,DI=DI±1;重复前缀控制前两步(ES:DI)(DS:SI);SI=SI±2,DI=DI±2;重复前缀控制前两
44、步串搜索SCAS DSTSCASBSCASW由操作数说明是字节或字操作;其余同SCASB或SCASWAL(ES:DI);DI=DI±1;重复前缀控制前两步AX(ES:DI);DI=DI±2;重复前缀控制前两步存串STOS DSTSTOSBSTOSW由操作数说明是字节或字操作;其余同STOSB或STOSWAL(ES:DI);DI=DI±1;重复前缀控制前两步AX(ES:DI);DI=DI±2;重复前缀控制前两步取串LODS SRCLODSBLODSW由操作数说明是字节或字操作;其余同LODSB或LODSW(DS:SI)AL;SI=SI±1;重复前
45、缀控制前两步(DS:SI)AX;SI=SI±2;重复前缀控制前两步(3) 方向标志与地址指针的修改。DF1,则修改地址指针时用减法;DF=0时,则修改地址指针时用加法,MOVS、STOS、LODS指令不影响标志位。 · MOVS指令的功能,把数据段中由SI间接寻址的一个字节(或一个字)传送到附加段中由DI间接寻址的一个字节单元(或一个字单元)中去,然后,根据方向标志DF及所传送数据的类型(字节或字)对SI及DI进行修改,在指令重复前缀REP的控制下,可将数据段中的整串数据传送到附加段中去。例2 在数据段中有一字符串,其长度为17,要求把它们传送到附加段中的一个缓冲区中,其中
46、源串存放在数据段中从符号地址MESS1开始的存储区域内,每个字符占一个字节;M ESS2为附加段中用以存放字符串区域的首地址。实现上述功能的程序段如下: LEA SI,MESS1 ;置源串偏移地址 LEA DI,MESS2 ;置目的串偏移地址 MOV CX,17 ;置串长度 CLD ;方向标志复位 REP MOVSB ;字符串传送 其中,最后一条指令也可写成 REP MOVS ES:BYTE PTRDI,DS:SI或 REP MOVS MESS2,MESS1· CMPS指令的功能,把数据段中由SI间接寻址的一个字节(或一个字)与附加段中由DI间接寻址的一个字节(或一个字)进行比较操作
47、,使比较的结果影响标志位,然后根据方向标志DF及所进行比较的操作数类型(字节或字)对SI及DI进行修改,在指令重复前缀REPE/REPZ或者REPNE/REPNZ的控制下,可在两个数据串中寻找第一个不相等的字节(或字),或者第一个相等的字节(或字)。例3 在数据段中有一字符串,其长度为17,存放在数据段中从符号地址MESS1开始的区域中;同样在附加段中有一长度相等的字符串,存放在附加段中从符号地址MESS2开始的区域中,现要求找出它们之间不相匹配的位置。 实现上述功能的程序段如下; LEA SI,MESS1 ;装入源串偏移地址 LEA DI,MESS2 ;装入目的串偏移地址 MOV CX,17
48、 ;装入字符串长度 CLD ;方向标志复位REPE CMPSB上述程序段执行之后,SI或DI的内容即为两字符串中第一个不匹配字符的下一个字符的位置。若两字符串中没有不匹配的字符则当比较完毕后,CX0,退出重复操作状态。· SCAS指令的功能,用由指令指定的关键字节或关键字(分别存放在AL及AX 寄存器中),与附加段中由DI间接寻址的字节串(或字串)中的一个字节(或字)进行比较操 作,使比较的结果影响标志位,然后根据方向标志DF及所进行操作的数据类型(字节或字) 对DI进行修改,在指令重复前缀REPE/REPZ或REPNE/REPNZ的控制下,可在指定的数据串中搜索第一个与关键字节(或
49、字)匹配的字节(或字),或者搜索第一个与关键字节(或字)不匹配的字节(或字)。例4 在附加段中有一个字符串,存放在以符号地址MESS2开始的区域中,长度为17,要求在该字符串中搜索空格符(ASCII码为20H)。 实现上述功能的程序段如下: LEA DI,MESS2 ;装入目的串偏移地址 MOV AL,20H ;装入关键字节 MOV CX,17 ;装入字符串长度 REPNE SCASB上述程序段执行之后,DI的内容即为相匹配字符的下一个字符的地址,CX中是剩下还未比较的字符个数。若字符串中没有所要搜索的关键字节(或字),则当查完之后(CX)0退出重复操作状态。· STOS指令的功能,
50、把指令中指定的一个字节或一个字(分别存放在AL及AX寄存器中),传送到附加段中由DI间接寻址的字节内存单元(或字内存单元)中去,然后,根据方向标志DF及所进行操作的数据类型(字节或字)对DI进行修改操作。在指令重复前缀的控制下,可连续将AL(AX)的内容存入到附加段中的一段内存区域中去,该指令不影标志位。例5 要对附加段中从MESS2开始的5个连续的内存字节单元进行清0操作,可用下列程序段实现: LEA DI,MESS2 ;装入目的区域偏移地址 MOV AL,00H ;为清零操作准备 MOV CX,5 ;设置区域长度 REP STOSB· LODS指令的功能, 从串中取指令实现从指定的字节串(或字串)中读出信息的操作。例6 比较DEST和SOURCE中的500个字节,找出第一个不相同的字节,如果找到,则将SOURCE中的这个数送AL中。 CLD LEA DI,ES:DEST LEA SI,SOURCE MOV CX,500 REPE CMPSB JCXZ NEXT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45129-2025增强纱线在水泥中强度的测定
- 水泥柱模具施工方案
- 楼盘楼面花架施工方案
- 石材外墙施工方案
- TSHLX 005-2024 太阳能电池边框用铝合金型材
- 二零二五年度美甲店营销推广合作框架协议
- 二零二五年度人力资源服务销售提成与职业规划合同
- 二零二五年度石油开采施工安全协议
- 二零二五年度重庆市文化创意产业园区租赁协议
- 二零二五年度农机作业与农业风险管理合作合同
- 通信施工安全生产培训(登高作业施工专题)
- 2015产后出血技能评分表new
- 人教版五年级下册口算题大全(全册齐全)
- 企业生产管理-9S现场管理培训PPT课件教材讲义
- 护学岗值班登记表
- 猪场赶猪方案
- 2023年山东医学高等专科学校高职单招(语文)试题库含答案解析
- 183-压力计量器具检定系统框图
- 先天性肥厚性幽门狭窄精选课件
- 遥感概论第1章:绪论
- 仪表基础培训(联锁逻辑)
评论
0/150
提交评论