您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 汇编语言第三章宏汇编语言
1第三章汇编语言指令本章的内容包括:汇编语言程序设计方法机器指令常用的DOS系统功能调用3.1汇编语言程序设计方法一.汇编语言程序设计的一般步骤:1.分析问题,选择合适的解题方法。2.根据具体问题,确定输入输出数据的格式。3.分配存贮区并给变量命名,包括分配寄存器。4.绘制程序的流程图,将解题方法和步骤用程序流程图的形式表示出来。5.根据流程图编写程序。6.静态检查与动态调试2二.汇编语言程序设计的质量要求1.结构清晰、简明、易读、易调试。2.执行速度快。3.占用存储空间少。三.流程图符号说明1.起始、终止框2.判断框3.处理说明框4.子程序或过程调用框5.流向线,表示程序流向6.连接框,流程图较复杂时,连接框表示几部分之间的关系注意:起始框一条线出,终止框一条线入处理框和子程序框一条线入,一条线出判断框一条线入,两根线(多条线)出判断框中为陈述句判断框的分支上要标明Y和NYN33.2机器指令格式:[标号:]操作符OPD,OPS[;注释]注意:OPD、OPS类型一致OPD不能为立即数结果在OPD,OPS内容不变OPD、OPS不能为内存操作数如:MOVBYTEPTR[2000H],[2100H]3.2.1.数据传送指令功能:将数据、地址、立即数送入寄存器或存贮器。这类指令有:MOV、XCHG、XLAT、LEA、LDS、LES等。四.一般数据传送1.传送指令格式:MOVOPD,OPS功能:(OPS)→OPD。注意:寄存器←→寄存器;立即数→寄存器、存贮器;存贮单元←→寄存器。不能是:单元←→单元。42.数据交换指令格式:XCHGOPD,OPS功能:(OPD)→OPS,(OPS)→OPD。如:XCHGAX,BX若执行前:(AX)=5678H,(BX)=1234H执行后:(AX)=1234H,(BX)=5678H注意:寄存器←→寄存器,寄存器←→存贮器。有一个必须为寄存器。3.查表转换指令(换码指令)格式:XLATOPS;或XLAT功能:([BX+AL])→AL,将(BX)为首址,(AL)为位移量的字节单元数据→AL。此时字节单元物理位置PA=(DS)左移4位+(BX)+(AL)。该指令主要用于代码转换,如把字符转换成ASCII码。5五.地址传送指令1.传送偏移地址指令格式:LEAOPD,OPS等价于MOVOPD,OFFSETOPS。功能:OPS的偏移地址→OPD。如:LEAAX,BUF等价于MOVOPD,OFFSETBUF。注意:OPD必须为16位寄存器。2.传送偏移地址及数据首址指令格式:LDSOPD,OPS功能:(OPS)→OPD,(OPS+2)→DS。将OPS所指的4个字节内容送OPD和DS。如:LDSSI,[10H]执行前:(DS)=C000H,(C0010H)=180H,(C0012H)=2000H。执行后:(SI)=180H,(DS)=2000H。DATASEGMENTTABDB‘01234576’DATAENDS…MOVBX,OFFSETTABMOVAL,4XLATTAB…([BX+AL])=‘4’=34H,结果为4的ASCII码利用XLAT查出某数值的ASCII码。6注意:OPD必须为16位寄存器;OPS必须为存贮器地址,类型为DD。3.传送偏移地址及附加数据段指令格式:LESOPD,OPS功能:(OPS)→OPD,(OPS+2)→ES。与LDS指令类似。3.2.2.算术指令算术指令包括:加、减、乘、除及符号扩展指令指令的共同特点:对SF、OF、ZF、CF、AF等标志有影响,具体影响见教材附录。指令分类:二进制指令、十六进制指令。运算原则:有符号数在机内均用补码表示,最高位为符号位,计算机在运算时,不单独处理符号,而是将符号作为数值一起参加运算。主要讲二进制指令。1.加法指令ADDOPD,OPS;功能:(OPS)+(OPD)→OPDINCOPD;功能:(OPD)+1→OPD注意:OPD不能是立即数。72.减法指令SUBOPD,OPS;功能:(OPD)-(OPS)→OPDDECOPD;功能:(OPD)-1→OPDNEGOPD;功能:(OPD)+1→OPD。(求补)CMPOPD,OPS;功能:(OPD)-(OPS)不回送结果,只影响标志。例:求(AX)的绝对值。注意:如果是进行加、减运算,对有符号数,当OF=0时,运算结果正确;对无符号数,当CF=0时,结果正确。3.乘法指令4.(1)单操作数乘法指令有符号乘法:IMULOPS;无符号乘法:MULOPS;被乘数隐含在AX(AL)中。是字乘法还是字节乘法,由OPS决定。CMPAX,0JGEEXIT;(AX)≥0时,跳到EXITNEGAX;(AX)0时,求补,得到绝对值…EXIT:…8如:MOVAX,50HMOVBX,-10HIMULBX结果:(DX)=FFFFH,(AX)=FB00H。注意:目的操作数必须是AX(字乘法是AX,字节是AL)。OPS不能是立即数。除了对CF和OF有影响外,对其它标志的改变无意义。若MUL运算后,(AH)或(DX)为0,则CF、OF均为0;否则CF、OF均为1。对IMUL来说,若乘积的高一半是底一半的符号扩展,则CF、OF=0;否则CF、OF=1。同乘法一样,除法也有字和字节之分。如果是字除法,被除数也要求是双精度数。从单精度数到双精度数,涉及到符号扩展的问题。字节乘法:(AL)*(OPS)→AX字乘法:(AX)*(OPS)→DX、AX功能:双字乘法:(EAX)*(OPS)→EDX、EAX9(2)双操作数乘法指令格式:IMULOPD,OPS功能:(OPS)*(OPD)→OPD注意:目的操作数必须是16/32位寄存器源操作数可以是立即数。目的操作数和源操作数必须类型一致(3)3个操作数乘法指令注意:目的操作数必须是16/32位寄存器源操作数不能是立即数。目的操作数和源操作数必须类型一致格式:IMULOPD,OPS,n功能:(OPS)*n→OPD5.符号扩展指令补码的符号位扩展:8位补码(-1)=FFH,16位补码(-1)=FFFFH。(1)字节转换成字格式:CBW10功能:将AL中的符号扩展到AH中。如:MOVAL,-7CBWCBW执行前:(AL)=F9H,执行后:(AX)=FFF9H。(2)字转为双字格式:CWD功能:将AX的符号扩展到DX中。(3)字转为双字格式:CWDE功能:将AX的符号扩展到EAX中。(4)32位转为64位格式:CDQ功能:将EAX的符号扩展到EDX中。6.除法指令有符号除法:IDIVOPS;无符号除法:DIVOPS。功能:字节除法:(AX)/(OPS)→AL(商)、AH(余数)字除法:(DX、AX)/(OPS)→AX(商)、DX(余)双子除法:(EDA、EAX)/(OPS)→EAX(商)、EDX(余)由OPS决定是字节、字除法。11如:MOVAX,-4001HCWDMOVCX,4IDIVCX结果:(DX)=FFFFH(余数),(AX)=F000H(商)。MOVAX,-4001HCWDMOVCX,-4IDIVCX结果:(DX)=FFFFH(余数),(AX)=1000H(商)。注意:如果是无符号除法,被除数符号的扩展不能用CBW、CWD。只能:MOVAX,A;MOVDX,0。OPS不能为立即数。除数为0时,产生溢出,导致溢出中断。有符号除法,余数与被除数符号相同。123.2.3.位操作指令一.逻辑运算指令包括:求反、逻辑乘、测试、逻辑加、按位加等。1.求反格式:NOTOPD;功能:将OPD的内容逐位取反→OPD。该指令不影响标志位。注意与求补的区别。(求补NEGOPD)。如:NOTAH;执行前(AH)=20H,执行后:(AH)=DFH。2.逻辑乘格式:ANDOPD,OPS;功能:OPD∧OPS→OPD该指令对SF、ZF、PF、OF、CF有影响。运算规则:1∧1=1,1∧0=0,0∧1=0,0∧0=0。如:ANDDX,0FFH执行前:(DX)=ABCDH,执行后:(DX)=CDH。屏蔽高8位。再如:ANDAL,0FH执行前:(AL)=‘5’=35H,执行后:(AL)=5,得到‘5’字符的实际值5。AND也可作为运算符:13AEQU0B6HANDAL,AAND0FDH在汇编过程中,将式子AAND0FDH的值求出为:0B4H。3.测试指令(1)格式:TESTOPD,OPS功能:(OPD)∧(OPS),结果不回送,影响标志SF、ZF、PF。用途:检测与OPS中为1的位相对应的位是否为1。如:(2)格式:BTOPD,OPS功能:将OPD的指定位送到CF注意:OPD为16/32位OPS为立即数或寄存器若OPS绝对值大于OPD位数,则取模TESTAL,80HJNZH…H:MOVBX,CX…测AL最高位b7是否为0,不为0转移到H144.逻辑加格式:OROPD,OPS功能:(OPD)∨(OPS)→OPD,影响标志位:CF、OF、PF、SF、ZF。运算法则:1∨1=1,1∨0=1,0∨1=1,0∨0=0。如:ORAH,55H执行前:(AH)=0AAH,执行后:(AH)=0FFH5.按位加格式:XOROPD,OPS功能:(OPD)(OPS)→OPD,影响标志CF、OF、PF、SF、ZF等。运算法则:11=0,10=1,01=1,00=0。如:XORAX,AX执行后:(AX)=0,等价于MOVAX,0再如:XORAX,123HJZH…H:MOVBX,515ALCF…若(AX)=123H,则转移到H二.移位指令包括:算术、逻辑、循环移位。格式:[标号:]操作符OPD,n[标号:]操作符OPD,CL1.算术、逻辑移位(1)算术左移或逻辑左移SALOPD,n或SHLOPD,n功能:(OPD)向左移指定的次数,低位补0。如:SALAL,1执行前:(AL)=5,执行后:(AL)=0AH注意:每左移一次,相当于原来的数*2,左移n次,相当于*2n。(2)算术右移SAROPD,nCF0OPD00000010100ALCF00000101016功能:(OPD)向右移指定位数,最高位不变。右移n位,实现有符号数除2n运算。如:SARAH,2执行前:(AH)=0F4H,执行后:(AH)=0FDH。(3)逻辑右移SHROPD,n功能:(OPD)向右移指定位数,最高位补相应个数的0。右移n位,实现无符号数除2n运算。如:将AL中的压缩BCD码转换为非压缩BCD码。注意:算术移位适合于有符号数;逻辑移位适合于无符号数。CFOPDAHCF111111010…MOVAH,ALSHRAH,4;高位的BCD码变成8位ANDAL,0FH;低位的BCD码变成8位…结果在(AH)、(AL)中。CFOPD0172.循环移位指令(1)循环左移ROLOPD,n功能:(OPD)的最高位与最低位连成一个环,移位。(2)循环右移ROROPD,n功能:(OPD)的最低位与最高位连成一个环,移位。(3)带进位循环左移RCLOPD,n功能:(OPD)连同CF一起向左循环移动规定次数。如:将AX的高4位移到DX的低4位。CFOPDCFOPDCFOPD18(4)带进位循环右移RCROPD,n功能:(OPD)的连同CF一起向右循环移动规定次数。3.3常用DOS系统功能调用软件分为应用软件和系统软件,系统软件中最主要的就是操作系统,它提供一系列的功能调用。3.3.1.引言DOS提供75个系统功能调用,分为:设备管理、文件管理、目录管理、其它调用等。机器提供的是BIOS调用。MOVCX,4NEXT:SALAX,1RCLDX,1DECCXJNENEXTCFDXCFAX0CFOPD19一般来说,DOS系统功能调用的使用过程如下:1.功能号→AH2.设置好入口参数3.执行INT21H4.分析出口参数3.3.2.常用的输入/输出系统功能调用一.键盘输入(功能号1)格式:MOVAH,1INT21H功能:等待键盘输入一个字符,并将字符的ASCII码送到AL中,同时输入的字符在屏幕上显示(有回显)。如果输入的是Ctrl+Break则退出执行程序
本文标题:汇编语言第三章宏汇编语言
链接地址:https://www.777doc.com/doc-2368368 .html