第3章_ppt.txt

大学汇编语言程序设计-相伟-课件PPT

收藏

资源目录
跳过导航链接。
大学汇编语言程序设计-相伟-课件PPT.zip
压缩包内文档预览:
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:21836146    类型:共享资源    大小:11.91MB    格式:ZIP    上传时间:2019-09-06 上传人:QQ24****1780 IP属地:浙江
25
积分
关 键 词:
大学 汇编 语言程序设计 相伟 课件 ppt
资源描述:
大学汇编语言程序设计-相伟-课件PPT,大学,汇编,语言程序设计,相伟,课件,ppt
内容简介:
21世纪高等院校规划教材汇编语言程序设计相 伟 主编徐小平 李珍香 副主编中国水利水电出版社第3章顺序程序设计 本章主要讲解汇编语言中的常用机器指令和顺序程序设计方法。通过本章学习,读者应该掌握以下内容:数据传送指令算术运算指令逻辑运算和移位指令处理机控制指令顺序程序设计方法3.1 数据传送指令数据传送是计算机中最基本、最重要的一种操作。数据传送指令主要负责把数据、地址或立即数传送到寄存器或存储单元中。它又可分为通用数据传送指令、地址传送指令、I/O指令和标志寄存器传送指令等四组。除标志寄存器传送指令外,均不影响标志位。本节主要介绍通用数据传送指令和地址传送指令。3.1.1 通用数据传送指令 通用数据传送指令包括MOV、XCHG和XLAT三条指令。1数据传送指令MOV指令格式:MOV dest , src功能:将源操作数传送至目的地址中,源操作数保持不变,即dest(src)。其中:MOV为操作码助记符; dest为目的操作数,可以是通用寄存器、段寄存器、存储单元; src为源操作数,可以是立即数、通用寄存器、段寄存器、存储单元。MOV指令可以实现CPU内部通用寄存器之间、寄存器和存储单元之间、立即数到存储单元、立即数到内部通用寄存器的数据传送。具体传送路径如图3-1所示:图中箭头离开的操作数为源操作数,箭头指向的操作数为目的操作数。(1)立即数到通用寄存器的传送立即数传送到通用寄存器主要用于给通用寄存器赋初值,立即数(8位或16位)与通用寄存器的类型必须匹配。立即数可以是各种数制(十进制、二进制、八进制、十六进制)的常数、ASCII字符和符号常数。例3-1:分析下列立即数到通用寄存器的传送指令。MOV AL ,6 ;AL6,字节传送MOV AX ,10 ;AX10,字传送MOV AL ,1000H ;非法指令,1000H为字,AL为字节寄存器MOV CX ,0FFH ;CX0FFH,字传送(十六进制)MOV AL ,1010B ;AL00001010B,字节传送(二进制)MOV AL ,$ ;AL24H(2)通用寄存器之间的数据传送CPU内部通用寄存器之间可以相互传送,传送时要注意两操作数类型必须匹配,即同为字节型或同为字型。例3-2:分析下列各条指令。MOV AX ,BX ; AX(BX),字型MOV CL ,AL ; CL(AL),字节型MOV AL ,CX ; 非法指令,两操作数类型不一致(3)通用寄存器与存储单元之间数据传送通用寄存器与存储单元之间相互传送数据时,传送类型由通用寄存器类型来定。例3-3:分析下列各条指令。MOV 2000H ,AL ; 2000H(AL),字节型传送MOV 2000H ,AX ;2000H(AL),2001H(AH),字型传送MOV BH ,1050H ;BH(1050H),字节型传送MOV BX ,1050H ;BL(1050H),BH (1051H),字型传送(4)通用寄存器与段寄存器之间、存储单元与段寄存器之间的数据传送由于段寄存器皆为16位寄存器,因此,通用寄存器与段寄存器之间、存储单元与段寄存器之间只能是字传送。另外,CS段寄存器不能作为传送指令的目标操作数。例3-4:分析下列各条指令。MOV DS ,AX ;DS(AX)MOV BX ,CS ;BX (CS)MOV CS ,AX ;非法指令,不允许给CS寄存器赋值MOV DS ,AL ;非法指令,操作数的类型不匹配MOV 2000H ,DS ;将16位段寄存器DS的内容送入1000H (低字节)和1001H(高字节)单元中(5)立即数传送到存储单元当存储单元的类型不确定时,必须用BYTE PTR 或WORD PTR属性操作符来指定存储单元的类型。例3-5:分析下列各条指令。MOV BUF1,20 ;BUF1为字节变量MOV SUM,0FFFFH ;SUM为字变量MOV BYTE PTR 1000H,8 ;字节型传送,表示将08传送到 1000H单元中MOV WORD PTR 1000H,8 ;字传送,将08传送到1000H 单元, 将00传送到1001H单元MOV 2000H ,10H ; 非法指令,无法确定操作类型 MOV指令不改变源操作数内容,不影响标志位。 源操作数和目的操作数应该有相同的类型,即必须同为字节型或同为字型。 代码段寄存器CS不能用作目的操作数,即不允许给CS赋值。 立即数不能用作目的操作数,立即数也不能直接传送给段寄存器。以上介绍了MOV指令的各种形式,具体应用时要特别注意以下几点:例3-6:若要设置数据段寄存器DS的初值为2000H,不能直接用指令 MOV DS,2000H 可用如下两条指令表示: MOV AX,2000H MOV DS,AX例3-7:交换两个存储单元BUF1和BUF2的内容。MOV AX ,BUF1 ; AX (BUF1)MOV BUF2 ,AX ; BUF2 (AX) 不允许在段寄存器之间直接传送数据。例如:MOV DS,ES 为非法指令。 源操作数和目的操作数不能同时为存储单元操作数。2交换指令XCHG指令格式:XCHG dest , src功能:将源操作数和目的操作数的内容互换,不影响标志位。其中:XCHG为操作码助记符; dest为目的操作数,可以是通用寄存器或存储单元; src为源操作数,可以是通用寄存器或存储单元。说明:XCHG指令中操作数可以是字,也可以是字节。可以在通用寄存器与通用寄存器之间、通用寄存器和存储单元之间交换数据。但不允许在两个存储单元之间直接交换数据。指令执行后不影响状态标志位。例3-8:下列三条指令执行后,将寄存器AX和BX的内容互换。MOV AX ,1234H ;(AX) 1234HMOV BX ,5678H ; (BX) 5678HXCHG AX ,BX ;(AX) 5678H ,(BX) 1234H3换码指令XLAT指令格式: XLAT 或 XLAT 标号功能:将以(BX)为首址、(AL)为偏移量的字节存储单元中的内容传送给AL,即:AL(BX)(AL)。其中:XLAT为操作码助记符;说明:换码指令的两种格式完全等效。标号表示首地址,是为了提高程序的可读性而设置的。本指令只能是字节操作。指令执行结果不影响标志位。换码指令常用于代码转换,即将一种代码转换为另一种代码。例3-9:分析下列程序段。DATA SEGMENT TAB DB 0123456789ABCDEFDATA ENDSMOV BX ,OFFSET TAB ; BXTAB的偏移地址MOV AL ,6 ;将TAB表中第七项的偏移地址6送AL中XLAT TAB ;(AL) 36H该程序段的功能就是将AL中的一位十六进制数转换成对应的ASCII码。3.1.2 地址传送指令8086/8088中有三条地址传送指令:LEA、LDS和LES。1传送偏移地址指令LEA指令格式:LEA dest , src功能:按源操作数提供的寻址方式计算偏移地址,并将其送入目的操作数中。其中:LEA为操作码助记符; dest为目的操作数,只能是16位通用寄存器; src为源操作数,只能是存储单元。该指令的执行不影响标志位。例3-10:阅读下面程序段,分析各条指令的执行过程。DATA SEGMENTBUF1 DB ABCDEFNUM DW 20 ,35 ,-10COUNT DW 0DATA ENDS MOV BX ,OFFSET NUM ;将NUM的偏移地址6送入BX中 LEA BX ,NUM ;将NUM的偏移地址6送入BX中 MOV AX ,BX ;将偏移地址为6的单元中内容20送入AX LEA AX ,BX ;将BX所指存储单元的偏移地址6送AX中 MOV COUNT ,OFFSET BUF1 ;将BUF1的偏移地址送COUNT LEA COUNT ,BUF1 ;非法指令,目的操作数是存储单元 上述程序段中指令前面的数字标号是为方便说明问题而加的。2传送偏移地址及数据段首址指令LDS指令格式:LDS dest ,src功能:将源操作数所指存储单元中的第一个字传送给指定的16位通用寄存器,第二个字传送给段寄存器DS,即dest (src),DS (src 2)。其中:LDS为操作码助记符; dest为目的操作数,只能是16位通用寄存器; src为源操作数,只能是存储单元(四个字节)。该指令执行结果不影响标志位。例3-11 :有如下指令 LDS DI ,20H指令执行前,假设:(DS) C000H , (C0020H) 34H , (C0021H) 12H , (C0022H) 00H , (C0023H) 60H指令执行后, (DI) 1234H ,(DS) 60003传送偏移地址及附加数据段指令LES指令格式:LES dest , src功能:将源操作数所指存储单元中的第一个字传送给指定的16位通用寄存器,第二个字传送给段寄存器ES,即dest(src) , ES(src2)3.2 算术运算指令8086/8088的算术运算指令主要包括二进制运算指令和十进制调整指令。二进制算术运算指令是指对二进制数进行加、减、乘、除运算的指令。它们中有单操作数指令,如加1指令INC、减1指令DEC、求补指令NEG等;也有双操作数指令,如加法指令ADD、减法指令SUB、乘法指令MUL、除法指令DIV等。单操作数指令的操作数不允许用立即数和段寄存器,而双操作数指令的两个操作数中除源操作数为立即数情况外,其中必须有一个是寄存器操作数。除加1、减1指令不影响CF,其余指令均对CF、OF、ZF、SZ、PF、AF产生影响。3.2.1 加法类指令包括ADD、ADC和INC三条指令,执行字或字节的加法运算。1加法指令ADD指令格式:ADD dest , src功能:将目的操作数与源操作数相加,结果保存在目的操作数单 元中,源操作数保持不变。即dest (dest)(src) 。其中:ADD为操作码助记符; dest为目的操作数,可以是通用寄存器或存储单元; src为源操作数,可以是立即数、通用寄存器或存储单元。指令执行后对状态标志CF、OF、ZF、SZ、PF、AF产生影响。例3-12:分析下列指令执行后AX、CX寄存器和标志寄存器中各状态位的值。 ADD AX ,CX指令执行前,假设(AX) 022AH,(CX) 14E8H。具体执行过程用二进制表示如下: 0000 0010 0010 1010 B 0001 0100 1110 1000 B 0001 0111 0001 0010 B由上式可知,最高位无进位,CF0;低四位有进位,AF1;最高位为0,SF0;运算结果不为0,ZF0;运算结果中1的个数为偶数,PF1;运算结果无溢出,OF0。指令执行后,CF0 , AF1,SF0,ZF0 , PF1, OF0。(AX) 022AH 14E8H 1712H;(CX) 14E8H,内容不变。2带进位加法指令ADC指令格式:ADC dest , src功能:与ADD指令基本相同,区别是ADC指令执行时要将进位标志位CF加进去。即 dest (dest)(src) CF。该指令主要用于多字节数或多字数的相加运算。在多字节或多字相加时,先进行低字节或低字相加(用ADD指令实现),再进行高字节或高字相加。在进行高字节或高字相加时必须加上低位的进位CF。例3-13:分析以下程序段DATA SEGMENTNUM1 DW 5678H ,1234H ; 双精度数12345678HNUM2 DW 0ABCDH ,6789H ; 双精度数6789ABCDHSUM DW 0 ,0DATA ENDS MOV AX ,NUM1 ADD AX ,NUM2 ;两低位字相加 MOV SUM ,AX ;和放在SUM中 MOV AX ,NUM12 ADC AX ,NUM22 ;两高位字相加,同时加上进位CF MOV SUM2 ,AX 该例完成两个双精度数的加法运算。运算过程如下所示: 两低位字相加 0101 0110 0111 1000 B5678H 0ABCDH 0245H + 1010 1011 1100 1101 B进位CF 1 1 0000 0010 0100 0101 B 两高位字相加 0001 0010 0011 0100 B1234H + 6789H 79BDH 0110 0111 1000 1001 B 0111 1001 1011 1101 B再加进位CF 1 B 79BDH +1 79BEH 0111 1001 1011 1110 B3加1指令INC指令格式:INC dest功能:操作数自身加1,结果再送回到原操作数单元中。即dest(dest)1 。其中:INC为操作码助记符; dest为操作数,可以是通用寄存器或存储单元,若 为存储单元,必须指明其操作类型(字或字节)。该指令执行结果影响除CF外的所有条件标志,主要用于对计数器或地址指针的调整,常用在循环结构程序中。例3-14:以下指令可实现对寄存器或存储单元加1(注意存储单元的类型)。 INC AL INC CX INC WORD PTR BX INC BYTE PTR 1000H3.2.2 减法类指令包括SUB、SBB、DEC、NEG和CMP五条指令,执行字或字节的减法运算。1减法指令SUB指令格式:SUB dest , src功能:将目的操作数与源操作数相减,结果保存在目的操作数单元中,源操作数保持不变。即dest(dest)(src) 。其中:SUB为操作码助记符; dest为目的操作数,可以是通用寄存器或存储单元; src为源操作数,可以是立即数、通用寄存器或存储单元。例3-15:分析下列指令MOV AX ,8765HSUB AX ,1234H上述两条指令可以对两个立即数8765H与1234H求差运算,最终结果保存在AX中,即(AX) 7531H2带借位减法指令SBB指令格式:SBB dest , src功能:与SUB指令基本相同,区别是SBB指令执行时要减去借位标志CF。即dest(dest) (src)CF。该指令主要用于多字节数或多字数相减运算。运算时,先进行低字节或低字相减(用SUB指令实现),再进行高字节或高字相减。在进行高字节或高字相减时,必须减去低位的借位CF。例3-16:有两个双精度数0A1365724H和9248B578H,计算两数之差,结果的高位放在DX中,低位放在AX中。程序段如下: MOV AX ,5724H SUB AX ,0B578H ;低字相减,有借位 MOV DX ,0A136H SBB DX ,9248H ;高字相减,再减去借位3减1指令DEC指令格式:DEC dest功能:操作数自身减1,结果送回到原操作数单元中。即dest(dest)1 。其中:DEC为操作码助记符; dest与INC指令中规定相同。注意:该指令不影响进位标志CF的状态,常用在循环结构程序中。例3-17:DEC CX ;CX(CX)1DEC BYTE PTRBX ;必须指明存储单元的操作类型(字或字节)4求补指令NEG指令格式:NEG dest功能:将目的操作数按位取反后加1,送回原操作数单元中。即dest0(dest) 。其中:NEG为操作码助记符; dest与INC指令中规定相同。注意:该指令影响所有的条件标志。例3-18:分析下列指令的执行结果。 NEG AX指令执行前,(AX) 10H指令执行后,(AX) (0010H)1 0FFF0H例3-19:假设有一双精度数,低字保存在AX中,高字保存在DX中。若要求其补码,可用如下指令实现: NEG AX MOV BX ,0 SBB BX ,DX MOV DX ,BX5比较指令CMP指令格式:CMP dest , src功能:目的操作数减源操作数,但不送结果。即 (dest)(src) 。其中:CMP为操作码助记符; dest为目的操作数,可以是通用寄存器或存储单元; src为源操作数,可以是立即数、通用寄存器或存储单元。该指令与SUB指令一样执行减法操作,但不回送相减结果,仅影响全部状态标志位。CMP指令通常用在选择结构程序中,其后紧跟着条件转移指令,用来根据比较结果转向不同的程序分支。例3-20:比较AX是否大于100,可用如下代码段实现。 CMP AX ,100 ;(AX)100 JB BELOW ;若(AX)100,则转移 到BELOW执行 SUB AX ,100 ;否则,AX(AX)100 BELOW: 3.2.3 乘法指令乘法指令用来实现两个二进制操作数的字节或字相乘运算。根据操作数是无符号数还是带符号数,乘法指令可分为无符号数乘法指令和带符号数乘法指令两种。1无符号数乘法指令MUL指令格式:MUL src功能:两个无符号数相乘。 字节乘法:AX(AL)*(src) 字乘法: DX(高字),AX(低字)(AX)*(src)其中:MUL为操作码助记符; src为源操作数(乘数),可以是寄存器或存储单元,但不能使用立即数或段寄存器。注意:指令中只指定乘数,被乘数默认在寄存器AL或AX中。该指令只影响状态标志CF和OF,对其它标志位无定义。例3-21:假设(AL) 0B5H,(BL) 12H,分析下列指令的执行情况。 MOV AL,0B5H MUL BL指令执行前,(AL) 0B5H,为无符号数181; (BL) 12H,为无符号数18。执行指令时,字节相乘,(AL)(BL) 3258 0CBAH。指令执行后,(AX)0CBAH,OFCF1例3-22:假设(AL) 0B5H,(BL) 12H,分析下列指令的执行情况。 IMUL BL指令执行前,(AL) 0B5H,为带符号数75; (BL) 12H,为无符号数18。执行指令时,字节相乘,(AL)(BL) 1350 0FABAH。指令执行后,(AX) 0FABAH,OFCF12带符号数乘法指令IMUL指令格式:IMUL src功能:两个带符号数相乘。 字节乘法:AX(AL)*(src) 字乘法:DX(高字),AX(低字)(AX)*(src)其他说明同MUL指令。该指令只影响状态标志CF和OF,对其它标志位无定义。指 令执行后,如果乘积的高一半是低一半的符号扩展,则OF CF0;否则,OFCF1。例3-22:假设(AL) 0B5H,(BL) 12H,分析下列指令的执行情况。 IMUL BL指令执行前,(AL) 0B5H,为带符号数75; (BL) 12H,为无符号数18。执行指令时,进行字节相乘,(AL)(BL) 1350 0FABAH。指令执行后,(AX) 0FABAH,OFCF13.2.4 除法指令除法指令用来实现两个二进制操作数的字节或字相除运算。根据操作数不同,又分为无符号数除法指令和带符号数除法指令。1无符号数除法指令DIV指令格式:DIV src功能:两个无符号数相除。 字节除法:AL(AX)(src)的商 AH(AX)(src)的余数 字除法: AX(DX,AX)(src)的商 DX(DX,AX)(src)的余数其中:DIV为操作码助记符; src为源操作数(除数),可以是寄存器或存储单元,但 不能使用立即数或段寄存器。注意:指令中只指定除数,被除数默认在寄存器AX或(DX、 AX)中。该指令对所有状态标志位无定义。例3-23:假设(AX)0CBAH,(BL) 12H,分析下列指令的执行情况。 DIV BL指令执行前,(AX)0CBAH,为无符号数3258; (BL) 12H,为无符号数18。执行指令时,进行字节相除,(AX)(BL)3258181810B5H,余数为0。指令执行后,(AH) 0,(AL) 0B5H2带符号数除法指令IDIV指令格式:IDIV src功能:两个带符号数相除。字节除法:AL(AX)(src)的商 AH(AX)(src)的余数 字除法:AX(DX,AX)(src)的商 DX(DX,AX)(src)的余数IDIV执行与DIV相同,但操作数为带符号数。相除后,商的符号与数学上规定相同,即两个同符号数相除,商为正数,两个异符号数相除,商为负数;余数与被除数同号。在例3-23中,若(AX)0CBAH,(BL) 12H,均为带符号数,请自己分析用带符号数的除法指令执行后的结果。3.2.5 符号扩展指令在实际应用中,我们有时需要将操作数由字节型转换成字型,或由字型转换成双字型。这时不能简单地通过在高位补0的方法实现,因为带符号数在计算机中是以补码形式存放。扩展时,正数前补0,负数前全补1。为便于扩展,8086/8088提供了两条符号扩展指令CBW和CBD。1字节扩展指令CBW指令格式:CBW功能:将AL中数的符号位扩展到AH中。若AL中的数为正数,则(AH)00,若AL中的数为负数,则(AH)0FFH。例3-24:分析下列程序段的执行过程。 MOV AL,-15 ;AL0F1H CBW执行上述2条指令后,(AX) 0FFF1H。2字扩展指令CWD指令格式:CWD功能:将AX中数的符号位扩展到DX中。若AX中的数为正数,则(DX)0000,否则(DX)0FFFFH。例3-25:有如下程序段 MOV DX,0 MOV AX,0FA48H CWD指令执行后,(AX) 0FA48H,(DX) 0FFFFH。注意:以上两条指令在使用时均不带操作数,即它们只能对隐含的累加器中的内容进行操作。例3-26:阅读程序,分析程序完成功能。STACK SEGMENT STACK DB 200 DUP(?)STACK ENDSDATA SEGMENTX DW 25Y DW 140Z DW 235BUF DW 2 DUP(0) DATA ENDSCODE SEGMENT ASSUME DS:DATA , CS:CODE , SS:STACKBEGIN: MOV AX ,DATA MOV DS ,AX ;数据段首址送DS MOV AX ,X IMUL Y ;DX,AXX*Y MOV CX ,AX MOV BX ,DX MOV AX ,Z CWD ;对Z进行符号扩展 ADD AX ,CX ADC DX ,BX ;DX,AXX*Y+Z SUB AX ,385 SBB DX ,0 ;DX,AXX*Y+Z-385 IDIV X MOV BUF , AX MOV BUF+2 ,DX MOV AH ,4CH INT 21H ;程序结束CODE ENDS END BEGIN该程序综合运用了前面介绍的加、减、乘、除算术运算指令,完成如下算式: (25*140+235-385)/25最终将计算结果的商86H存入BUF单元,余数00H存入BUF+2单元中。3.3 位操作指令位操作指令又分为逻辑运算指令和移位指令,它们均可直接对寄存器或存储单元中的位进行操作。3.3.1 逻辑运算指令逻辑运算指令用来对字或字节按位进行逻辑运算,包括逻辑非NOT、逻辑与AND、逻辑或OR、逻辑异或XOR、测试TEST等五条指令。1逻辑非指令NOT指令格式:NOT dest功能:将目的地址中的内容逐位取反后再送回 目的地址中。即dest (dest) 。例3-27: MOV AL ,56H ;(AL) 01010110B NOT AL ;(AL) 10101001B 0A9H说明:NOT指令是单操作数指令,该操作数可以是立即数以外的任何寻址方式。NOT指令不影响标志位。2逻辑与指令AND指令格式:AND dest , src功能:将目的操作数和源操作数按位“与”,结果存入目的地址中。即dest (dest)(src) 。“与”运算的规则为:111,100,010,000。该指令可以屏蔽操作数中的某些位,使其余位保持不变。要屏蔽的位与0相“与”,不变的位与1相“与”。例3-28:ASCII码转换成对应的二进制数。MOV AL ,35H ;(AL)35HAND AL ,0FH ;(AL) 05H执行上述两条指令后,AL寄存器高4位被屏蔽,低4位保持不变。3逻辑或指令OR指令格式:OR dest , src功能:将目的操作数与源操作数按位“或”,结果存入目的地址中。即dest (dest)(src) 。“或”运算的规则是:111,101,011,000。该指令可以将操作数的某些位置1,其余位保持不变。要置1的位与1“或”,不变的位与0“或”。例3-29:二进制数转换成对应的ASCII码。 MOV AL ,09H ;(AL) 00001001B OR AL ,30H ; 00001001B00110000B 00111001B39HAL 例3-30:要将AL寄存器中的第5位置1。 MOV AL ,46H ;(AL) 01000110B OR AL ,20H ; 01000110B00100000B 01100110B66HAL4逻辑异或指令XOR指令格式:XOR dest , src功能:将目的操作数与源操作数按位“异或”,结果存入目的地址中。即dest (dest)(src) 。“异或”运算的规则是:110,101,011,000。该指令可以将操作数的某些位变反,其余位保持不变。要变反的位与1“异或”,不变的位与0“异或”。例3-31:使AL的低4位变反,高4位不变。 MOV AL ,55H ;(AL) 01010101B XOR AL ,0FH ; 01010101B00001111B 01011010B5AHAL另外, 如果操作数自身按位“异或”,则可以将操作数清零。语句 XOR AX,AX 等价于 MOV AX,0。5测试指令TEST指令格式:TEST dest , src功能:将目的操作数和源操作数按位“与”,结果不送入任何操作数单元中。 即: (dest)(src) 。该指令和AND指令一样执行按位“与”的操作,但不保存结果,主要用于位测试,它的后面通常跟着转移指令,根据测试结果决定转移方向。例3-32:要测试寄存器AL的最低位是否为1,为1则转移到EXIT执行,代码如下: TEST AL ,01H JNZ EXIT EXIT:例3-33:要测试寄存器AX第7位和第15位是否同时为0,为0则转OVER,代码如下: TEST AX ,8080H JE OVER OVER:3.3.2 移位指令移位指令可以对操作数按位向左或向右移动,根据移动方式的不同,可分为算术移位指令、逻辑移位指令和循环移位指令。1逻辑移位指令(1)逻辑左移指令SHL指令格式:SHL dest , 1 或 SHL dest , CL功能:将dest的内容向左移动指定的位数,最高位移入CF中,低位补0。其中:SHL为操作码助记符; dest为通用寄存器或存储单元,若为存储单元,应指定其类型。 源操作数 1表示将目的操作数向左移动一位,若移位次数大于1,应预先将移位次数置于CL中。指令执行情况 如图3-3所示:例3-34:分析以下程序段。MOV BX ,4 ;(BX) 00000100BMOV CL ,2SHL BX ,CL ;将BX内容左移2位, (BX) 00010000B,CF0执行程序段以后,(BX)10H16,相当于乘以2的2次方。由此可见,逻辑左移指令可以方便地实现操作数乘运算(n为移位次数)。不过在使用中要注意是否会发生溢出,否则会得出错误结果。(2)逻辑右移指令SHR指令格式:SHR dest ,1 或 SHR dest ,CL功能:将dest的内容向右移动指定的位数,最低位移入CF中,高位补0。其中:SHR为操作码助记符; dest为通用寄存器或存储单元,若为存储单元,应指定其类型。源操作数1表示将目的操作数向右移动一位,若移位次数大于1,应预先将移位次数置于CL中。指令执行情况如图3-4所示:例3-35:分析以下程序段。MOV BX ,24H ;(BX) 36 00100100BMOV CL ,2SHR BX ,CL ;将BX内容右移2位, (BX) 00001001B,CF0执行程序段以后,(BX) 09H 9,相当于除以2的2次方。由此可见,逻辑右移指令可以方便地实现操作数除运算(n为移位次数)。不过在使用中要注意操作数应该为无符号数,否则会得出错误结果。2算术移位指令(1)算术左移指令SAL指令格式:SAL dest , 1 或 SAL dest , CL功能:其操作与逻辑左移指令SHL完全相同,不再介绍。(2)算术右移指令SAR指令格式:SAR dest ,1 或 SAR dest ,CL功能:将dest的内容向右移动指定的位数,最低位移入CF中,最高位保持不变。其中:SAR为操作码助记符; 其它说明同前。指令执行情况如图3-5所示:例3-36:分析以下程序段。MOV BX ,0DCH ;(BX) -36 11011100BMOV CL ,2SAR BX ,CL ;将BX内容右移2位, (BX) 11110111B,CF0执行程序段以后,(BX)0F7H-9,相当于除以2的2次方。由此可见,算术右移指令可以方便地实现对有符号操作数除运算(n为移位次数)。3循环移位指令(1)循环左移指令ROL指令格式:ROL dest ,1 或 ROL dest ,CL功能:将dest的内容向左移动指定的位数,最高位同时移入最低位和CF中。其中:ROL为操作码助记符; 其它说明同前。指令执行情况如图3-6所示:例3-37:分析以下程序段。MOV AX ,1234H ;(AX) 0001001000110100BMOV CL ,8ROL AX ,CL ;将AX内容循环左移8位 (AX) 0011010000010010B,CF0执行程序段以后,(AX)3412H,相当于将高8位与低8位交换。由此可见,循环移位指令可以改变操作数中原有位的位置。(2)循环右移指令ROR指令格式:ROR dest ,1 或 ROR dest ,CL功能:将dest的内容向右移动指定的位数,最低位同时移入最高位和CF中。其中:ROR为操作码助记符; 其它说明同前。指令执行情况如图3-7所示:(3)带进位的循环左移指令RCL指令格式:RCL dest ,1 或 RCL dest ,CL功能:将dest的内容连同CF标志一起向左循环移动所规定的位数。其中:RCL为操作码助记符; 其它说明同前。指令执行情况如图3-8所示:例3-38:将AX中的最高位移至BX的最低位,可用如下语句实现:RCL AX ,1 ;将AX中的最高位移至CF中RCL BX ,1 ;将CF的内容移至BX的最低位(4)带进位的循环右移指令RCR指令格式:RCR dest , 1 或 RCR dest , CL功能:将dest的内容连同CF标志一起向右循环移动所规定的位数。其中:RCR为操作码助记符; 其它说明同前。指令执行情况如图3-9所示:3.4 处理机控制指令处理机控制指令主要是对状态寄存器Flags中的位以及CPU的运行状态进行控制。主要指令如下:进位标志清零指令CLC进位标志置1指令STC方向标志清零指令CLD方向标志置1指令STD中断标志清零指令CLI中断标志置1指令STI空操作指令NOP停机指令HLT等待指令WAIT3.5 顺序程序设计方法顺序程序结构是最基本、最简单的程序结构,即完全按指令书写的前后顺序执行每一条指令。从流程图上看,顺序结构的程序只有一个起始框、一个终止框和一至几个处理框。程序无分支、无循环,按直线形式顺序执行。设计这种程序的方法十分简单,只要遵照算法步骤依次写出相应的指令即可。设计时主要考虑如何选择简单有效的算法,如何选择存储单元和寄存器。实际应用中单纯的顺序结构程序非常少见,但这种程序结构是其它程序结构如分支、循环、子程序的主体。下面通过几个例子介绍顺序程序设计的基本思想。例3-39:假设(BX)= 00F8H,计算(BX)10 (BX)。分析:本例算法比较简单,要实现两个数的乘法运算,可以直接用乘法指令实现。考虑到运算结果不会产生溢出,我们可以选用加法及移位指令来代替乘法。具体算法如下:左移指令可以方便地实现将操作数乘 2 的整数次方(2、4、8、16),由于本例的乘数10不是 2 的整数次方,因此我们可以再结合加法运算来实现,即 (BX)10 =(BX)8 +(BX)+(BX)。源
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:大学汇编语言程序设计-相伟-课件PPT
链接地址:https://www.renrendoc.com/p-21836146.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!