df汇编语言程序设计.pptx
《df汇编语言程序设计.pptx》由会员分享,可在线阅读,更多相关《df汇编语言程序设计.pptx(77页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1上机环境硬件系统软件应用软件操作系统:DOS系统编辑器:EDIT.exe编程序:MASM.exe连接程序:LINK.exe调试程序:DEBUG.exe用户开发的程序:ABC.exe等CPU、存储器(ROM、RAM)、I/O接口、输入、输出设备第1页/共77页2第一节第一节汇编语言上机过程汇编语言上机过程D:EDITABC.asmD:MASMABC;有语法错,回有语法错,回EDIT下改该程序下改该程序D:LINKABC;有错,回在有错,回在EDIT下改程序下改程序D:ABC运行结果错,回运行结果错,回EDIT下改程序下改程序或在或在DEBUG下调试,找原因。下调试,找原因。D:DEBUGABC
2、.exe编辑源程序 EDITABC.ASM汇编源程序 MASMABC.ASM形成目标程序 ABC.OBJ连接目标程序LINKABC.OBJ有连接错误信息?形成可执行程序 ABC.EXE装入可执行程序到内存,并执行D:subABC下一程序用DEBUG调试可执行程序D:sub DEBUGABC.EXE找到原因YNYNNYN有汇编错误信息?Y运行结果正确?用DEBUG调试程序查错?第2页/共77页3第二节第二节汇编语言程序结构汇编语言程序结构一、程序结构一、程序结构二、语句结构二、语句结构第3页/共77页4一、程序结构一、程序结构l程序由数条语句构成,每条语句占一行。程序由数条语句构成,每条语句占一
3、行。指令性语句指令性语句(指令语句指令语句)指示性语句指示性语句(伪指令语句伪指令语句)l分段结构分段结构程序按段编写程序按段编写,与与8088内存分段编址相对应。内存分段编址相对应。每段由伪操作每段由伪操作SEGMENT开始、由开始、由ENDS结束。结束。l程序最后为程序最后为END结束语句,后跟一启动地址。结束语句,后跟一启动地址。启动地址指示程序开始执行的第一条语句。启动地址指示程序开始执行的第一条语句。l程序中设有返回程序中设有返回DOS的功能。的功能。使程序执行完后返回使程序执行完后返回DOS系统的命令接受状态。系统的命令接受状态。l程序中用到内存操作数时程序中用到内存操作数时,应按
4、操作数的寻址方式应按操作数的寻址方式,给相应的段寄存器赋值给相应的段寄存器赋值;汇汇 编编 语语 言言 程程 序序 结结 构构 例例 一一 movs.asm;实现数据传送功能实现数据传送功能aaSEGMENT;数据段数据段1str1DBHello!aaENDSbbSEGMENT;数据段数据段2str2DB6dup(?)bbENDSccSEGMENT;代码段代码段ASSUMECS:cc,DS:aa,ES:bbstart:CLDMOVAX,aaMOVDS,AXLEASI,str1MOVAX,SEGstr2MOVES,AXMOVDI,OFFSETstr2MOVCX,6REPMOVSBMOVAH,4C
5、HINT21H;返回返回DOSccENDSENDstart;指示程序结束指示程序结束第4页/共77页5程序可由多个段构成,至少有一个代码段程序可由多个段构成,至少有一个代码段;汇编语言程序结构例二(子程结构)汇编语言程序结构例二(子程结构)scans.asm;用二进制显示中断向量表中(用二进制显示中断向量表中(0:00:3FFH)数据)数据D0H的个数的个数keyEQU0D0H;用符号表示常量用符号表示常量(关键字关键字)codeSEGMENT;代码段开始代码段开始ASSUMECS:codebegin:MOVAX,0000HMOVDS,AXMOVSI,0000HMOVCX,0400HMOVBX
6、,0MOVAL,keynext:CMPSI,ALJNZpointINCBXpoint:INCSILOOPnextCALLdisplay;调用显示子程调用显示子程MOVAH,4CH;返回返回DOSINT21H;用二进制显示用二进制显示BX内容子程内容子程displayPROCMOVCX,16rotate:ROLBX,1MOVDL,BLANDDL,01HADDDL,30HMOVAH,2HINT21HLOOProtateRET;子程返回子程返回displayENDPcodeENDS;代码段结束代码段结束ENDbegin;指指示示程程序序结结束束和和;程序入口程序入口第5页/共77页6二、语句结构二、
7、语句结构dataSEGMENT;数据段数据段varDB?dataENDScodeSEGMENT;代码段代码段ASSUMECS:code,DS:datastart:MOVAX,dataMOVDS,AXMOVvar,CLMOVAH,4CHINT21H;返回返回DOScodeENDSENDstart例:第6页/共77页71.名字项名字项l据语句功能的不同,据语句功能的不同,名字项可用来表示段名、变量名、名字项可用来表示段名、变量名、标号、过程名以及常量名等。标号、过程名以及常量名等。dataSEGMENT;数据段数据段varDB?dataENDScodeSEGMENT;代码段代码段ASSUMECS:
8、code,DS:datastart:MOVAX,dataMOVDS,AXMOVvar,CLMOVAH,4CHINT21H;返回返回DOScodeENDSENDstart第7页/共77页8l名字项用一个符号表示。名字项用一个符号表示。对符号的规定对符号的规定:由字符由字符AZ,az,09及符号及符号、$、下划线、下划线_等组成,等组成,最长最长31个字符,超出部分忽略。个字符,超出部分忽略。不能用数字打头,以免与十六进制数相混。不能用数字打头,以免与十六进制数相混。不使用汇编程序中的保留字。不使用汇编程序中的保留字。(如指令的助记符等如指令的助记符等)对定义的符号不区分大小写。对定义的符号不区分
9、大小写。第8页/共77页92.助记符项助记符项助记符可以是指令、伪操作中的助记符。助记符可以是指令、伪操作中的助记符。对于指令对于指令,汇编程序将其翻译成机器语言指令。,汇编程序将其翻译成机器语言指令。MOVAX,100B80001对于伪操作对于伪操作,汇编程序据其要求的功能进行处理。,汇编程序据其要求的功能进行处理。dataSEGMENTdata与一段值对应与一段值对应stringDBTsinghuastring与一内存地址对应与一内存地址对应第9页/共77页103操作数项操作数项l操作数给出参与操作的数或数所在的地方。操作数给出参与操作的数或数所在的地方。l操作数多于一个时,用逗号分开。操
10、作数多于一个时,用逗号分开。l操作数可以是操作数可以是常数常数、寄存器、存储器操作数、寄存器、存储器操作数、标号名、过程名或标号名、过程名或表达式表达式等。等。第10页/共77页11常数常数给出具体的数据。可以是数字常量或字符常量。给出具体的数据。可以是数字常量或字符常量。数字默认十进制,也可加数字默认十进制,也可加D表示十进制数。表示十进制数。如如1234D,1234 数字后加数字后加B表示二进制数。表示二进制数。如如1010B 数字后加数字后加H表示十六进制数。表示十六进制数。如如1234H 字符常量,用单引号表示。字符常量,用单引号表示。如如1234汇编时,用字符对应的汇编时,用字符对应
11、的ASCII表示。表示。如如31H,32H,33H,34H例例 data1DB12,34,56;十进制;十进制data2DB12H,34H,56H;十六进制;十六进制MOVAL,G;字符;字符stringDB1234;字符串;字符串第11页/共77页12lA、B、C、D、E、F开头的十六进制数前面加开头的十六进制数前面加0,与与H结尾的标识符区别。结尾的标识符区别。如如寄存器名寄存器名AH、BH、CH、DH变量名变量名abcdH等等例例 movAL,0AHmovAL,AHmovBX,0abcdH第12页/共77页134注释项注释项l由分号引出,用来说明语句或程序的功能。由分号引出,用来说明语句
12、或程序的功能。汇编程序对分号后的内容不做处理。汇编程序对分号后的内容不做处理。l作用:作用:注释程序,增强程序可读性。注释程序,增强程序可读性。可放在语句最前,暂时注释某语句,调试程序用。可放在语句最前,暂时注释某语句,调试程序用。例例 、;MOVAH,2;显示提示信息显示提示信息;MOVDL,A;INT21H 、第13页/共77页14第三节第三节指示性语句指示性语句/第四节第四节汇编语言程序举汇编语言程序举例例一、一、程序开始和结束程序开始和结束二、二、段定义段定义三、三、变量定义变量定义四、四、ASSUME语句语句汇编语言程序汇编语言程序举例一举例一了解了解DOS的返回,装入功能的返回,装
13、入功能五、五、表达式及表达式中的操作符表达式及表达式中的操作符汇编语言程序例二汇编语言程序例二六、六、过程定义过程定义(第五节程序设计介绍第五节程序设计介绍)七、七、等值定义等值定义(第五节程序设计介绍第五节程序设计介绍)汇编语言程序例三汇编语言程序例三(第五节程序设计介绍第五节程序设计介绍)第14页/共77页15指示性语句与指令性语句:指示性语句与指令性语句:l指令性语句指令性语句是用指令系统中的指令构成的语句。是用指令系统中的指令构成的语句。例例MOVAX,BXl指示性语句指示性语句是指示汇编程序进行汇编的操作。是指示汇编程序进行汇编的操作。例例 MOVAX,4+8中的中的+codeSEG
14、MENT中的中的SEGMENTMOVBX,OFFSETstring中的中的OFFSET第15页/共77页16l指示性语句与指令性语句区别指示性语句与指令性语句区别一个程序经汇编,连接和装入内存后,在执行程序之前:一个程序经汇编,连接和装入内存后,在执行程序之前:指示性语句的功能已经完成,故又称伪操作。指示性语句的功能已经完成,故又称伪操作。而指令性语句的功能尚未完成,需控制而指令性语句的功能尚未完成,需控制CPU去执行,才能完成。去执行,才能完成。第16页/共77页17aaSEGMENT;数据段1str1DBHello!aaENDSbbSEGMENT;数据段2str2DB6dup(?)bbEN
15、DSccSEGMENT;代码段ASSUMECS:ccASSUMEDS:aa,ES:bbstart:CLDMOVAX,aaMOVDS,AXLEASI,str1MOVAX,bbMOVES,AXLEADI,str2MOVCX,6REPMOVSBMOVAH,4CHINT21HccENDSENDstartD:masmDEBUGhello2.exe-U:查看代码段12A0:0000FCCLD12A0:0001B89E12MOVAX,129E12A0:00048ED8MOVDS,AX12A0:00068D360000LEASI,000012A0:000AB89F12MOVAX,129F12A0:000D8E
16、C0MOVES,AX12A0:000F8D3E0000LEADI,000012A0:0013B90600MOVCX,000612A0:0016F3REPZ12A0:0017A4MOVSB12A0:0018B44CMOVAH,4C12A0:001ACD21INT21、-D129E:0L10;查看数据段1的内容129E:000048656C6C6F210000-0000000000000000Hello!.-D129F:0L10;查看数据段2的内容129F:00000000000000000000-0000000000000000.-数据传送源程序数据传送源程序hello2.asm程序经汇编、连接
17、后,装入内存的情况如下:程序经汇编、连接后,装入内存的情况如下:第17页/共77页18常用伪操作介绍常用伪操作介绍一、一、程序开始和结束程序开始和结束二、二、段定义段定义三、三、变量定义变量定义四、四、ASSUME语句语句五、五、表达式中的操作符表达式中的操作符六、六、过程定义过程定义七、七、等值定义等值定义第18页/共77页19一一、模块定义和程序结束伪操作模块定义和程序结束伪操作1.NAME和和TITLE伪操作伪操作格式格式NAME模块名模块名格式格式TITLE模块名模块名在源程序开始可用在源程序开始可用NAME或或TITLE为模块命名为模块命名,模块名的作用是指示给连接程序进行连接用。模
18、块名的作用是指示给连接程序进行连接用。源程序中可无模块定义,此时源文件名作为模块名。源程序中可无模块定义,此时源文件名作为模块名。第19页/共77页202.END伪操作伪操作格式格式END启动地址启动地址作用是指示源程序到此结束。作用是指示源程序到此结束。汇编程序对汇编程序对END之后的语句不进行处理。之后的语句不进行处理。程序中所有有效语句应放在程序中所有有效语句应放在END语句之前。语句之前。源程序中必须有源程序中必须有END结束语句。结束语句。汇编程序对无汇编程序对无END语句的源程序不进行处理语句的源程序不进行处理,只给出无只给出无END语句错误信息。语句错误信息。第20页/共77页2
19、1假设假设TEST.asm是一个无是一个无END语句的汇编语言源程序。语句的汇编语言源程序。其汇编结果如下其汇编结果如下:D:MASM TEST;Microsoft(R)MacroAssemblerVersion5.10Copyright(C)Microsoft Corp 1981,1988.All rightsreserved.EndoffileencounteredoninputfileEndoffileencounteredoninputfile49968+421181Bytessymbolspacefree0WarningErrors0SevereErrorsD:由于没有由于没有END
20、语句,汇编程序根本没对源程序进行汇编,语句,汇编程序根本没对源程序进行汇编,此时显示警告性错误总数为此时显示警告性错误总数为0,严重性错误总数为,严重性错误总数为0,用户不要被此值的误导用户不要被此值的误导。第21页/共77页22启动地址可是一个标号或过程名启动地址可是一个标号或过程名,指示程序的入口。指示程序的入口。程序装入内存后,系统跳转到入口处程序装入内存后,系统跳转到入口处,开始执行程序。开始执行程序。aaSEGMENT;数据段1str1DBHello!aaENDSbbSEGMENT;数据段2str2DB6dup(?)bbENDSccSEGMENT;代码段ASSUMECS:ccASSU
21、MEDS:aa,ES:bbstart:CLDMOVAX,aaMOVDS,AXLEASI,str1MOVAX,SEGstr2MOVES,AXMOVDI,OFFSETstr2MOVCX,6REPMOVSBMOVAH,4CHINT21HccENDSENDstartD:masmDEBUGhello.exe-U:查看代码段129F:0000FCCLD129F:0001B89D12MOVAX,129D129F:00048ED8MOVDS,AX129F:00068D360000LEASI,0000129F:000AB89E12MOVAX,129E129F:000D8EC0MOVES,AX129F:000FB
22、F0000MOVDI,0000129F:0012B90600MOVCX,0006129F:0015F3REPZ129F:0016A4MOVSB129F:0017B44CMOVAH,4C129F:0019CD21INT21、-D129d:0l10;查看数据段1的内容129D:000048656C6C6F210000-0000000000000000Hello!.-D129e:0l10;查看数据段2的内容129E:00000000000000000000-0000000000000000.-第22页/共77页23二、段定义伪操作二、段定义伪操作格式格式段名段名SEGMENT、段名段名ENDS段定义
23、由伪操作段定义由伪操作SEGMENT开始开始、ENDS结束结束。其中:其中:SEGMENT和和ENDS必须成对出现,必须成对出现,且语句前必须有段名,且语句前必须有段名,段名必须相同段名必须相同。SEGMENT和和ENDS语句之间可以有指令和其他伪操作语句之间可以有指令和其他伪操作,表示存放在该段内存的变量、指令或其他伪操作对该段内存的处理表示存放在该段内存的变量、指令或其他伪操作对该段内存的处理程序中可以定义多个段。程序中可以定义多个段。程序经汇编、连接及装入内存后,段名为一具体的段值。程序经汇编、连接及装入内存后,段名为一具体的段值。第23页/共77页24aaSEGMENT;数据段1str
24、1DBHello!aaENDSbbSEGMENT;数据段2str2DB6dup(?)bbENDSccSEGMENT;代码段ASSUMECS:ccASSUMEDS:aa,ES:bbstart:CLDMOVAX,aaMOVDS,AXLEASI,str1MOVAX,bbMOVES,AXLEADI,str2MOVCX,6REPMOVSBMOVAH,4CHINT21HccENDSENDstartD:masmDEBUGhello2.exe-U:查看代码段12A0:0000FCCLD12A0:0001B89E12MOVAX,129E12A0:00048ED8MOVDS,AX12A0:00068D360000
25、LEASI,000012A0:000AB89F12MOVAX,129F12A0:000D8EC0MOVES,AX12A0:000F8D3E0000LEADI,000012A0:0013B90600MOVCX,000612A0:0016F3REPZ12A0:0017A4MOVSB12A0:0018B44CMOVAH,4C12A0:001ACD21INT21、-D129E:0L10;查看数据段1的内容129E:000048656C6C6F210000-0000000000000000Hello!.-D129F:0L10;查看数据段2的内容129F:00000000000000000000-0000
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- df 汇编语言 程序设计
限制150内