微机原理 第四章 汇编语言程序设计4.1.ppt
《微机原理 第四章 汇编语言程序设计4.1.ppt》由会员分享,可在线阅读,更多相关《微机原理 第四章 汇编语言程序设计4.1.ppt(185页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章 汇编语言程序设计4.1 4.1 汇编语言程序设计汇编语言程序设计4.2 Win324.2 Win32汇编语言程序设计汇编语言程序设计4.1 4.1 汇编语言程序设计汇编语言程序设计一一汇编语言上机过程汇编语言上机过程二二汇编语言程序结构汇编语言程序结构三三指示性语句指示性语句四四BIOS和和DOS功能调用功能调用五五汇编语言程序设计汇编语言程序设计应用软件应用软件上机环境上机环境系统软件系统软件硬件硬件操作系统:操作系统:DOS系统系统编辑器编辑器:EDIT.exe编程序编程序:MASM.exe连接程序连接程序:LINK.exe调试程序:调试程序:DEBUG.exe用户开发的程序:用户
2、开发的程序:ABC.exe等等CPU、存储器、存储器(ROM、RAM)、I/O接口、输入、输出设备接口、输入、输出设备一一汇编语言上机过程汇编语言上机过程D:EDITABC.asmD:MASMABC;有语法错,回有语法错,回EDIT下改该程序下改该程序D:LINKABC;有错,回在有错,回在EDIT下改程序下改程序D:ABC运行结果错,回运行结果错,回EDIT下改程序下改程序或在或在DEBUG下调试,找原因。下调试,找原因。D:DEBUGABC.exe编辑源程序编辑源程序 EDITABC.ASM汇编源程序汇编源程序 MASMABC.ASM形成目标程序形成目标程序ABC.OBJ连接目标程序连接目
3、标程序 LINKABC.OBJ有连接错误信息有连接错误信息?形成可执行程序形成可执行程序 ABC.EXE装入可执行程序到内存装入可执行程序到内存,并执行并执行D:subABC下一程序下一程序用用DEBUG调试可执行程序调试可执行程序D:sub DEBUGABC.EXE找到原因找到原因YNYNNYN有汇编错误信息有汇编错误信息?Y运行结果正确运行结果正确?用用DEBUG调试程序查错调试程序查错?二二汇编语言程序结构汇编语言程序结构(一)程序结构(一)程序结构(二)语句结构(二)语句结构(一)程序结构(一)程序结构l程序由数条语句构成,每条语句占一行。程序由数条语句构成,每条语句占一行。指令性语句
4、指令性语句(指令语句指令语句)指示性语句指示性语句(伪指令语句伪指令语句)l分段结构分段结构程序按段编写程序按段编写,与与8088/86内存分段编址相对应。内存分段编址相对应。每段由伪操作每段由伪操作SEGMENT开始、由开始、由ENDS结束。结束。l程序最后为程序最后为END结束语句,后跟一启动地址。结束语句,后跟一启动地址。启动地址指示程序开始执行的第一条语句。启动地址指示程序开始执行的第一条语句。l程序中设有返回程序中设有返回DOS的功能。的功能。使程序执行完后返回使程序执行完后返回DOS系统的命令接受状态。系统的命令接受状态。l程序中用到内存操作数时程序中用到内存操作数时,应按操作数的
5、寻应按操作数的寻址方式址方式,给相应的段寄存器赋值给相应的段寄存器赋值;汇编语言程序结构例一汇编语言程序结构例一movs.asm;实现数据传送功能实现数据传送功能aaSEGMENT;数据段数据段1str1DBHello!aaENDSbbSEGMENT;数据段数据段2str2DB6dup(?)bbENDSccSEGMENT;代码段代码段ASSUMECS:cc,DS:aa,ES:bbstart:CLDMOVAX,aaMOVDS,AXLEASI,str1MOVAX,SEGstr2MOVES,AXMOVDI,OFFSETstr2MOVCX,6REPMOVSBMOVAH,4CHINT21H;返回返回DO
6、SccENDSENDstart;指示程序结束指示程序结束程序可由多个段构成,至少有一个代码段程序可由多个段构成,至少有一个代码段;汇编语言程序结构例(子程结构)汇编语言程序结构例(子程结构)scans.asm;用二进制显示中断向量表中(用二进制显示中断向量表中(0:00:3FFH)数据)数据D0H的个数的个数keyEQU0D0H;用符号表示常量用符号表示常量(关键字关键字)codeSEGMENT;代码段开始代码段开始ASSUMECS:codebegin:MOVAX,0000HMOVDS,AXMOVSI,0000HMOVCX,0400HMOVBX,0MOVAL,keynext:CMPSI,ALJ
7、NZpointINCBXpoint:INCSILOOPnextCALLdisplay;调用显示子程调用显示子程MOVAH,4CH;返回返回DOSINT21H;用二进制显示用二进制显示BX内容子程内容子程displayPROCMOVCX,16rotate:ROLBX,1MOVDL,BLANDDL,01HADDDL,30HMOVAH,2HINT21HLOOProtateRET;子程返回子程返回displayENDPcodeENDS;代码段结束代码段结束ENDbegin;指示程序结束和指示程序结束和;程序入口程序入口data1SEGMENT;数据段数据段1,(可据需要设定可据需要设定,也可无也可无)
8、;变量定义变量定义data1ENDSdata2SEGMENT;数据段数据段2(可据需要设定可据需要设定,也可无也可无)data2ENDScodeSEGMENT;程序段程序段ASSUMECS:code,DS:data1,ES:data2start:、;程序主体部分程序主体部分、MOVAH,4CH;返回返回DOSINT21HcodeENDSENDstart完整汇编语言程序框架(适用于所有完整汇编语言程序框架(适用于所有masm版本版本)一个简化的源程序文件demosim.asm.model.model small small.stack.stack.data.datastringstringdb
9、db Hello,Assembly!Hello,Assembly!,0dh,0ah,0dh,0ah,$.code.codestart:start:mov ax,datamov ax,datamov ds,axmov ds,axmov dx,offset stringmov dx,offset stringmov ah,9mov ah,9int 21hint 21hmov ax,4c00hmov ax,4c00hint 21hint 21hend startend start 简化的汇编语言程序框架(适用于简化的汇编语言程序框架(适用于简化的汇编语言程序框架(适用于简化的汇编语言程序框架(适用于
10、masm5.0/6.0masm5.0/6.0masm5.0/6.0masm5.0/6.0版本版本版本版本).model small.model small;定义程序的;定义程序的存储模式存储模式(小型模式)(小型模式).stack.stack;定义;定义堆栈段堆栈段(默认是(默认是1KB1KB空间)空间).data.data;定义;定义数据段数据段;数据定义;数据定义.code.code;定义;定义代码段代码段start:start:mov ax,datamov ax,data;程序;程序起始点起始点mov ds,axmov ds,ax;设置;设置DSDS指向用户定义的数据段指向用户定义的数据
11、段;程序代码;程序代码mov ax,4c00hmov ax,4c00hint 21hint 21h;程序结束点,返回;程序结束点,返回DOSDOS;子程序代码;子程序代码end startend start;汇编结束,同时指明程序起始点;汇编结束,同时指明程序起始点startstart存储模式存储模式存储模式存储模式存储模式存储模式特特 点点TINY(微型模式)(微型模式)COM类型程序,只有一个小于类型程序,只有一个小于64KB的逻的逻辑段(辑段(MASM 6.x支持)支持)SMALL(小型模式)(小型模式)小应用程序,只有一个代码段和一个数据小应用程序,只有一个代码段和一个数据段(含堆栈段
12、),每段不大于段(含堆栈段),每段不大于64KBCOMPACT(紧凑模式)(紧凑模式)代码少、数据多的程序,只有一个代码段,代码少、数据多的程序,只有一个代码段,但有多个数据段但有多个数据段MEDIUM(中型模式)(中型模式)代码多、数据少的程序,可有多个代码段,代码多、数据少的程序,可有多个代码段,只有一个数据段只有一个数据段LARGE(大型模式)(大型模式)大应用程序,可有多个代码段和多个数据大应用程序,可有多个代码段和多个数据段(静态数据小于段(静态数据小于64KB)HUGE(巨型模式)(巨型模式)更大应用程序,可有多个代码段和多个数更大应用程序,可有多个代码段和多个数据段(对静态数据没
13、有限制)据段(对静态数据没有限制)FLAT(平展模式)(平展模式)32位应用程序,运行在位应用程序,运行在32位位80 x86CPU和和Windows 9x或或NT环境环境完整段定义格式与简化定义格式关系完整段定义格式与简化定义格式关系完整段定义利用完整段定义利用SEGMENTSEGMENT和和ENDSENDS一对伪指令定义一对伪指令定义逻辑段逻辑段同时需要配合同时需要配合ASSUMEASSUME伪指令指明逻辑段是代码段、伪指令指明逻辑段是代码段、堆栈段、数据段还是附加段堆栈段、数据段还是附加段完整段定义的优势是可以指明逻辑段的定位、组合、完整段定义的优势是可以指明逻辑段的定位、组合、类别等属
14、性;而简化段定义只能采用系统默认的属性类别等属性;而简化段定义只能采用系统默认的属性完整段定义和简化段定义的实质是一致的完整段定义和简化段定义的实质是一致的可执行程序的结构可执行程序的结构DOSDOS操作系统支持两种可执行程序结构操作系统支持两种可执行程序结构1.EXE1.EXE程序程序程序可以有多个代码段和多个数据段,程序长度可以程序可以有多个代码段和多个数据段,程序长度可以超过超过64KB64KB通常生成通常生成EXEEXE结构的可执行程序结构的可执行程序2.COM2.COM程序程序只有一个逻辑段,程序长度不超过只有一个逻辑段,程序长度不超过64KB64KB需要满足一定条件才能生成需要满足
15、一定条件才能生成COMCOM结构的可执行程序结构的可执行程序(MASM 6.xMASM 6.x需要采用需要采用TINYTINY模式)模式)(二)语句结构(二)语句结构dataSEGMENT;数据段数据段varDB?dataENDScodeSEGMENT;代码段代码段ASSUMECS:code,DS:datastart:MOVAX,dataMOVDS,AXMOVvar,CLMOVAH,4CHINT21H;返回返回DOScodeENDSENDstart例:例:1.名字项名字项l据语句功能的不同,据语句功能的不同,名字项可用来表示段名、变量名、名字项可用来表示段名、变量名、标号、过程名以及常量名等。
16、标号、过程名以及常量名等。dataSEGMENT;数据段数据段varDB?dataENDScodeSEGMENT;代码段代码段ASSUMECS:code,DS:datastart:MOVAX,dataMOVDS,AXMOVvar,CLMOVAH,4CHINT21H;返回返回DOScodeENDSENDstartl名字项用一个符号表示。名字项用一个符号表示。对符号的规定对符号的规定:由字符由字符AZ,az,09及符号及符号、$、下划线、下划线_等组成,等组成,最长最长31个字符,超出部分忽略。个字符,超出部分忽略。不能用数字打头,以免与十六进制数相混。不能用数字打头,以免与十六进制数相混。不使用
17、汇编程序中的保留字。不使用汇编程序中的保留字。(如指令的助记符等如指令的助记符等)对定义的符号不区分大小写。对定义的符号不区分大小写。汇编语言中的保留字汇编语言中的保留字保留字(保留字(Reserved WordReserved Word)是汇编程序已经利用的标识符(也称为关键字),主要有:是汇编程序已经利用的标识符(也称为关键字),主要有:指令助记符指令助记符例如:例如:MOVMOV、ADDADD伪指令助记符伪指令助记符例如:例如:DBDB、DWDW操作符操作符例如:例如:OFFSETOFFSET、PTRPTR寄存器名寄存器名例如:例如:AXAX、CSCS预定义符号预定义符号例如:例如:da
18、tadata 汇编语言大小写不敏感2.助记符项助记符项助记符可以是指令、伪操作中的助记符。助记符可以是指令、伪操作中的助记符。对于指令对于指令,汇编程序将其翻译成机器语言指令。,汇编程序将其翻译成机器语言指令。MOVAX,100B80001对于伪操作对于伪操作,汇编程序据其要求的功能进行处理。,汇编程序据其要求的功能进行处理。dataSEGMENTdata与一段值对应与一段值对应stringDBLiaoDastring与一内存地址对应与一内存地址对应3操作数项操作数项l操作数给出参与操作的数或数所在的地方。操作数给出参与操作的数或数所在的地方。l操作数多于一个时,用逗号分开。操作数多于一个时,
19、用逗号分开。l操作数可以是操作数可以是常数常数、寄存器、存储器操作数、寄存器、存储器操作数、标号名、过程名或标号名、过程名或表达式表达式等。等。常数常数给出具体的数据。可以是数字常量或字符常量。给出具体的数据。可以是数字常量或字符常量。数字默认十进制,也可加数字默认十进制,也可加D表示十进制数。表示十进制数。如如1234D,1234 数字后加数字后加B表示二进制数。表示二进制数。如如1010B 数字后加数字后加H表示十六进制数。表示十六进制数。如如1234H 字符常量,用单引号表示。字符常量,用单引号表示。如如1234汇编时,用字符对应的汇编时,用字符对应的ASCII表示。表示。如如31H,3
20、2H,33H,34H例例 data1DB12,34,56;十进制;十进制data2DB12H,34H,56H;十六进制;十六进制MOVAL,G;字符;字符stringDB1234;字符串;字符串lA、B、C、D、E、F开头的十六进制数前面加开头的十六进制数前面加0,与与H结尾的标识符区别。结尾的标识符区别。如如寄存器名寄存器名AH、BH、CH、DH变量名变量名abcdH等等例例 movAL,0AHmovAL,AHmovBX,0abcdH4注释项注释项l由分号引出,用来说明语句或程序的功能。由分号引出,用来说明语句或程序的功能。汇编程序对分号后的内容不做处理。汇编程序对分号后的内容不做处理。l作
21、用:作用:注释程序,增强程序可读性。注释程序,增强程序可读性。可放在语句最前,暂时注释某语句,调试程序用。可放在语句最前,暂时注释某语句,调试程序用。例例 、;MOVAH,2;显示提示信息显示提示信息;MOVDL,A;INT21H 、三三指示性语句指示性语句(一)(一)程序开始和结束程序开始和结束 (二)(二)段定义段定义(三)(三)变量定义变量定义(四)(四)ASSUMEASSUME语句语句(五)(五)表达式中的操作符表达式中的操作符(六)(六)过程定义过程定义(七)(七)等值定义等值定义(八)(八)数值回送操作符数值回送操作符指示性语句指示性语句与与指令性语句指令性语句:l指令性语句指令性
22、语句是用指令系统中的指令构成的语句。是用指令系统中的指令构成的语句。例例MOVAX,BXl指示性语句指示性语句是指示汇编程序进行汇编的操作。是指示汇编程序进行汇编的操作。例例 MOVAX,4+8中的中的+codeSEGMENT中的中的SEGMENTMOVBX,OFFSETstring中的中的OFFSET指示性语句与指令性语句指示性语句与指令性语句指示性语句与指令性语句指示性语句与指令性语句指令(指令(InstructionInstruction)使使CPUCPU产生动作、并在程序执行时产生动作、并在程序执行时才处理的指令才处理的指令硬指令就是处理器指令,与具体的处理器有关、与汇编程序硬指令就是
23、处理器指令,与具体的处理器有关、与汇编程序无关无关伪指令(伪指令(DirectiveDirective)不产生不产生CPUCPU动作、在程序执行前由动作、在程序执行前由汇编程序处理的说明性指令汇编程序处理的说明性指令伪指令与具体的处理器类型无关,但与汇编程序有关。不同伪指令与具体的处理器类型无关,但与汇编程序有关。不同版本的汇编程序支持不同的伪指令版本的汇编程序支持不同的伪指令 指令和伪指令采用易于记忆的符合表达,这就是助记符l指示性语句与指令性语句区别指示性语句与指令性语句区别一个程序经汇编,连接和装入内存后,在执行程序之前:一个程序经汇编,连接和装入内存后,在执行程序之前:指示性语句的功能
24、已经完成,故又称伪操作。指示性语句的功能已经完成,故又称伪操作。而指令性语句的功能尚未完成,需控制而指令性语句的功能尚未完成,需控制CPUCPU去执行,才能完成。去执行,才能完成。aaSEGMENT;数据段数据段1str1DBHello!aaENDSbbSEGMENT;数据段数据段2str2DB6dup(?)bbENDSccSEGMENT;代码段代码段ASSUMECS:ccASSUMEDS:aa,ES:bbstart:CLDMOVAX,aaMOVDS,AXLEASI,str1MOVAX,bbMOVES,AXLEADI,str2MOVCX,6REPMOVSBMOVAH,4CHINT21HccEN
25、DSENDstartD:masmDEBUGhello2.exe-U:查看代码段查看代码段12A0:0000FCCLD12A0:0001B89E12MOVAX,129E12A0:00048ED8MOVDS,AX12A0:00068D360000LEASI,000012A0:000AB89F12MOVAX,129F12A0:000D8EC0MOVES,AX12A0:000F8D3E0000LEADI,000012A0:0013B90600MOVCX,000612A0:0016F3REPZ12A0:0017A4MOVSB12A0:0018B44CMOVAH,4C12A0:001ACD21INT21、
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机原理 第四章 汇编语言程序设计4.1 微机 原理 第四 汇编语言 程序设计 4.1
限制150内