1、安徽理工人学计算机科学与技术系 咨敬龙汇编语言第3章 80 x86指令系统和寻址方式敖皆要求:1.掌握指令系统的基本概念:指令格式、寻址方 式、指令类型;掌握8086/8088指令系统中,各指 令的格式、功能和注意事项。2.了解其他的寻址方式和指令类型。安徽理工人学计算机科学与技术系 咨敬龙汇编语言相关概念一、什么是指令系统?计算机的指令系统就是指该计算机能够执行的 全部指令的集合。每种计算机都有它支持的指令集合。16位8086指令系统是整个Int el 80 x86系列微处理器指令系统的基础。安徽理工人学计算机科学与技术系 咨敬龙汇编语言、指令格式指令由操作码和操作数两部分组成O操作码 操作
2、数-操作数操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分。操作数是指令执行的参与者,即各种操作的对象。有些指令不需要操作数,通常的指令都有一个或两个 操作数,也有个别指令有3个甚至4个操作数,通常成为一 地址指令、二地址指令、三安徽理工人学计算机科学与技术系 咨敬龙汇编语言三、学习指令的注意事项 指令的功能该指令能够实现何种操作。通常指令助 记符就是指令功能的英文单词或其缩写形式。指令支持的寻址方式该指令中的操作数可以采用何 种寻址方式。指令对标志的影响该指令执行后是否对各个标志位 有影响,以及如何影响。其他方面该指令其他需要特别注意的地方,如指令
3、 执行时的约定设置、必须预置的参数、隐含使用的寄存器等。安徽理工人学计算机科学与技术系 咨敬龙汇编语言3.1 80 x86寻址方式寻址、寻址方式的概念指令中操作数字段实质上是指出操作数存放于何处。一 般来说,操作数可以跟随在指令操作码之后,称为立即数;操作数也可以存放在CPU内部的寄存器中,称为寄存器操作 数。绝大多数的操作数存放在内存储器中,称为存储器操作 数。指令指定操作数的位置,即给出地址信息,在执行时需 要根据这个地址信息找到需要的操作数。这种寻找操作数的 过程称为寻址,而寻找操作数的方法称为寻址方式。安徽理工人学计算机科学与技术系 咨敬龙汇编语言指令的助记符格式:指令助忆符操作数1,
4、操作数2,操作数3 ;注释指令助忆符体现该指令的功能,它对应一条二进制编码的机器 指令。指令的操作数个数由该指令确定,可以没有操作数,也可以 有一个、二个或三个操作数。绝大多数指令的操作数要显式的写出 来,但也有指令的操作数是隐含的,不需要在指令中写出。注:当指令含有操作数,则在书写时必须遵守:指令助记符和操作数之间要有分隔符,分隔符可以是若干个空格 或TAB键;:如果指令含有多个操作数,那么,操作数之间要用逗号“,“分开:指令后面还可以书写注释内容,不过,要在注释之前书写分号安徽理工人学计算机科学与技术系 咨敬龙汇编语言3.1.1与数据有关的寻址方式以MOV指令为例:?哂证1寄存器寻址;直接
5、寻址;寄存器间接寻址【寄存器相对寻址,基址变址寻址,相对基址变址寻址MOV AX,3069HMOV AL,BHMOV AX,2000H MOV AX,BX MOV AX,COUNT SIMOV AX,BP DI MOV AX,MASK BX SI 安徽理工人学计算机科学与技术系 咨敬龙汇编语言L立即寻址方式定义:操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数 寻址方式。汇编格式:n(n为立即操作数,是用8位或16位二进制 补码表示的有符号数)功能:操作数存放在存储器,指令下一单元的内容为立 即操作数n。图形表不:_指令操作数n安徽理工人学计算机科学与技
6、术系 咨敬龙汇编语言【例3】MOV AX,4576H 执行后该例中源操作数为立即寻址方式,在指令的下一单元。执行:4576H一AX执行后:(AX)=4576H(AX)=?立即数为4576H,存放安徽理工人学计算机科学与技术系 咨敬龙汇编语言2.寄存器寻址方式定义:指令所要的操作数已存储在某寄存器中,或把目标 操作数存入寄存器。把在指令中指出所使用寄存器(即:寄存器的助记符)的寻址方式称为寄存器寻址方式。汇编格式:R 其中R表示寄存器名。功能:操作数直接存放在寄存器R中。图形表示:指令 I 寄存器寄存器R操作数安徽理工人学计算机科学与技术系 咨敬龙汇编语言指令中可以引用的寄存器及其符号名称如下:
7、8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL 等;16位寄存器:AX、BX、CX、DX、SL DL SP、BP和段 寄存器等;源操作数是寄存器寻址方式如:ADD VARW,AX MOV VARB,BH等。其中:VARW和VARB是字和字节类型的内存变量。目的操作数是寄存器寻址方式如:ADD BH,78h ADD AX,1234h:源和目的操作数都是寄存器寻址方式如:MOV AX,BX MOV DH,BL等。安徽理工人学计算机科学与技术系 咨敬龙汇编语言注:由于指令所需的操作数已存储在寄存器中,或 操作的结果存入寄存器,这样,在指令执行过程中,会减少读/写存储器单元的次数,所以,
8、使用寄存器 寻址方式的指令具有较快的执行速度。通常情况下,提倡在编写汇编语言程序时,应尽可能地使用寄存 器寻址方式,但也不要把它绝对化。安徽理工人学计算机科学与技术系 咨敬龙汇编语言【例3.2】下列程序执行后,(AX)=?,(BX)=?MOV AX,1234HMOV BX,5678HADD AX,BX解释:该程序中MOV指令为数据传送指令操作符,ADD指 令为加法指令操作符,三条指令皆为双操作数指令。第一、二条指令AX、BX皆为目的操作数地址,为寄存器寻址方式。第三条指令中,AX为目的操作数地址,BX为源操作数地址。源地址和目的地址皆为寄存器寻址方式。执行:1234H 一 AX5678H 一
9、BX(AX)+(BX)一AX执行后:(AX)=68ACH,(BX)=5678H安徽理工人学计算机科学与技术系 咨敬龙汇编语言3.直接寻址方式定义:指令所要的操作数存放在内存中,在指令中直接给 出该操作数的有效地址,这种寻址方式为直接寻址方式。汇编格式:含有变量的地址表达式。功能:指令下一字单元的内容是操作数的偏移地址EA。图形表不:段基地址安徽理工人学计算机科学与技术系 咨敬龙汇编语言【例33】执行指令:MOV BX,1234H 设(DS)=2000Ho执行后:(AX)=?苗示:执行:(21234H)一BX 执行后:(BX)=5312H 安徽理工人学计算机科学与技术系 咨敬龙汇编语言在通常情况
10、下,操作教存放在数据段中,所以,其物理地 址将由数据段寄存器DS和指令中给出的有效地址直接形成,但 如果使用段超越南缴,那么,操作教可存放在其它段。例如:MOV ES:1OOOH,AX注意:立即寻址方式和直接寻址方式的书写格式不同,直接寻 址的地址要写在括号“”,内。在程序中,直接地址通常 用内存变量名来表示,如:MOVBX,VARW,其中,VARW是 内存字变量。试比较下列指令中源操作教的寻址方式(VARW是内存字 变量八MOV AX,1234HMOV AX,1234H前者是立即寻址,后者是直接寻址MOV AX,VARWMOV AX,VARW两者是等效的,均为直接寻址安徽理工人学计算机科学与
11、技术系 咨敬龙汇编语言4.寄存器间接寻址方式定 义:操作数在存储器中,操作数的有效地址用SI、DL BX和BP等四个寄存器之一来指定,称这种寻址方式为寄存 器间接寻址方式。汇编格式:R功 能:操作数存放在存储器,寄存器R存放操作数的偏移 地址EA。图形表示:段基地址安徽理工人学计算机科学与技术系 咨敬龙汇编语言【例3.4假设有指令:MOV BX,DI,在执行时,(DS)=1000H,执行指令后,BX的值是什么?(DI)=2345H,存储单元12345H的内容是4354H。问安徽理工人学计算机科学与技术系 咨敬龙汇编语言在不使用段超越前缀的情况下,有下列规定::若有效地址用SI、DI和BX等之一
12、来指定,则其缺省的段寄存 器为DS;:若有效地址用BP来指定,则其缺省的段寄存器为SS(即:堆 栈段)。该寻址方式物理地址的计算方法如下:BX物理地址PA=16XDS+SIBX500005100051001510025100375 1c l48|6BSP 一SP=1000H1 _SPSP=1002H6Br 6b48H 489A9A282811(1)执行前(2)执行后安徽理工人学计算机科学与技术系 咨敬龙汇编语言:“N输入指令输入指令用来从指定的外设寄存器取信息送入累加器。它有几种形式:长格式:IN AL,PORT(字节)IN AX,PORT(字)执行操作:(AL)一(PORT)(字节)(AX)
13、一(PORT+1,PORT)(字)短格式:IN AL,DX(字节)IN AX,DX(字)执行操作:(AL)一(DX)(字节)(AX)(DX)+1,(DX)(字)安徽理工人学计算机科学与技术系 咨敬龙汇编语言注意:该指令的作用是从端口中读入一个字节 或字,并保存在寄存器AL或AX中。如果某输 入设备的端口地址在0255范围之内,那么,可在指令IN中直接给出,否则,要把该端口地 址先存入寄存器DX中,然后在指令中由DX来 给出其端口地址。安徽理工人学计算机科学与技术系 咨敬龙汇编语言例如:IN AL,60H;从端口60H读入一个字节到AL中IN AX,20H;把端口 20H、21H按“高高低低”组
14、成 的字读入AXMOV DX,2F8HIN AL,DX;从端口2F8H读入一个字节到AL中IN AX,DX;把端口 2F8H、2F9H按“高高低低”组 成的字读入AX安徽理工人学计算机科学与技术系 咨敬龙汇编语言:.OUT输出指令输出指令用来把累加器的内容送往指定的外设存储器,它有几 种形式::长格式:OUT PORT,AL(字节)OUT PORT,AX(字)执行操作:(PORT)(AL)(字节)(PORT+1,PORT)(AX)(字)。短格式:OUT DX,AL(字节)OUT DX,AX(字)执行操作:(DX)(AL)(字节)(DX)+1,(DX)(AX)(字)安徽理工人学计算机科学与技术系
15、 咨敬龙汇编语言注意:该指令的作用是把寄存器AL或AX的内容输出到指定端口。如果某输出设备的端口地址在0255范围之内,那么,可在指令 OUT中直接给出,否则,要把该端口地址先存入寄存器DX中,然后在指令中由DX来给出其端口地址。例如:OUT 61H,AL;把AL的内容输出到端口61H中OUT 20H,AX;把AX的内容输出至U端口20H、21H中MOV DX,3C0HOUT DX,AL;把AL的内容输出至U端口3C0H中OUT DX,AX;把AX的内容输出至U端口3C0H、3C1H中安徽理工人学计算机科学与技术系 咨敬龙汇编语言:*XLAT换码指令转换指令有两个隐含操作数BX和AL。格 式:
16、XLAT OPR 或 XLAT执行操作:(AL)一(BX)+(AL)功 能:其功能是把BX的值作为内存字节数 组首地址、下标为AL的数组元素的俏传送给 ALO安徽理工人学计算机科学与技术系 咨数龙 汇编语言例:MOV BX,offset table;(BX)=0040HMOV AL,3 XLAT指令执行后(AL)=33H把BX的侑作为内存字 节数组首地址、下标 为AL的数组元素的侑 传送给AL。数据段DS 一DS=F000Ht a ble(BX)一30HF0040131HF0041(AL)=3 v32HF004233HF0043安徽理工人学计算机科学与技术系 咨数龙 汇编语言:地址传送指令取有
17、效地址指令LEA:指令LEA是把一个内存变量的有效地址送给指定的寄存器O其指令格式如下:LEA Reg,Mem该指令通常用来对指针或变址寄存器BX、DI或SI等置初值之用O取段寄存器指令:该组指令的功能是把内存单元的一个“低字”传送给指令中指定的16位寄存器,把随后的一个“高字”传给相应的段寄存器(DS、ES)o其指令格式如下:II安徽理工人学计算机科学与技术系 咨敬龙汇编语言例:LEA BX,BX+SI+0F62HLDS SI,10H LES DL BXTABLE 一 3000H:1000H;(ES)=3000HMOV BX,TABLE(BX)=0040HMOV BX,OFFSET TABL
18、E(BX)=1000HLEA BX,TABLE(BX)=1000HLDS BX,TABLE(BX)=0040H(DS)=3000HLES BX,TABLE(BX)=0040H安徽理工人学计算机科学与技术系 咨敬龙汇编语言标志寄存器传送指令标志送AH指令:LAHF执行操作:(AH)一(FLAGS的低字节)AH送标志寄存器指令:SAHF执行操作:(FLAGS的低字节)一(AH)标志进栈指令:PUSHF执行操作:(SP)-(SP)-2(SP)+1,(SP)(FLAGS)标志出栈指令:POPF执行操作:(FLAGS)DEC、NEG、CMP4乘法指令 MUL、IMUL 除法指令 DIV、IDIV卜进制调
19、整指令 DAA、DAS、AAA、AAS、AAM、AAD安徽理工人学计算机科学与技术系 咨数龙 汇编语言1.加法指令:力口法指令:ADD DST,SRC功能:将目的操作数与源操作数相加,结果存入目的地址中,源地 址咆内容不改变。执行操作:(DST)(SRC)+(DST):带进位加法指令:ADC DST,SRC功熊:将目的操作数加源操作数再加低位进位,结果送目的地址。执行操作:(DST)(SRC)+(DST)+CF:加II指令:INC OPR功能:将目的操作数加L结果送目的地址。执行操作:(OPR)(OPR)+1注意:除INC指令不影响CF标志外)均对条件标志位有影响。安徽理工人学计算机科学与技术
20、系 咨敬龙汇编语言:标志寄存器FLAGS的介绍指令的执行与标志有很大关系。标志分成两类:状态标志用来记录程序运行结果的状态信息,许多指令的 执行都将相应地设置它。它们分别是:CF ZF SF PF OF AF控制标志可由程序根据需要用指令设置,用于控制处理器 执行指令的方式。它们分别是:DF IF TF15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0安徽理工人学计算机科学与技术系 咨敬龙汇编语言。进位标志CF(Ca rryFla g)当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,即CF=1;否则CF=O。例如:3AH+7c H=B6H,没有进位:
21、CF=OAAH+7c H=(1)26H,有进位:CF=1安徽理工人学计算机科学与技术系 咨敬龙汇编语言。零标志ZF(Zero Fla g)若运算结果为0,则ZF=L否则ZF=0。例如:3AH+7c H=B6H,结果不是零:ZF=086H+7c H=(1)00H,结果是零:ZF=1注意:ZF为1表小的结果是0。安徽理工人学计算机科学与技术系 咨敬龙汇编语言。符号标志SF(SignFla g)运算结果最高位为1,贝l SF=l;否则SF=O。例如:3AH+7c H=B6H,最高位D7=L SF=186H+7c H=(1)OOH,最高位D7=0:SF=O注意:有符号数据利用最高有效位表示数据的符号。
22、所 以,最高有效位就是符号标志的状态。安徽理工人学计算机科学与技术系 咨敬龙汇编语言。奇偶标志 PF(Pa rit y Fla g)当运算结果最低字节中“1”的个数为零或偶数时,PF=1;否则PF=O。例如:3AH+7CH-B6H=10110110B,结果中有5个1,是奇数:PF=O注意:PF标志仅反映最低8位中“1”的个数是偶或奇,即 使是进行16位字操作。安徽理工人学计算机科学与技术系 咨敬龙汇编语言。辅助进位标志AF(Auxilia ry Ca rry Fla g)运算时D3位(低半字节)有进位或借位时,AF=1;否则AF=O。例如:3AH+7c H=B6H,D3有进位:AF=1注意:这
23、个标志主要由处理器内部使用,用于十进制算术 运算指令中,用户一般不必关心。安徽理工人学计算机科学与技术系 咨敬龙汇编语言。溢出标志OF(Overflow Fla g)若算术运算的结果有溢出,则OF=1;否则OF=0。例如:3AH+7c H=B6H,产生溢出:OF=1AAH+7CH=(1)26H,没有溢出:OF=0问题:什么是溢出?溢出和进位有什么区别?如何判断是否溢出?安徽理工人学计算机科学与技术系 咨敬龙汇编语言举例:n=8bit带符号数(-128127),无符号数(0255)0000 0100+0000 1011 0000 1111 带:(+4)+(+11)=+15 OF=0 无:4+11
24、=15 CF=0带符号数和无符号数都不溢出1000 0111力1111 0 10 110111 1100带:(421)+(-11)=+134 OF=1无:135+245=124 CF=1带符号数和无符号数面溢出0000 0X11+?X 1 1 X 10 11 1 0 0 00 00 1 0带:(+7)+(-5)=+2 OF=0无:7+251=258 CF=1无符号数溢出0000 1001+0111 11001000 0101带:(+9)+(+124)=-133 OF=X无:9+124=133 CF=0CF位表示无符号数相加的溢出。OF位表示带符号热相加的溢出安徽理工人学计算机科学与技术系 咨敬
25、龙汇编语言【例1】加例旨令。INC BX;(BX)+1-BX。【例2】双字加法运算,设目的操作数存放在DX和AX寄存器 中,其中DX放高位字,源操作数存放在BX和CX寄存器中,其中BX放高位字,指令执行前:(DX)=0020H,(AX)=0F365H,(BX)=0005H,(CX)=0E024HoADD AX,CX;(AX)=0D389H,CF=1ADC DX,BX;(DX)=0008H,CF=O安徽理工人学计算机科学与技术系 咨敬龙汇编语言2.减法指令:减法指令:SUB DST,SRC功能:目的操作数减去源操作数,结果存于目的地址,源地址的 内容不变。执行操作:(DST)(DST)(SRC)
26、。带借位减法指令:SBB DST,SRC功能:目的操作数减源操作数再减低位借位CF,结果送目的地址 执行操作:(DST)(DST)-(SRC)-CF:减 1 指令:DEC OPR功能:将目的操作数减1,结果送目的地址。执行操作:(OPR)(OPR)-1安徽理工人学计算机科学与技术系 咨敬龙汇编语言:减法指令对条件标志位的影响:CF=被减数的最高有效位有向高位的借位 否则11OF=两个操作数符号相反,而结果的符号与减数相同 否则CF位表示无符号数减法的溢出。OF位表示带符号数减法的溢出。安徽理工人学计算机科学与技术系 咨敬龙汇编语言2.减法指令:求补指令:NEG OPR功能:将目的操作数的每一位
27、求反(包括符号位)后加1,结果送 目的地址。执行操作:(OPR)-(OPR)比较指令:CMP OPRI,OPR2功能:目的操作数减源操作数,结果只影响标志位,不送入目的地 址。执行操作:(OPRI)(OPR2)注意:除DEC指令不影响CF标志外)均对条件标志位有影响。安徽理工人学计算机科学与技术系 咨敬龙汇编语言【例1】求补运算。MOV DX,6780HNEG DX;(DX)=9880H0 000H-)6780HCF l-9880H【例2】比较AL的内容数值大小。CMP AL,50;(AL)-50JB Bellow;(AL)=50,(AL)50ALINC AH;(AH)+1-AHBellow:
28、安徽理工人学计算机科学与技术系 咨数龙 汇编语言3.乘法指令:无符号数乘法指令:MUL SRC带符号数乘法指令:IMUL SRC功能:若是字节数据相乘,(AL)与SRC相乘得到字数据存入AX中;若是字数据相乘,则(AX)与SRC相乘得到双字数据,高字存入DX、低字存入AX中。执行操作:字节操作数(AX)q(AL)X(SRC)字操作数(DX,AX)(AX)X(SRC)注:IMUL指令除计算对象是带符号二进制数外,其他都与MUL 一样,但计算结果不同。安徽理工人学计算机科学与技术系 咨敬龙汇编语言:乘法指令如下影响OF和CF标志:MUL指令若乘积的高一半(AH或DX)为0,则 OF=CF=0;否则
29、OF=CF=L(用来检查字节相乘的结果 是字节还是字,或字相乘的结果是字还是双字)IMUL指令若乘积的高一半是低一半的符号扩展,则OF=CF=0;否则均为1。乘法指令对其他状态标志没有定义:指令执行后这些标志是任意的、不可预测(就是谁也 不知道是0还是1)。对标志没有影响是指令的执行不改变标志的状态。安徽理工人学计算机科学与技术系 咨敬龙汇编语言例:无符号乘法:MOVAL,0B4HMOV BL,11HMUL BL有符号乘法:MOV AL,0B4HMOV BL,11HIMUL BL;AL=B4H=180;BL=11H=17;AX=OBF4H=3060,;OF=CF=1;AX高8位不为0;AL=B
30、4H=76;BL=11H=17;AX=FAF4H=1292,;OF=CF=1;AX高8位含有效数字安徽理工人学计算机科学与技术系 咨敬龙汇编语言编写程序段,完成下面计算公式,并把所得的商和余数分别存入X和Y中(其中:A,B,C,X和Y都是有符号的字变量)。(C-120+A B)/C解:ABCDW?DW?DW?DW?DW?MOV AX,CSUB AX,120D;书写指令“ADD AX,120D”也可以 CWDMOV CX,DX MOV BX,AX MOV AX,AIMUL BADD AX,BXADC DX,CXIDIV CMOV X,AXMOV Y,DX.;(CX,BX)MDX,AX),调度寄存
31、器,为作乘法准备必要的寄存器;(DX,AX)-A*B;计算32位二进制之和,为作除法作准备;AX是商,DX是余数;分别保存商和余数到指定的字变量单元里安徽理工人学计算机科学与技术系 咨数龙 汇编语言4.除法指令:无符号数除法指令:DIV SRC带符号数除法指令:IDIV SRC执行操作:字节操作(AL)(AX)/(SRC)的商(AH)(AX)/(SRC)的余数字操作(AX)一(DX,AX)/(SRC)的商(DX).(DX,AX)/(SRC)的余数 注意:除法指令DIV和IDIV虽然对标志的影响未定义,但可产 生溢出。安徽理工人学计算机科学与技术系 咨敬龙汇编语言例:无符号除法:MOVAX,04
32、00HMOV BL,0B4HDIV BL7c H=124有符号除法:MOV AX,0400HMOV BL,0B4HIDIV BL=24H=36;AX=400H=1024;BL=B4H=180;商AL=05H=5;余数AH=;AX=400H=1024;BL=B4H=76;商AL=F3H=13;余数AH注:带符号除法的余数符号和被除数符号相同。安徽理工人学计算机科学与技术系 咨敬龙汇编语言当被除数远大于除数时,所得的商就有可能超出它所能 表达的范围。如果存放商的寄存器AL/AX不能表达,便 产生溢出,8086CPU中就产生编号为0的内部中断除 法错中断。说明:(1)对DIV指令,除数为0,或者在字
33、节除时商超过8位,或者在字除时商超过16位,则发生除法溢出。(2)对IDIV指令,除数为0,或者在字节除时商不在-128127范围内,或者在字除时商不在-3276832767范 围内,则发生除法溢出。安徽理工人学计算机科学与技术系 咨数龙 汇编语言5.十进制调整指令BCD码(8421码):用二进制编码的十进制数,又称二-十 进制数。压缩的BCD码:用4位二进制数表示1位十进制数。例:(59)io=(0101 1001)bcd非压缩的BCD码:用8位二进制数表示1位十进制数例:(59)io=(0000 0101 0000 1001)BCD安徽理工人学计算机科学与技术系 咨敬龙汇编语言问题的提出:
34、12 0001 0010+23+0010 001135 0011 0101(0011 0101)BCD19+0827(0010 0111)BCD0001 1001+0000 10000010 0001+110=0010 0111 tAF=1思考:51+83=?安徽理工人学计算机科学与技术系 咨敬龙汇编语言5.十进制调整指令(1)压缩的BCD码调整指令DAA 加法的十进制调整指令DAS 减法的十进制调整指令(2)非压缩的BCD码调整指令AAA 加法的ASCII码调整指令AAS 减法的ASCH码调整指令AAM 乘法的ASCH码调整指令AAD 除法的ASCH码调整指令安徽理工人学计算机科学与技术系
35、咨敬龙汇编语言:加法的十进制调整指令DAA语句格式:DAA如果AL寄存器中低4位大于9或辅助进位AF=L贝lAL=AL+6且AF=1;如果AL=0A0H或CF=L 则AL=AL+60H且CF=1。同时,SF、ZF、PF均有影响。【例】压缩BCD码的加法运算。MOV AL,68H(AL)=68H,MOV BL,28HADD AL,DAA;(BL)=28H,;二进制加法:;十进制调整:表示压缩BCD码68表示压缩BCD码28(AL)=68H+28H=90H(AL)=96H;实现压缩BCD码加法:68+28=96注:使用DAA或DAS指令前,应先执行以AL为目的操作数的加法或减法指令。安徽理工人学计
36、算机科学与技术系 咨敬龙汇编语言:减法的十进制调整指令DAS语句格式:DAS具体实现:如果AF=1或AL寄存器中低4位大于9,则AL=AL6且AF=1;如果 AL=OAOH 或 CF=L 则 AL=AL 60H 且 CF=1。同时SF、ZF、PF均受影响。【例】压缩BCD码的减法运算。MOV AL,68HMOV BL,28HSUB AL,BLDAS(AL)=68H,表示压缩BCD码68(BL)=28H,表示压缩BCD码28 二进制 减法:(AL)=68H28H=40H 十进制调整:(AL)=40H;实现压缩BCD码减法:68-28=40安徽理工人学计算机科学与技术系 咨敬龙汇编语言:加I法的A
37、SCII调整指令AAA语句格式:AAA功能:如果AL的低4位大于9或AF=L贝U:AL=AL+6,AH=AH+1,AF=CF=1,且AL高4位清零。否则:CF=AF=O,AL高4位清零。【例】MOVAX,0608HMOV BL,09HADD AL,BLAAA;AX=0608H,非压缩BCD码表示真值68;BL=09H,非压缩BCD码表示真值9;二进制加法:AL=O8H+O9H=11H;十进制调整:AX=0707H;实现非压缩BCD码加法:68+9=77安徽理工人学计算机科学与技术系 咨敬龙汇编语言:减法的ASCII调整指令AAS语句格式:AAS功能:如果AL的低4位大于9或AF=L贝U:AL=
38、AL 6,AH=AH1,AF=CF=1,AL高4位清零。否则:CF=AF=O,AL高4位清零。其他标志位OF、PF、SF、ZF不确定。【例】MOV AX,0608HMOV BL,09HSUB AL,BL;AX=0608H,非压缩BCD码表示真值68;BL=09H,非压缩BCD码表示真值9;二进制减法:AL=08H-09H=FFHAAS;十进制调整:AX=0509H;实现非压缩BCD码减法:68-09=59注:使用DAA或DAS指令前,应先执行以AL为目的操作数的加法或减法指 令。安徽理工人学计算机科学与技术系 咨敬龙汇编语言3.3.3 逻辑指令逻辑指令包括逻辑运算指令和移位操作指令两大类。其中
39、逻辑运算指令是一组重要的指令,它包括:逻辑与(AND)、逻辑或(OR)、逻辑非(NOT)和异或指令(XOR),逻辑运算指令也是经常使用的指令。移位操作指令是另一组经常使用的指令,它包括算术移位、逻辑移位、双精度移位、循环移位和带进位的循环移位等五 大类。安徽理工人学计算机科学与技术系 咨敬龙汇编语言1.逻辑运算指令.:.逻辑与指令:AND DST,SRC功能:把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑“与操作”,操作结果存入目标操作数中。执行操作:(DST)(DST)a(SRC)用途:该指令用于清除目的操作数中与源操作数置0的对应位。【例】已知(BH)=67H,要求把其的第0、
40、1和5位置为0。解:可以构造一个立即数,其第0、1和5位的值为0,其它位的值 为1,该立即数即为:0DCH或11011100为 然后用指令“AND BH,ODCH 44 来实现此功能。安徽理工人学计算机科学与技术系 咨敬龙汇编语言:逻辑或指令:ORDST,SRC功能:把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑”或操作”,操作结果存入目标操作数中。执行操作:(DST)(DST)v(SRC)用途:该指令用于设置目的操作数中与源操作数置1的对应位。【例】已知(BL)=46H,要求把其的第1、3、4和6位置为1。解:构造一个立即数,使其第1、3、4和6位的值为1,其它位的 值为0,该立
41、即数即为:5AH或010U010B,然后用指令“OR BL,5AH”来实现此功能。安徽理工人学计算机科学与技术系 咨敬龙汇编语言:逻辑非指令:NOT OPR*OPR不能为立即数功能:将目的地址中的内容逐位取反后送入目的地址。执行操作:(OPR)-1(OPR)【例】逻辑非运算。MOV AX,878AH;(AX)=878AHNOT AX,;(AX)=7875H安徽理工人学计算机科学与技术系 咨敬龙汇编语言:异或指令:XOR DST,SRC功能:把源操作数中的每位二进制与目的操作数中的相应二 进制进行逻辑“异或操作”,操作结果存入目标操作数中。执行操作:(DST)(DST)V(SRC)【例】已知(A
42、H)=46H,要求把其的第0、2、5和7位的二进制值变反。解:构造一个立即数,使其第0、2、5和7位的值为1,其它位 的值为0,该立即数即为:0A5H或10100101B,然后再用指令“XOR AH,0A5H”来实现此功能。安徽理工人学计算机科学与技术系 咨数龙 汇编语言。测试指令:TEST OPRI,OPR2功能:把二个操作数进行逻辑“与”操作,并根据 运算结果设置相应的标志位,但并不保存该运算结 果,所以,不会改变指令中的操作数。执行操作:(OPRI)a(OPR2)【例】测试AX中的第12位是否为0,不为0则转L。TEST AX,1000HJNE L安徽理工人学计算机科学与技术系 咨敬龙汇
43、编语言2.移位指令移位指令包括算术移位指令、逻辑移位指令和循环移 位指令,分别进行左移和右移操作。这些指令均有统一的 语句格式:标号:操作符OPR,1或标号:操作符OPR,CL其功能为将目的操作数的所有位按操作符规定的方式 移动1位或按寄存器CL规定的次数(0255)移动,结果 送入目的地址。目的操作数是8位(或16位)的寄存器数 据或存储器数据。安徽理工人学计算机科学与技术系 咨敬龙汇编语言算术移位指令有:算术左移SAL(Shift Algebra ic Left)和算术右 移SAR(Shift Algebra ic Right)。它们的指令格式如下:SAL/SAR OPR,CL/Imm受影
44、响的标志位:CF、OF、PF、SF和ZF(AF无定义)。功能:算术左移SAL把目的操作数的低位向高位移,空出的低位补0;算术右移SAR把目的操作数的高位向低位移,空出的高位用最 高位(符号位)填补。算术左移 算术左移算术移位指令常用于带符号数*2或/2安徽理工人学计算机科学与技术系 咨敬龙汇编语言逻辑左移SHL(Shift Logic a l Left)和逻辑右移SHR(Shift Logic a l Right)。它们的指令格式如下:SHL/SHR OPR,CL/Imm受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)。逻辑左移/右移指令只有它们的移位方向不同,移位后空出的位都 补0
45、。-$一$一$一$一$一00EST1000H:0050H 一00000000000010000HAL$安徽理工人学计算机科学与技术系 咨敬龙汇编语言:取字符串数据指令(Loa d St ring Inst ruc t ion)功能:将SI所指的源串中的一个字节(或字)存储单元中的 数据取出来送入AL(或AX)中。即:字节操作:(SI)一AL,字操作:(SI)一AX。修改指针SL使它指向串中的下一个元素。当DF=0时,指令的格式:(SI)增量。当DF=1时,(SI)减量。LODS SRC(需在操作数中表明数据格式)LODSBLODSW(字节)(字)DsJ-DS:SI 一AL 或 AX安徽理工人学
46、计算机科学与技术系 咨敬龙汇编语言:串输入指令INS功能:将由DX寄存器指定的I/O端口中的字、字节传送到 附加段中的目的串中,并根据DF和数据类型来改变目的变 址寄存器的方向内容。指令格式:INSB;字节串输入:ES:DI一(DX),;DIDI 1INSW;字串串输入:ES:DI一(DX),;DIDI 2安徽理工人学计算机科学与技术系 咨敬龙汇编语言:串输出指令OUTS功能:将由源串中的字、字节传送到在DX寄存器指定的I/O端口 中,并根据DF和数据类型来改变源变址寄存器的方向内容。指令格式:OUTSB;字节串输出:(DX)DS:SI;SISI+I OUTSW;字串串输出:(DX)DS:SI
47、;SISI2安徽理工人学计算机科学与技术系 咨敬龙汇编语言2.与REPZ(REPNZ)配合工作的CMPS和SCAS指令:相等重复前缀指令REPE/REPZ一般格式为:REPE/REPZ CMPS/SCAS执行步骤如下:(1)判断条件:CXrO且ZF=1;(2)如果条件不成立,则结束重复操作,执行程序 中的下一条指令;(3)否则,CX=CX-1(不影响有关标志位),并执 行其后的字符串操作指令,在该指令执行完后,再转到 步骤(1)。安徽理工人学计算机科学与技术系 咨敬龙汇编语言:不等重复前缀指令REPNE/REPNZ一般格式为:REPNE/REPNZ CMPS/SCAS执行步骤如下:(1)判断条
48、件:CX邦且ZF=O;(2)如果条件不成立,则结束重复操作,执行程序中的下一 条指令;(3)否则,CX=CX-1(不影响有关标志位),并执行其后的 字符串操作指令,在该指令执行完后,再转到步骤(1)。安徽理工人学计算机科学与技术系 咨敬龙:串比较指令CMPS语句格式:CMPSB字节串比较CMPSW字串比较功 能:将SI所指的源串中的一个字节(或字)存储单元中的数据与DI所指的目的 串中的一个字节(或字)存储单元中的数据 相减,并根据相减的结果设置标志,但结果 并不保存。即:(SI)(DI)o修改串指针,使之指向串中的下一个 元素。当DF=O时,(SI)和(DI)增量。当 DF=1 时,(SI)
49、和(DI)减量。安徽理工人学计算机科学与技术系 咨敬龙汇编语言【例】比较两个字符串,找出它们 DS-不相匹的位置。nnATT iffnnTT20000H1 1 n 1 w J-L-2000H:1500H一PMOV SI,1500HEMOV DI,0200HMOV CX,17R-CLDJ_REPE CMPSB1 J一ES30000H3000Hi0200H_ pE1 二安徽理工人学计算机科学与技术系 咨敬龙汇编语言:串搜索指令SCAS语句格式:SCASB字节串搜索SCASW字串搜索功 能:AL(字节)或AX(字)中的内容 与DI所指的目的串中的一个字节(或字)存 储单元中的数据相减,根据相减结果设
50、置标 志位,结果不保存,即:字节操作:(AL)(DI),字操作:(AX)(DI)o修改指针使之指向串中的下一个元素。当DF=O时,(DI)增量。当DF=1时,(DI)减量。ESTES:DIAL 或 AX安徽理工人学计算机科学与技术系 咨敬龙汇编语言【例】从一个字符串中找出一个指定字符。MOV DI,0100HMOV AL,MOV CX,10HCLDES 一30000HREPNZ SCASB3000H:0100H 一AL*,E 亘安徽理工人学计算机科学与技术系 咨敬龙汇编语言3.3.5控制转移指令转移指令是汇编语言程序员经常使用的一组指令。在高级语言中,时常有“尽量不要使用转移语句”的劝告,但如