微机原理与汇编语言ppt课件.ppt
《微机原理与汇编语言ppt课件.ppt》由会员分享,可在线阅读,更多相关《微机原理与汇编语言ppt课件.ppt(145页珍藏版)》请在三一办公上搜索。
1、1,封面,第五章 汇编语言程序设计,2,5.1 汇编语言的基本概念 5.1.1 汇编语言源程序的格式 5.1.2 汇编语言上机过程 5.1.3 汇编语言程序和DOS操作系统的接口5.2 伪指令语句 5.3 宏指令语句 5.4 常用系统功能调用和BIOS中断调用5.5 汇编语言程序设计的基本方法5.6 汇编语言与C/C+语言的混合编程,3,5.1 汇编语言的基本概念1机器语言(Machine Language)2汇编语言(Assembly Language) 比较几个重要的概念: 1).汇编语言程序(源程序):用汇编语言编写的源程序. 2).汇编程序:将汇编语言程序(源程序)翻译成目标程序的程序
2、,是一种工具软件,如MASM.EXE等.有基本汇编(或小汇编ASM)和宏汇编(MASM)之分。 3).汇编:利用汇编程序(如MASM.EXE等)将汇编语言程序(源程序)翻译成目标程序的过程.3. 高级语言(High Level Language),4,汇编语言和高级语言(1),汇编语言与处理器密切相关 汇编语言程序的通用性、可移植性较差高级语言与具体计算机无关 高级语言程序可以在多种计算机上编译后执行,汇编语言和高级语言(1),5,汇编语言和高级语言(2),汇编语言功能有限、涉及硬件细节 编写程序比较繁琐,调试起来也比较困难高级语言提供了强大的功能,不必关心琐碎问题类似自然语言的语法,易于掌握
3、和应用,汇编语言和高级语言(2),6,汇编语言和高级语言(3),汇编语言本质上就是机器语言 可以直接、有效地控制计算机硬件 易于产生速度快、容量小的高效率目标程序高级语言不针对具体计算机系统 不易直接控制计算机的各种操作 目标程序比较庞大、运行速度较慢,汇编语言和高级语言(3),7,汇编语言和高级语言(4),汇编语言的优点:直接控制计算机硬件部件可以编写在“时间”和“空间”两方面最有效的程序汇编语言的缺点:与处理器密切有关需要熟悉计算机硬件系统、考虑许多细节编写繁琐,调试、维护、交流和移植困难,汇编语言和高级语言(4),8,汇编语言和高级语言(5),汇编语言的优点使得它在程序设计中占有重要的位
4、置,是不可被取代的汇编语言的缺点使得人们主要采用高级语言进行程序开发工作有时需要采用高级语言和汇编语言混合编程的方法,互相取长补短,更好地解决实际问题,汇编语言和高级语言(5),9,汇编语言的应用场合,程序要具有较快的执行时间,或者只能占用较小的存储容量。程序与计算机硬件密切相关,程序要直接、有效地控制硬件。大型软件需要提高性能、优化处理的部分。没有合适的高级语言、或只能采用汇编语言的时候。分析具体系统尤其是该系统的低层软件、加密解密软件、分析和防治计算机病毒等等。,汇编语言的应用场合,10,硬指令和伪指令,硬指令使CPU产生动作、并在程序执行时才处理的语句。伪指令(Directive)不产生
5、CPU动作、在程序执行前由汇编程序处理的说明性语句,例如,定义数据、分配存储区、定义段及定义过程等等。伪指令与具体的处理器类型无关,但与汇编程序的版本有关,本课程采用微软宏汇编程序 MASM 6.11,11,3.1.2 汇编语言的程序格式,完整的汇编语言源程序由段组成。一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列。需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点。所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内。通常,程序还需要一个堆栈段。,5.1.1 汇编语言的程序格式,12,汇编语言源
6、程序,源程序分别用两种格式书写。第一种格式从MASM 5.0开始支持简化段定义格式第二种格式MASM 5.0以前就具有完整段定义格式(本教程采用的格式),Hello, Everybody !,13,;lt301a.asm(文件名).model small;定义程序的存储模式.stack;定义堆栈段.data;定义数据段stringdb Hello, Everybody !,0dh,0ah,$;在数据段定义要显示的字符串.code;定义代码段.startup;程序起始点,建立DS、SSmov dx,offset string;指定字符串mov ah,9int 21h;利用功能调用显示信息.exi
7、t 0;程序结束点,返回DOSend;汇编结束,例:简化段定义格式,抽象,14,;SampleA.ASM.model small.stack.data.;在数据段定义数据.code.startup;(注1).;在代码段填入指令序列.exit 0;(注2).;子程序代码end;(注3),简化段定义格式 MASM 6.x支持,15,;SampleC.ASM.model small.stack.data.;在数据段定义数据.codestart:mov ax,datamov ds,ax.;在代码段填入指令序列mov ax,4c00hint 21h.;子程序代码end start,简化段定义格式 MAS
8、M 5.x及以上支持,16,;lt301b.asm(文件名)stacksegment stack;定义堆栈段dw 512 dup(?);堆栈段有512字(1024字节)空间stackends;堆栈段结束datasegment;定义数据段stringdb Hello, Everybody !,0dh,0ah,$dataendscodesegment code;定义代码段assume cs:code,ds:data,ss:stackstart:mov ax,data;建立DS段地址mov ds,ax,例:完整段定义格式,17,mov dx,offset stringmov ah,9int 21hm
9、ov ax,4c00hint 21h;利用功能调用返回DOScodeends;代码段结束end start;汇编结束,同时指明程序起始点,例:完整段定义格式,抽象,18,5.1.1 汇编语言源程序的格式,例5.1 要求将两个5字节十六进制数相加,可以编写出以下汇编语言源程序。 3B74AC60F8H+20D59E36C1H=?,19,START:MOV AX,(SEG) DATAMOV DS,AX ;初始化DS MOV CX,5 ;循环次数送CXMOV SI,0 ;置SI初值为0 CLC ;清CF标志LOOPER:MOV AL,(OFFSET) DATA2SI ;取一个字节加数ADC (OFF
10、SET) DATA1SI,AL ;与被加数相加,INC SI ;SI加1 DEC CX ;CX减1JNZ LOOPER ;若不等于0,转LOOPERMOV AH,4CH INT 21H;返回DOS CODE ENDS ;代码段结束 END START ;源程序结束,DATASEGMENT;定义数据段 DATA1 DB 0F8H,60H,0ACH,74H,3BH;被加数 DATA2 DB 0C1H,36H,9EH,0D5H,20H ;加数 DATAENDS ;数据段结束 CODE SEGMENT ;定义代码段ASSUME CS:CODE,DS:DATA,汇编语言源程序的格式与伪指令,20,例5.
11、1分析,-u0B8B:0000 B88A0B MOV AX,0B8A0B8B:0003 8ED8 MOV DS,AX0B8B:0005 B90500 MOV CX,00050B8B:0008 BE0000 MOV SI,00000B8B:000B F8 CLC0B8B:000C 8A840500 MOV AL,SI+00050B8B:0010 10840000 ADC SI+0000,AL0B8B:0014 46 INC SI0B8B:0015 49 DEC CX0B8B:0016 75F4 JNZ 000C0B8B:0018 B44C MOV AH,4C0B8B:001A CD21 INT
12、21,-d 0b8a:00000B8A:0000 F8 60 AC 74 3B C1 36 9E-D5 20 00 00 00 00 00 00,汇编语言源程序的格式与伪指令,21,1.分段结构,汇编语言源程序的结构是分段结构形式,一个汇编语言源程序由若干段(SEGMENT)组成,每个段以SEGMENT语句开始,以ENDS语句结束。整个源程序的结尾是END语句。 这里所说的汇编语言源程序中的段与前面讨论的CPU管理的存储器的段,既有联系,又在概念上有所区别: 1、CPU对存储器是分段管理的,它有四个段寄存器(CS,ES,SS和DS) (各一个)。 2、在汇编语言程序中也要求分段组织指令、数据和
13、堆栈,以便将源程序汇编成为目标程序后,可以分别装入存储器的相应段中。 3、而在汇编语言源程序中,设置段的自由度比较大。例如,一个源程序中可以有多个数据段或多个代码段等等,但至少有一个代码段。,22,2. 汇编语言语句的类型和格式 1)语句的类型 汇编语言源程序中的语句可以分为三种类型:指令语句、伪指令语句和宏指令语句。 (1) 指令语句:它是能产生目标代码,CPU 可以执行的能完成特定功能的语句。 (2) 伪指令语句:它是一种不产生目标代码的语句,它仅仅在汇编过程中告诉汇编程序应如何汇编。例如,告诉汇编程序已写出的汇编语言源程序有几个段,段的名字是什么;定义变量,定义过程,给变量分配存储单元,
14、给数字或表达式命名等。显然,伪指令语句是汇编程序在汇编时使用的。 (3)宏指令语句:它是一种用户利用宏指令语句自己定义的语句。,23,2) 语句的格式 指令语句与伪指令语句的格式是类似的。一般情况下,汇编语言的语句可以由部分构成: 名字 助记符 操作数 ;注释其中带方括号的部分表示任选项,可以有,也可以没有。例5.1中有如下语句: LOOPER: MOV AL,DATA2SI; 取一个字节加数 DATA1 DB 0F8H,60H,0ACH,74H,3BH;被加数,24,1) 名字 在指令语句中,这个名字是一个标号。标号后面通常有一个冒号。 标号有三种属性:段、偏移量和类型(NEAR和FAR)。
15、 伪指令语句中的名字可以是变量名、段名、过程名。伪指令语句的名字后面通常不跟冒号,这是它和标号的一个明显区别。 变量也有三种属性:段、偏移量和类型(BYTE、WORD、DWORD、QWORD、TBYTE)。 注:段名时默认的是段属性;变量名是默认的是偏移量的属性,见例5.1。,25,2) 助记符 汇编语言语句中的第二个组成部分是助记符(Memonic)。 在指令语句中的第二部分是CPU指令系统中指令的助记符,如MOV、ADC等。 在伪指令语句中的第二部分是伪指令的定义符,如DB、SEGMENT、ENDS、END等。它们在程序中的作用是定义变量的类型、定义段以及告诉汇编程序结束汇编等。,26,3
16、) 操作数 汇编语言语句中的第三个组成部分是操作数。在指令语句中是指令的操作数,可能有单操作数或双操作数,也可能无操作数;而在伪指令中可能有更多个操作数。当操作数不止一个时,相互之间应该用逗号隔开。,(1) 常数。常数就是指令中出现的那些固定值,可以分为数值常数和字符串常数两类。汇编语言用不同的后缀加以区别。如: 0B7H, 0FFH,103,35O, ABCDEFG,179,1001100B。,(2) 寄存器。8086/8088CPU的寄存器可以作为指令的操作数。 (3) 标号。由于标号代表一条指令的符号地址,因此可以作为转移(无条件转移或条件转移)、过程调用CALL以及循环控制LOOP指令
17、的操作数。 (4) 变量。因为变量是存储器中某个数据区的名字如(DATA1),所以在指令中可以作为存储器操作数。,27, 算术运算符。常用的算术运算符有:+(加),(减),*(乘),/(除)和MOD(模除,即两个整数相除后取余数)等。, 逻辑运算符。逻辑运算符有:AND(逻辑“与”),OR(逻辑“或”),XOR(逻辑“异或”)和NOT(逻辑“非”)。, 关系运算符。关系运算符有:EQ(等于),NE(不等),LT(小于),GT(大于),LE(小于或等于),GE(大于或等于)等。 当关系不成立(假)时,结果为0(全0);当关系成立(真)时,结果为0FFFFH(全1)。例如: MOV AX,4 EQ
18、 3 ;关系不成立,故(AX)0 MOV AX,4 NE 3 ;关系成立,故(AX)0FFFFH,(5) 表达式。汇编语言语句中的表达式,按其性质可分为两种:数值表达式和地址表达式。,28,分析运算符。分析运算符用于分析一个存储器操作数的属性。 SEG运算符。利用SEG运算符可以得到一个标号或变量所在段的段地址。例如: MOV AX,SEG ARRAY MOV DS,AX OFFSET运算符。利用OFFSET运算符可以得到一个标号或变量的偏移地址。例如: MOV DI,OFFSET DATA1,汇编语言源程序的格式,P167,29, TYPE运算符。获取变量中每个操作数所含的字节数。这个数值与
19、存储器操作数类型属性的对应关系如下表。 VAR DW ? ;变量VAR的类型为字ARRAY DD 10 DUP(?) ;变量ARRAY的类型为双字STR DB THIS IS TEST;变量STR的类型为字节 MOVAX,TYPE VAR ;(AX)=0002MOV BX,TYPE ARRAY ;(BX)=0004MOV CX,TYPE STR ;(CX)=0001,汇编语言源程序的格式,30, LENGTH运算符。变量有重复操作符DUP时,获取该变量重复的次数;如果未用DUP说明,则得到的结果总是1。 SIZE运算符。变量有重复操作符DUP时,获取分配给该变量的字节总数;如果未用DUP说明,
20、则得到的是TYPE的返回值。 一般地:SIZE=LENGHTYPE,汇编语言源程序的格式,31,VAR DW ?;变量VAR的类型为字ARRAY DD 10 DUP(?) ;变量ARRAY的类型为双字STR DB THIS IS TEST;变量STR的类型为字节 MOVAX,TYPE VAR ;(AX)2 MOV BX,TYPE ARRAY ;(BX)4 MOV CX,TYPE STR ;(CX)1,MOV DL,LENGTH VAR ;(DL)=1=01HMOV DL,LENGTH ARRAY ;(DL)=10D=0AHMOV DL,LENGTH STR ;(DL)=1=01H,MOV DH
21、,SIZE VAR ;(DH)=12=2D=02HMOV DH,SIZE ARRAY ;(DH)=104=40D=28HMOV DH,SIZE STR ;(DH)=11=1D=01H,例题:,汇编语言源程序的格式,32,课堂练习:P213-5,6,33,合成运算符(P168), PTR运算符。PTR运算符可以指定或修改存储器操作数的类型,例如: INC BYTE PTRBXSI INC WORD PTRBXSI THIS运算符。THIS运算符也可指定存储器操作数的类型。例如,要求对同一个数据区既可以字节为单位,又可以字为单位进行存取,则可用以下语句:TAB1 EQU THIS WORD ;EQ
22、U THIS的作用同LABLETAB2 DB 100 DUP(?), SHORT运算符。SHORT运算符指定一个标号的类型为SHORT(短标号),即标号到引用该标号指令之间的距离在128+127个字节的范围内。如:JMP (SHORT) LOOPER,JMP NEAR PTR LOOPER,汇编语言源程序的格式,34,其他运算符 段超越运算符“:”。如: MOV AX,ES:DI 字节分离运算符LOW和HIGH。运算符LOW和HIGH分别得到一个数值或地址表达式的低位和高位字节。例如: STUFF EQU 0ABCDH MOVAH,HIGH STUFF ;(AH)0ABH MOV AL,LOW
23、 STUFF ;(AL)0CDH注释。注释前面要求加上分号(;)。汇编程序对于注释不予理会,即注释对汇编后产生的目标程序没有任何影响。,汇编语言源程序的格式,图5.4 汇编语言程序上机过程,5.1.2 汇编语言程序的上机过程,36,在计算机上运行汇编语言程序的步骤是: (1) 用编辑程序(EDIT)建立ASM源程序文件。 (2) 用汇编程序(MASM或ASM)把ASM文件汇编成OBJ文件。 (3) 用连接程序(LINK)把OBJ文件转换成EXE文件。 (4) 用DEBUG调试程序检查可执行文件是否有逻辑或算法上的错误。 (5) 在DOS命令状态下直接键入文件名就可执行该文件。,汇编语言程序的上
24、机过程,37,EXE程序的组成:1、重定位信息:程序段前缀区PSP2、装入模块:程序本身。,注:DS、ES指向PSP段地址。程序中须重新设置,使其指向数据段(和附加段)。如:,MOV AX,DATAMOV DS,AX,5.1.3 汇编语言和DOS操作系统的接口,当DOS装入或执行一个程序时,DOS确定当时主存最低的可用地址作为该程序的装入起始点。此点以下的区域称为程序段。在程序段内偏移0处,DOS为该程序建立一个程序段前缀控制块PSP(Program Segment Prefix),它占256(=100h)个字节;而在偏移100h处才装入程序本身.另外,上图中,是指程序定位的初始情况,实际上程
25、序中各段间的先后顺序是依程序的结构而定的。,38,1标准方法 首先将用户程序的主程序定义成一个FAR过程,其最后一条指令为RET。然后在代码段的主程序(即FAR过程)的开始部分用如下三条指令将PSP中INT 20H 指令的段地址及偏移地址压入堆栈:PUSHDS ;保护PSP段地址MOV AX,0 ;保护偏移地址0PUSH AX,39,MAIN PROC FAR ;主程序部分START:PUSH DS ;将DS压入堆栈保存 MOV AX,0 PUSH AX ;将0压入堆栈保存 RET ;(IP)(SP)+1:(SP), (SP)(SP)+2 ;(CS)(SP)+1:(SP), (SP)(SP)+
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 汇编语言 ppt 课件
链接地址:https://www.31ppt.com/p-1973689.html