《第四章汇编语言序程设计文档资料》由会员分享,可在线阅读,更多相关《第四章汇编语言序程设计文档资料(24页珍藏版)》请在金锄头文库上搜索。
1、第四章 汇编语言程序设计第四章第四章 汇编语言程序设计汇编语言程序设计4.1 4.1 汇编语言汇编语言4.2 4.2 顺序结构程序顺序结构程序4.3 4.3 分支程序设计分支程序设计4.4 4.4 循环程序设计循环程序设计4.5 4.5 子程序设计子程序设计Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计4.1 汇编语言汇编语言4.1.1 4.1.1 汇编语言及语句格式汇编语言及语句格式 汇编
2、汇编 汇编语言源程序汇编语言源程序 目标程序目标程序1 1、指令语句指令语句 标号:标号: 助记符助记符 操作数操作数 ;注释;注释2 2、伪指令语句伪指令语句 名字名字 定义符定义符 参数参数 ;注释;注释Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计4.1.2 4.1.2 数据定义伪指令格式数据定义伪指令格式 DB DB DW DW变量变量 DD DD 表达式表达式1 1,表达式,表达式
3、2 2, DQ DQ DT DT 此伪指令把存储单元中的数与一个变量联系起此伪指令把存储单元中的数与一个变量联系起来。其中:来。其中:DB-DB-字节类型字节类型 DW- DW-字类型字类型 DD- DD-双字类型双字类型 DQ- DQ-四字类型四字类型 DT- DT-五字类型五字类型 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计格式中表达式可以是:格式中表达式可以是:1 1、一个或多个常
4、数、一个或多个常数/ /数值表达式数值表达式 例如例如2 2、不带引号的?或带引号的字符串、不带引号的?或带引号的字符串 例如例如3 3、重复方式、重复方式DUPDUP 格式:变量格式:变量 定义符定义符 表达式表达式1 DUP1 DUP(表达式(表达式2 2) 其中,表达式其中,表达式1 1为重复次数为重复次数 表达试表达试2 2为重复内容为重复内容 例如例如4 4、定义过的变量、定义过的变量/ /标号标号 如如 DATA11 DW DATA1 DATA11 DW DATA1 DATA12 DD DATA2 DATA12 DD DATA2 GOGO Evaluation only.Creat
5、ed with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计DATA1 DB 30HDATA1 DB 30HDATA2 DW 0240HDATA2 DW 0240H,3500H 3500H DATA1DATA1DATA3 DB (-1*3)DATA3 DB (-1*3),(16/4)(16/4) DATA2 DATA2DATA4 DD 34567HDATA4 DD 34567H DATA3DATA3 DATA4DATA4 返回返回30H40H02
6、H00H35HFDH04H67H45H03H00HEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计DATA5 DB ?DATA5 DB ?DATA6 DW ? DATA6 DW ? DATA5DATA5DATA7 DB ABCDDATA7 DB ABCD DATA6DATA6DATA8 DW AB,CDDATA8 DW AB,CD DATA7DATA7 DATA8DATA8 返回返回-41H4
7、2H43H44H42H41H44H43HEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计DATA9 DW 2 DUP DATA9 DW 2 DUP (?)(?)DATA10 DB 2 DUP(5,2 DUP(0)DATA10 DB 2 DUP(5,2 DUP(0) DATA9DATA9 DATA10 DATA10 返回返回-05H00H00H05H00H00HEvaluation only.C
8、reated with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计变量和标号的属性变量和标号的属性 变量定义数据的逻辑地址变量定义数据的逻辑地址, ,其属性有段属性、偏移地址属其属性有段属性、偏移地址属性、类型属性。性、类型属性。 其类型属性如下:其类型属性如下:BYTE-BYTE-字节字节 WORD- WORD-字字 DWORD- DWORD-双字双字 PWORD- PWORD-三字三字 QWORD- QWORD-四字四字 TWORD- TW
9、ORD-五字五字 标号定义指令的逻辑地址,其属性有段属性、偏移地址标号定义指令的逻辑地址,其属性有段属性、偏移地址属性、距离属性。属性、距离属性。 其距离属性如下:其距离属性如下:NEAR-NEAR-近程(默认)近程(默认) FAR- FAR-远程远程Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计4.1.3 4.1.3 段定义伪指令格式段定义伪指令格式1 1、简化的段定义伪指令、简化的段定义
10、伪指令.MODEL-.MODEL-内存模式说明内存模式说明 (TINYTINY、SMALLSMALL、MEDIUMMEDIUM、COMPACTCOMPACT、LARGELARGE).X86-.X86-选择选择80X8680X86指令系统指令系统.X86P-.X86P-选择选择80X8680X86保护模式指令系统保护模式指令系统.DATA-.DATA-定义数据段定义数据段.STARTUP.STARTUP指示程序开始指示程序开始, ,初始化初始化DS,SSDS,SS.CODE-.CODE-定义代码段定义代码段.STACK-.STACK-定义堆栈段定义堆栈段.EXIT-.EXIT-返回操作系统返回操
11、作系统 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计2 2、完整的段定义伪指令、完整的段定义伪指令(1)(1)段定义伪指令段定义伪指令 段名段名 SEGMENT SEGMENT 属性属性 段名段名 ENDS ENDS(2)(2)段寄存器定义伪指令段寄存器定义伪指令 ASSUME ASSUME 段寄存器段寄存器1:1:段名段名1,1,段寄存器段寄存器2:2:段名段名2,2,4.1.44.1.
12、4汇编结束伪指令汇编结束伪指令 对于简化的段结构程序,汇编结束伪指令格式:对于简化的段结构程序,汇编结束伪指令格式: END END 对于完整的段结构程序,汇编结束伪指令格式:对于完整的段结构程序,汇编结束伪指令格式: END END 标号标号 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计汇编语言的一个实例: hello.asm datadata SEGMENT SEGMENTHello
13、DB Hello, world!,0DH,0AH,$data data ENDSENDSprogprog SEGMENT SEGMENT ASSUME CS:prog,DS:datastart: MOV AX,data MOV DS,AX LEA DX,hello;取字符串首地址 MOV AH,9 INT 21H;显示字符串 MOV AH,4CH INT 21H;退回DOSprogprog ENDS ENDS END END startstart名字标号Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile
14、5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计4.2 4.2 顺序结构程序顺序结构程序例例1 将一个将一个2位数压缩的位数压缩的BCD码转换成二进制数码转换成二进制数. .MODEL SMALL MUL BH .DATA ADD AL,BL BCD DB 01011001B MOV BIN,AL BIN DB ? .EXIT .CODE END .STARTUP MOV AL,BCD MOV BL,AL AND BL,0F H AND AL,0F0H MOV CL,4 ROR AL,CL MOV BH,0AHEvaluation
15、only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计4.3 4.3 分支程序设计分支程序设计例例1 用比较指令用比较指令 CMP DEST,SRC JE EQUL EQUL: 用测试指令用测试指令 TEST DEST,SRC JNZ NEXT NEXT: 用逻辑指令用逻辑指令 SHR DEST,CL JC NEXT NEXT:Evaluation only.Created with Aspose.Slides for
16、.NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计例例2 编程实现将键盘输入的小写字母转换成大写后编程实现将键盘输入的小写字母转换成大写后输出。输出。 .MODEL SMALL MOV DL,AL .DATA MOV AH,02HBLOCK DB ERROR!,0DH,0AH,$ INT 21H .CODE JMP DONE .STARTUP NEXT:LEA DX,BLOCK MOV AH,1 MOV AH,9 INT 21H INT 21H CMP AL, a DONE:.EXIT
17、JB NEXT END CMP AL, z JA NEXT AND AL, 11011111BEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计4.4 4.4 循环程序设计循环程序设计例例1 MOV CX,COUNT AGAIN: LOOP AGAIN MOV CL,COUNT AGAIN: DEC CL JNZ AGAIN MOV CX,COUNT AGAIN:JCXZ NEXT JMP AG
18、AIN NEXT:Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计例例2 在内存在内存BLOCK开始处存放了开始处存放了10个无符号字个无符号字节数,从中找出最大值送入节数,从中找出最大值送入MAX单元中。单元中。 .MODEL SMALL .DATA BLOCK DB 100,60,20, MAX DB ? .CODE .STARTUP MOV CX,9 MOV AL,BLOCK LEA B
19、X,BLOCKAGAIN:INC BX CMP AL,BX JAE NEXT XCHG AL,BXNEXT:LOOP AGAIN MOV MAX,AL .EXIT ENDEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计例例3 多位十进制数相加:多位十进制数相加:02233585+03703994,两数在内存中以,两数在内存中以DATA1 和和DATA2为首址存入,各分配为首址存入,各分配4个字
20、节单元,以其个字节单元,以其8位组合位组合BCD码存入码存入(低位在前),两数相加结果(低位在前),两数相加结果(组合组合BCD码码)送回送回DATA1处。处。 .MODEL SMALL .DATA DATA1 DD 02233585HDATA2 DD 03703994H .CODE .STARTUP LEA SI,DATA1 LEA DI,DATA2 CLC MOV CX,4AGAIN:MOV AL,SI ADC AL,DI DAA MOV SI,AL INC SI INC DI LOOP AGAIN .EXIT ENDEvaluation only.Created with Aspose.
21、Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计例例4 在首地址在首地址BLOCK处存放了处存放了10个字数据(无个字数据(无符号数),编程求其和,存入符号数),编程求其和,存入SUM单元单元。 .MODEL SMALL .DATABLOCK DW 1020H,3040H, SUM DD ? .CODE .STARTUP MOV CX,10 LEA SI,BLOCK MOV AX,0 MOV DX,0AGAIN:ADD AX,SI ADC DX,0 INC SI
22、INC SI LOOP AGAIN MOV SUM,AX MOV SUM+2,DX.EXIT END Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计 例例4 方法二方法二 .MODEL SMALL MOVZX EBX,BX .DATA ADC EAX,EBXBLOCK DW 1020H,3040H, INC SI SUM DD ? INC SI .CODE LOOP AGAIN .START
23、UP MOV SUM,EAX MOV CX,10 .EXIT LEA SI,BLOCK END MOV EAX,0 CLCAGAIN:MOV BX,SIEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计例例5 两位十进制数乘法:两位十进制数乘法:2580,被乘数和乘数以组合,被乘数和乘数以组合BCD码形式存于码形式存于DATA1和和DATA2两字节单元中,经乘法运算,乘积以组合两字节单元中,经乘
24、法运算,乘积以组合BCD码形式存入码形式存入DATA3定义的两个内存单元中。定义的两个内存单元中。 .MODEL SMALL MOV CL,AL .DATA MOV CH,0DATA1 DB 25H MOV BL,DATA2DATA2 DB 80H MOV AX,0DATA3 DW ? CLC .CODE AGAIN:ADC AL,BL .STARTUP DAA MOV AL,DATA1 XCHG AH,AL MOV BL,AL ADC AL,0 AND BL,0FH DAA AND AL,0F0H XCHG AH,AL MOV CL,4 LOOP AGAIN ROR AL,CL MOV DA
25、TA3,AX MOV BH,0AH .EXIT MUL BH END ADD AL,BLEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计例例6 将内存首地址为将内存首地址为BLOCK开始的开始的10个带符号个带符号字节数,将其按由大到小的次序排列。字节数,将其按由大到小的次序排列。 .MODEL SMALL .DATABLOCK DB 66H,88H,10H, .CODE .STARTUP M
26、OV DI,9 LOOP1:MOV CX,DI MOV BX,0LOOP2:MOV AL,BLOCKBX CMP AL,BLOCKBX+1 JGE NEXT XCHG AL,BLOCKBX+1 MOV BLOCKBX,ALNEXT:INC BX LOOP LOOP2 DEC DI JNZ LOOP1 .EXIT END Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计4.5 4.5 子程序设计
27、子程序设计4.5.1 过程定义过程定义过程名过程名 PROC TYPE USES REG RET (或或RET n)过程名过程名 ENDP其中其中,TYPE 包括包括: NEAR FARUSES REG:要保护的通用寄存器要保护的通用寄存器 如如 SUB1 PROC USES AX,BX,CX RET 等效于等效于 SUB1 ENDPSUB1 PROC PUSH AX PUSH BX PUSH CX POP CX POP BX POP AX RETSUB1 ENDPEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Pr
28、ofile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计4.5.2 调用与返回指令调用与返回指令1、调用指令、调用指令 CALL 过程名过程名 CALL FAR PTR 过程名过程名CALL 过程名为段内调用,系统将:过程名为段内调用,系统将: EIP(IP) 堆栈堆栈 新偏移地址新偏移地址 EIP(IP)CALL FAR PTR 过程名为段间调用,系统将:过程名为段间调用,系统将: CS 堆栈堆栈 EIP(IP) 堆栈堆栈 新偏移地址新偏移地址 EIP(IP) 新段基址新段基址 CS2、返回指令、返回指令 RET 或或 RET
29、 nEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.第四章 汇编语言程序设计例例1 输入一个字符,若其输入一个字符,若其ASCII码小于码小于41H,显示,显示N,否则显示,否则显示C。 .MODEL TINY .CODE .STARTUP MOV AH,1 INT 21H CMP AL,41H JB NEXT MOV BL,C JMP P NEXT: MOV BL,N P: CALL DISP .EXIT END DISP PROC MOV DL,BL MOV AH,2 INT 21H RET DISP ENDP Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.