版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章 汇编语言程序设计课时分配: 8学时教学要求:1、 熟练掌握汇编语言的格式及结构2、 熟悉常用的伪指令3、 了解中断调用的功能4、 能够编写一些常见的简单程序教学内容:1、 汇编语言概述2、 伪指令3、 中断调用4、 程序设计基础本章重点:结合实例理解汇编语言程序设计的基本步骤;掌握汇编语言程序设计的基本方法;熟练运用循环、分支和子程序的程序设计方法解决问题。本章难点:依据所要解决的问题,选择正确的程序设计方法,正确地运用指令编写实用的汇编原程序1汇编语言概述语言分类:机器语言、汇编语言、高级语言。以助记符描述的指令称作汇编格式指令或符号指令,通常简称指令。指令和伪指令的集合及其程序设计
2、规则便构成了汇编语言。用汇编语言编写的程序就是汇编语言源程序。汇编语言源程序目标程序可执行程序汇编连接汇编语言程序要能在机器上运行,还必需将汇编源程序汇编成可执行程序。为此必须完成以下几个步骤。 过程如下图所示。1) 编辑源程序;2) 调用宏汇编对源程序进行汇编;3) 对目标程序进行连接;4) 运行可执行程序并调试;1.1汇编语言的结构一个完整的汇编语言程序通常由若干逻辑段组成,包括数据段、附加段、堆栈段和代码段,分别映射到存储器中的物理段中。每个逻辑段以SEGMENT语句开始,以ENDS语句结束,整个源程序用END语句结尾。源程序中所有的指令码都放在代码段内,而数据、变量等则放在数据段和附加
3、段内,程序中可以定义堆栈段,也可以不定义,而是利用系统中的堆栈段。程序中可以有多个代码段,也可以有多个数据段、堆栈段和附加段。2、程序结构框架1) 程序由数条语句构成,每条语句占一行。指令性语句(指令语句)指示性语句(伪指令语句)2) 分段结构程序按段编写, 与8086内存分段编址相对应。每段由伪操作SEGMENT开始、由ENDS结束。3) 程序最后为END结束语句。4) 程序中设有返回DOS的功能。使程序执行完后返回DOS系统的命令接受状态。5) 程序中用到内存操作数时,应按操作数的寻址方式,给相应的段寄存器赋值。见书上151页【例4-1】,完整的程序让学生有个认识。1.2 语句类型及格式汇
4、编语言的语句可分为两类:指令性语句和指示性语句。指令性语句就是由指令组成的,可被CPU执行的语句,就是前面所讲到的指令系统。指示性语句则不是由CPU执行,而是用来告诉汇编程序如何对程序进行汇编的指令,不生成目标代码,就是后面讲到的伪指令。1、指令性语句格式:标号: 前缀 操作码 操作数,操作数 ;注释2、指示性语句格式:名字 伪操作指令 操作数,操作数, ;注释说明:“”之间的是可选项,可有可没有。注释:是指对指令的说明,可有可没有,前面必需加“;”。3、两者区别l 标号表示的是指令的符号地址,后面要加:,而名字表示的变量名、段名和过程名等,后面不加:。l 指令性语句中的操作数最多有两个,而指
5、示性语句种的操作数可根据需要有多个,之间用“,”隔开。1.3 数据项及表达式操作数包括三类:立即数操作数、寄存器操作数、存储器操作数,而立即数(数据项)又可以是常量、标号、变量和表达式。1、常量包括数字常量和字符串常量,数字常量分为:十进制、二进制和十六进制,字符串常量是用单引号 括起来的一个或多个ASCII字符。2、标号是人为确定的,是给指令或某一存储单元地址所起的名字。说明:标号不能以数字开头,但数字可以出现在标号的中间或末尾;最长为31个字符,可以由数字、字母和下划线组合而成;在指令性语句中,它代表该指令的符号地址,在程序中其它地方可以引用这个标号。有3种属性:段、偏移量和类型。l 段属
6、性:就是标号所在段的段地址;l 偏移量属性:就是指标号所在段的起始地址到定义该标号的地址之间的字节数(偏移地址),是16位的无符号数。l 类型:有两种,NEAR和FAR。NEAR表示为近标号,只能在段内引用,地址指针为2个字节;FAR 表示为远标号,可在其它段被引用,地址指针为4个字节。3、变量是指存储器中某个数据区的名字,由于数据区中的内容是可以改变的,因此,在程序中,变量的值也可以改变。变量在指令中可以作为存储器操作数引用。变量名由字母开头,最长为31个字符。在使用中,应注意:1) 变量类型与指令的要求须一致;2) 在定义变量时,是指数据区的首地址;有3种属性:段、偏移量和类型。段属性:就
7、是变量所在段的段地址;偏移量:就是指变量所在段的起始地址到变量地址之间的字节数。类型:BYTE、WORD、DWORD、QWORD、TBYTE,表示数据区中存取操作对象的大小。注意:1) 变量类型与指令的要求必须相符;2) 定义变量时,变量名对应的是数据区的首地址。如果数据区有多个数据,则在对其它数据操作时,需修改地址。4、表达式表达式不是指令,本身不能执行,是操作数的一种表示形式,在程序汇编时,将表达式进行相应的运算,得到一个确定得值。所以,在程序运行时,表达式本身已是一个有确定值的操作数。表达式仅是将求其值的计算任务交给了汇编程序来完成。表达式是由操作数和运算符组成。例:MOV AX,BP4
8、 ;第二个操作数为表达式用一个运算符可以对一个操作数或几个操作数进行运算,就构成一个表达式,从而得到一个新的值。运算符包括:1) 算术运算符:、MOD;可用于数值表达式和地址表达式。算术运算符用于数值表达式时,其汇编结果也是一个数值。例:MOV AX,35+3 相当于 MOV AX,12H用于地址表达式时,通常使用“”和“”运算符,也可以用“”、“”。例:MOV AX,START+2MOV AX,START+2*42) 逻辑运算符:AND、OR、NOT、XOR;一般只用于数值表达式,用来对数值进行按位逻辑运算,并得到一个数值结果。例:MOV AX,NOT 01010101B 相当于 MOV A
9、X,10101010B注:逻辑运算指令:只出现在指令的操作码部分,运算在执行指令时完成;逻辑运算符:只出现在指令的操作数部分,运算在汇编时完成;例:OR AL,101010000B OR 00001010B 相当于 OR AL,10101010B3) 关系运算符:EQ、NE、LT、GT、LE、GE参与关系运算的两个操作数必须都是数值,或是同一段中的存储单元地址,而运算结果是一个逻辑值。如果关系式不成立,结果为“假”,在汇编时,每一位的输出都为“0”如果关系式成立,结果为“真”,在汇编时,每一位的输出都为“1”;例:MOV AX,5 EQ 0101 MOV AX,0FFFFHMOV BL,11H
10、 LE 16 MOV BL,00H4) 取值运算符和属性运算符取值运算符用来分析一个存储器操作数的属性;而属性运算符则是规定存储器操作数的某个属性。包括:取值运算符OFFSET、SEG及属性运算符PTR OFFSET:用来取得一个标号或变量的偏移地址。例:MOV SI,OFFSET DATA1 LEA SI,DATA1 SEG:用来取得一个标号或变量的段地址。MOV AX,SEG DATA1MOV DS,AX PTR:用来对存储器操作数规定类型,通常和伪指令BYTE、WORD、DWORD连起来使用。例: JMP WORD PTR BX+DI;段内间接转移JMP DWORD PTR BX+DI
11、;段间间接转移MUL BYTE PTRSI说明:PTR运算符仅对当前指令有效。5) 其它运算符 方括号:指令中用方括号表示存储器操作数,而方括号中的内容表示操作数的偏移地址。例:MOV AX,BX 段超越运算符“:”,跟在某个段寄存器名的后面表示段重设,用来指定一个存储器操作数的段属性,而不管其原来隐含的段是什么。例:MOV AX,ES:BX2伪指令属于指示性语句,与CPU指令的区别:1) CPU指令在程序运行时由CPU执行,每条指令对应一个特定的操作;而伪指令在汇编过程中由汇编程序执行。2) 汇编以后,每条CPU指令被汇编并产生一条与之对应的目标代码;而伪指令不产生与之相应的目标代码。3)
12、两者都有标号,但CPU指令的标号有冒号,而伪指令中的标号没有冒号;1.1数据定义伪指令功能:主要用来定义一个变量的类型,给存储器赋初值,给变量分配存储空间。1、格式 变量名 伪指令 操作数 ,操作数,方括号中的变量名为可选项,变量名后面不跟冒号。常用伪指令包括:DB、DW、DD、DQ、DT:用来定义字节、字、双字、四字和十字节的压缩BCD码。例:CR DB 0DHCR DW 0DFFH2、操作数说明1) 操作数可以是常数、表达式或字符串;例:CR DW 1005+202) 数据定义伪指令可以定义多个数据元素,例:CR DB 0DH,02H,08H,但每个数据元素的值不能超过由伪指令所定义的数据
13、类型限定的范围3) 字符和字符串都必须放在单引号内,且定义字符串只能用DB;3、DUP:重复操作符,用来重复多次同样的操作。格式: 重复次数 DUP (操作数,操作数,)“重复次数”可以是表达式,但结果必须是正整数。例:A1 DW 10 DUP( 2 DUP(2,0,1),4)MOV AX,A1+8 来说明存储单元的内容4、“?”:可以给变量定义存储空间,但不给变量赋初值。例:A1 DW ?A1 DB 20 DUP (?)1.2 符号定义伪指令功能:就是给一个表达式赋给一个名字。格式:名字 EQU 表达式表达式可以是常数、符号、数值表达式、地址表达式及指令助记符。例子见书上158页说明:EQU
14、对同一个符号不能重复定义,若需要对符号重复定义时,可用“”伪指令。1.3 段定义伪指令汇编语言源程序是用分段的方法来组织程序、数据和变量的,一个程序由若干逻辑段组成,每个逻辑段就是通过段定义伪指令来定义的。格式:段名 SEGMENT 定位类型 组合类型 类别段名 ENDS说明:SEGMENT和ENDS 必须成对出现,对于同一个逻辑段定义,两者段名必须相同,并且段名不能与指令助记符或伪指令重名。定位类型、组合类型、类别的说明,学生自己看书。例如: DATA SEGMENT DAT1DW 20 DUP (?)DATA ENDS1.4 设置段寄存器伪指令格式: ASSUME 段寄存器:段名,功能:用
15、来指明用SEGMENT 定义的段,属于哪个段。例如: DATA SEGMENT DAT1DW 20 DUP (?)DATA ENDSASSUME DS:DATA注意:ASSUME只是指明所定义的段属于哪个段,但没有把所定义段的段地址装入到段寄存器中,即段初始化,但代码段的段地址是自动装入的。8086采用分段结构,可以有多个逻辑段,但每个程序模块只允许有4个逻辑段,即一个代码段、一个数据段、一个附加段和一个堆栈段。见书上161【例4-5】1.5 过程定义伪指令在程序设计中,通常将具有某种功能的程序块看作一个过程,可被其它程序来调用。格式:过程名: PROC NEAR/FARRET过程名: END
16、P说明:过程名实际上是过程入口的符号地址,PROC 和ENDP必须成对出现,且两者过程名必须相同;NEAR:近过程,与调用程序在同一个代码段内,可省略;FAR:远过程,与调用程序在在不同的代码段内,不能省略;过程可以嵌套,也可以递归调用;过程的最后一条指令必须是返回指令RET。见书上162【例4-6】1.6 宏定义伪指令在程序设计中,如果多次使用同一个程序段,就可以将这个程序段定义为一个宏指令,需要时,使用宏指令名来代替,即宏调用。格式:宏命令名MACRO 形式参数,ENDM说明:宏命令名是宏定义的标志,但ENDM前不加宏命令名。形参有多个,在宏调用时,用实际参数顺序代替形式参数。见书上163
17、【例4-7】与过程定义的区别:宏命令伪指令由宏汇编程序在汇编过程中进行处理,遇到宏调用时,宏汇编程序就用所对应的宏定义体来代替;而过程调用,执行CALL指令时,CPU使程序控制转移到调用过程的入口地址。宏调用只简化源程序,但不能简化目标代码;对于过程来说,每个过程的定义都产生相应的机器代码,调用时,只需用CALL指令,在程序中,不会出现所调用程序的目标代码。过程调用需要保护断点地址、恢复断点地址等相关操作,额外占用CPU时间,而宏定义不需要断点保护,相比较执行速度较快。1.7 模块定义与连接伪指令1、NAME伪指令格式:NAME 模块名功能:用于给汇编后得到的目标程序一个名字,NAME前不允许
18、加标号。2、TITLE 伪指令格式:TITLE 标题名功能:为程序清单的每一页指定打印的标题。3、END伪指令格式:END 标号功能:是源程序的结束标志。标号表示程序执行的开始地址,可省略。说明:汇编程序对 END 之后的语句不进行处理,程序中所有有效语句应放在 END 语句之前。源程序中必须有 END 结束语句,否则程序要出错。练习1、写出下列数据段中每个符号所对应的值DATAREA SEGMENT MAXEQUOFFFH;MAX=0FFFHVALONEEQUMAX MOD 10H ;VALONE=000FHVALTWOEQUVALONE 2;VALTWO=001EHBUFSIZEEQU(V
19、ALTWO GT 10H) AND 10H)+10H ;BUFSIZE=0020HBUFFERDB BUFSIZ DUP (?)BUFENDEQUBUFFER+BUFSIZE-1;BUFEND=001FHDATAREAENDS2、已知32位数存放在DX:AX中,编写程序将32位数左移4位,并将最高位存入CH寄存器中(低4位)3 DOS 功能调用一、概述1、 系统中提供的功能调用有两种,DOS功能调用、BIOS功能调用。用户程序在调用这些系统服务程序时,是采用软中断指令来实现,即:INT n (n为中断类型号),并且这些系统服务程序在系统启动时已被加载到内存中,程序入口也被放到了中断向量表中。2
20、、 BIOS是( Basic Input/Output System的缩写,即基本输入/输出系统),指固化在ROM中的一组程序,简称ROM BIOS;BIOS提供了最低级,最直接的硬件控制,是硬件与软件之间的接口。BIOS主要包括以下一些功能:1) 系统自检及初始化。例如,系统加电启动时对硬件进行检测;对外部设备进行初始化;设置中断向量;引导操作系统等。2) 系统服务。为操作系统和应用程序提供系统服务,这些服务主要与I/O设备有关,如读取键盘输入等。3) 硬件中断处理。提供硬件中断服务程序。3、 DOS是IBM PC系列微机的操作系统,负责管理系统的所有资源,协调微机的操作,其中包括大量的可供
21、用户调用的服务程序。DOS的功能调用不依赖于具体的硬件系统。设置入口参数在AH设置功能号m执行中断指令INT 21H分析、应用出口参数所有的DOS系统功能调用是采用软中断指令INT 21H来实现, 21H是一个中断向量号,共包括90多个中断服务程序,有设备管理、目录管理、文件管理和其它功能操作。并且对每一个子功能进行了编号,即功能号。我们可以通过来指定功能号来调用INT 21H中相应的中断服务程序。 (见411页附录C3 )4、 DOS功能调用的使用方法1) 在相应的寄存器中设置有关的入口参数;2) 在AH寄存器中设置功能号;3) 执行INT 21H指令;4) 从规定的寄存器中分析出口参数;例
22、:单字符输入功能调用MOV AH, 01H ;设置功能号 INT 21H ;执行中断调用CMP AL, 0DH ;分析、应用出口参数二、常用的DOS功能调用l 显示器输出:显示单字符 (02H功能 ),显示字符串 (09H功能)l 键盘输入:单字符输入(01H、07H、08H功能)、字符串输入(0AH功能)l 返回到DOS1、显示单字符 ( 02H功能 )入口参数:DL要显示字符的ASCII 码 功能号: AH02H类型号: 21H出口参数:无实现功能:显示所指定字符,光标随动。例: 显示字符AMOV DL, AMOV AH, 02HINT 21H例: 使光标回到下一行的行首。MOV DL ,
23、 0DH ;显示回车符MOV AH , 02HINT 21HMOV DL , 0AH ;显示换行符MOV AH , 02HINT 21H2、 显示单字符 ( 06H功能 ),直接控制台I/O,即可输入也可输出。412页,见附录C3,06H3、显示字符串 ( 09H功能 )入口参数:DS:DX = 字符串的首地址功能号:AH = 09H类型号:21H出口参数:无实现功能:显示字符串,且光标随动。说明:在定义要显示的字符串,字符串最后应为$,作为结束显示的标志。例:编程显示一个字符串 data SEGMENT ;定义显示的子符串stri DB ,$data ENDScode SEGMENT ASS
24、UME CS:code, DS:dataStart: MOV AX, data ;置缓冲区地址于DS:DX MOV DS, AX LEA DX, stri MOV AH, 09H ;调显示功能INT 21H Code ENDSEND Start4、单字符输入 ( 01H、07H、08H功能)l 输入一个字符,在屏幕上回显(01H)入口参数:无功能号:AH = 01H类型号:21H出口参数:AL = 键入字符的ASCII码实现功能:从键盘输入一个字符,并在屏幕上回显,光标移动,检测Ctrl-Break键见书上171页【例 4-8】l 输入一个字符,不在屏幕上回显(07、08H功能),且07H为直
25、接控制台输入。入口参数:无 功能号: AH = 08H类型号: 21H出口参数:AL = 键入字符的ASCII码实现功能:从键盘输入一个字符,不在屏幕上回显,不检测Ctrl-Break键例:用不带回显功能输入密码时:Input: MOV AH, 08H ;等待从键盘输入 INT 21H MOV DI, AL ;存入缓冲区 CMP AL, 0DH ;是回车符? JNZ input ;不是,继续输入Check: ;密码检查5. 字符串输入 ( 0AH 功能 )入口参数: DS:DX = 缓冲区的首地址,(DS:DX ) = 限制最多输入的字符数 功能号: AH = 0AH类型号: 21H出口参数:
26、 (DS:DX+1 ) = 实际键入的字符个数(不含回车符),从( DS : DX+2 )开始顺序存放键入的字符串, 回车符0DH为串尾最后一字符。实现功能:等待从键盘输入字符串,并存入设定的缓冲区内,同时回显字符串,光标随着移动,回车符使光标回到行首。注意事项:应按要求先定义缓冲区,再调用。例:应用0AH功能输入字符串data SEGMENT ;定义缓冲区 max DB 11 ;定义限制最多输入个数 lenth DB ? ;用于存放实际输入个数 stri DB 11 DUP(?) ;用于存放输入的字符串data ENDScode SEGMENT ASSUME CS:code, DS:data
27、start: MOV AX , data ;置缓冲区地址于DS:DX MOV DS , AX LEA DX , max MOV AH , 0AH INT 21H ;调0A输入功能 code ENDS END start6、返回到DOS入口参数:无 功能号: AH4CH类型号: 21H出口参数:无实现功能:使程序正常退出并返回到DOS。例1:利用DOS 功能调用,编程从键盘输入字符串,并且给出显示提示:Please input:data SEGMENT stri DB Please Input:,$max DB 11, ?, 11 DUP(?)data ENDScode SEGMENT ASSU
28、ME CS:code, DS:datastart: MOV AX, data ;置缓冲区地址于DS:DX MOV DS, AX LEA DX, stri MOV AH, 09H ;显示提示 INT 21H LEA DX, max ;等待从键盘输入字符 MOV AH, 0AH INT 21H MOV AH, 4CH;返回DOS INT 21H code ENDS END start4 汇编语言设计基础一、程序设计概述1、程序质量的评价标准1) 程序的正确性和完整性;2) 程序的易读性;3) 程序的执行时间和效率;4) 程序所占内存的大小;89C52(8K), 89C55(20K)2、程序设计的一
29、般步骤1) 分析问题,建立数学模型,模块划分并画出结构框图;2) 确定各模块的数据结构和算法;3) 画程序流程图;4) 用指令和伪指令为数据和程序代码分配存储空间或寄存器;5) 编写、调试程序;二、源程序的基本结构1、顺序结构最常见、最基本的程序结构,CPU按照指令的排列顺序逐条执行。例: 已知 Z=(X+Y)-(W+Z),其中X,Y,Z,W均为用压缩BCD码表示的数,写出程序。分析:在这里要注意是BCD数相加、减运算,要进行十进制调整。具体程序如下:MOVAL,ZMOVBL,WADDAL,BLDAAMOVBL,AL ; BL=(W+Z)MOVAL,XMOVDL,YADDAL,DL ; AL=
30、(X+Y)DAA ;十进制调整SUBAL,BL ; AL=(X+Y)-(Z+W)DAS ;十进制调整MOVZ,AL ;结果送Z 注意:调整指令隐含的操作数是AL(AX);让学生看书上172页 【例4-14】2、分支结构分支程序的基本思想是根据逻辑判断的结果来形成程序的分支,如图,若A成立,则执行P1;否则执行P2。 例:设X为字节存储单元,Y为字存储单元,编程实现下面的功能。流程图:见书上174页 【例4-16】与【例4-17】3、 循环结构在程序中,需要多次重复执行操作时,可用循环来实现。循环初始设置循环体循环条件判断?YN循环初始设置循环体循环条件判断?YN当型循环(当条件成立进入循环)直
31、到型循环(直到条件成立退出循环)循环程序在结构上包括三部分:循环初始化、循环体、循环控制。循环程序有两种结构形式:一种是DOWHILE结构,另一种是DOUNTIL结构。见书上176页图4-61) DOWHILE 结构:先判断循环条件,若满足,则执行循环体,否则退出循环;2) DOUNTIL结构:先执行循环体之后,再判断循环控制条件是否满足,若满足,则继续执行循环操作,否则退出循环。DOWHILE结构的循环程序,其循环体有可能一次都不执行,而DOUNTIL循环程序的循环体至少必须执行一次。见书上176177页 【例4-18】,分析流程图,再说明程序思路例: 设内存BUFF开始的单元中依次存放着30个8位无符号数,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年《土力学》期末强化训练高能附答案详解【培优A卷】
- 2026年现代通信新技术通关模拟卷附答案详解(综合卷)
- 2026年生物绿色环保测试题及答案
- 2026年左撇子智商测试题及答案
- 2026年钢筋原材测试题及答案
- 2026年七彩期中测试题及答案
- 2026年品社新课标测试题及答案
- 2026年文化职业能力测试题及答案
- 美容师面部护理顾客心理分析
- 2026年农贸市场测试题及答案
- 空乘面试常用英语
- GB/T 12230-2023通用阀门不锈钢铸件技术条件
- 华北理工选矿学课件02磁电选矿-5电选机
- 特殊疾病儿童预防接种问题探讨
- 云南省地图含市县地图矢量分层地图行政区划市县概况ppt模板
- 突发环境事件应急隐患排查治理制度
- 2022新版语文课程标准测试题及答案
- 拔河竞赛规则
- 第6章双离合器变速器结构与原理课件
- 机电传动控制期末考试总结复习资料
- 硫化成型日报点检表(橡胶)
评论
0/150
提交评论