第4章汇编语言程序设计00002.ppt

上传人:本田雅阁 文档编号:2605326 上传时间:2019-04-16 格式:PPT 页数:154 大小:1.93MB
返回 下载 相关 举报
第4章汇编语言程序设计00002.ppt_第1页
第1页 / 共154页
第4章汇编语言程序设计00002.ppt_第2页
第2页 / 共154页
第4章汇编语言程序设计00002.ppt_第3页
第3页 / 共154页
亲,该文档总共154页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第4章汇编语言程序设计00002.ppt》由会员分享,可在线阅读,更多相关《第4章汇编语言程序设计00002.ppt(154页珍藏版)》请在三一文库上搜索。

1、第4章 汇编语言程序设计,4.1 程序设计语言概述 4.2 汇编语言的程序结构与语句格式 4.3 汇编语言的伪指令 4.4 汇编语言程序设计方法 4.5 模块化程序设计技术 4.6 综合应用程序设计举例 4.7 汇编语言与C/C+语言的混合编程,第4章 汇编语言程序设计,本章重点:源程序基本结构 汇编语言的语法规则(基本语法及常用伪指令) 汇编语言程序设计方法 16位实模式程序设计。,程序:是一组为完成某种功能而按一定顺序(由算法确定) 编排的指令序列。,汇编语言:具有执行速度快、易于实现对硬件控制等优点, 是实时控制等应用软件经常使用的程序设计语言。,南京航空航天大学 电子信息工程学院,4.

2、1 程序设计语言概述,机器语言:当指令和数据都用二进制代码表示时,计算机 能够直接识别与执行,因而称之为机器语言。 高级语言:是完全独立于机器的通用语言,效率低。 面向过程、面向对象,必须译成机器语言。 汇编语言:是将机器指令符号化了的编程语言。 是一种采用助记符表示的、面向CPU指令系统的 程序设计语言。,1. 3种语言,南京航空航天大学 电子信息工程学院,能够利用硬件系统的特性(寄存器、标志、中断系统等) 直接对位/字节/字/寄存器/存储单元/I/O端口进行处理。,采用CPU指令系统提供的各种寻址方式编制程序 目标代码占用内存少,执行速度快,效率高,具有实时性。,用汇编语言编写程序的优点:

3、,常用于编写系统软件、实时通信与控制程序、I/O接口驱动 等。,缺点:依赖于机器硬件,通用性和移植性较差。,2. 汇编程序(Assembler),(1)汇编程序的作用 将源程序翻译成机器语言程序; 按用户要求自动分配存储区域(如程序区、数据区、堆栈区等); 自动将各种进制 2#数;将字符 ASCII码;计算表达式的值; 自动对源程序进行检查,指出语法错误 (如,非法格式、未定义的助记符和标号、漏掉操作数等),南京航空航天大学 电子信息工程学院,汇编程序提供汇编语言源程序的所有语法规则,常用的有 : ASM 基本汇编,占内存少; MASM 宏汇编,除ASM功能外,还支持: 宏操作、条件汇编、结构

4、、记录等高级宏汇编语言功能。 有各种版本,并不断在升级中; TASM(Turbo Assembler) Borland公司的汇编编译器,性能同MASM。 OPTASM(Optimizing Assembler) 一种优化的MASM,(2)汇编程序分类,3. 汇编语言程序的上机与处理过程,Microsoft公司,南京航空航天大学 电子信息工程学院,上机环境,汇编语言上机过程 D:EDIT ABC.ASM D:MASM ABC 有语法错,回EDIT下修改程序 D:LINK ABC 有错,回EDIT下修改程序 D:ABC 运行结果错,回EDIT下改程序 或在DEBUG下调试,找原因。 D:DEBUG

5、 ABC.exe,语法:语句和程序结构必须遵循的规则,4.2 汇编语言的程序结构与语句格式,4.2.1 汇编语言源程序的框架结构,源程序应按编译器(如,MASM汇编程序)能够理解的语法编写,每段由伪指令SEGMENT开始,至ENDS结束(完整段定义)。 代码段:程序的主体(必不可少的段)。 堆栈段:在内存建立堆栈区,以存放中断或子程序调用时 的断点地址、各模块间传递的参数等。 数据段和附加数据段:在内存中建立适当容量的工作区, 以存放程序需要的常数或变量等。,(1)源程序由若干个逻辑段组成,程序中段的顺序:数据段、堆栈段定义在前,代码段在后。 (变量应先定义;汇编过程遇到变量时需要知道变量的属

6、性),源程序的结构特点: 按逻辑段组织源程序。包括代码段、堆栈段、数据段等。,程序结构 (P133),; - 段名1 SEGMENT ; 一个段的开始 语句1 语句2 段名1 ENDS ; 一个段的结束 ; - 段名2 SEGMENT ; 另一个段的开始 段名2 ENDS ; 另一个段的结束 ; - ; 其它段 ; - END START ; 源代码结束,源程序以END结束,它通知汇编程序停止汇编。 START标号为程序运行时的起始地址。,程序中段的使用:,8086/8088/80286允许同时使用4种类型的段: 代码段 CS 、堆栈段 SS 、数据段 DS 和附加数据段 ES 80386/8

7、0486和Pentium系列允许同时使用6种段: 以上4个段 FS和GS两个附加数据段 一个源程序中每种类型的段可不止使用一个,如:n个数据段。,(2) ASSUME伪指令 在代码段起始处用ASSUME伪指令说明各个段Reg与逻辑段 的关系,并在程序起始处设置段Reg的初值(代码段CS除外)。,(3)每段由若干语句行组成 每行只有一条语句且不能超过128个字符,允许有后续行。,在8086/8088和实地址模式下,每段的最大长度均为64KB; 在保护模式下,80286允许每个段的最大长度为16MB, 80386Pentium系列CPU允许4GB。,END通知汇编程序停止汇编,START标号为程序

8、运行时的起始地址。,终止当前程序使其正确返回到DOS状态的常用方法有:,将源程序中的主程序定义为FAR,其最后一条指令为RET; 在主程序的开始处使用3条指令: PUSH DS ;保存程序段前缀PSP的段地址 MOV AX,0 ;保存PSP的0偏移地址 PUSH AX ;注: 所保存地址中内容是INT 20H,(4)每条语句由4个字段构成。各字段间用空格分开。,(5)源程序中应设有返回DOS的指令语句,使程序执行完后能够 返回DOS系统的命令接受状态。, 标准序法, 使用DOS的4CH号功能调用,不定义主程序为FAR过程并去掉上面3条指令; 在代码段结束(CODE ENDS)之前增加两条语句:

9、 MOV AH,4CH ;功能号4CHAH INT 21H ;软中断调用,MASM从5.0版开始支持简化段定义,它通过伪指令EXIT返回DOS。,当程序执行到RET,这两个地址会弹出送IP、CS,源程序与PC DOS的接口 汇编语言源程序(.ASM)经过汇编转变为目标程序(.OBJ), 当用链接程序对其进行链接和定位时,操作系统为用户程序:,建立1个256字节的程序段前缀区(PSP),PSP用于存放用户程序信息,包括: 在PSP的开始处(偏移地址0000H) 安排了一条INT 20H 软中断指令 INT 20H功能:系统返回到DOS管理状态,据此特征,用户编写程序时必须: 在程序执行完毕后,能

10、够转到PSP起始处执行INT 20H指令。,定位用户程序 设置DS和ES的值,使之指向PSP的起始(DS/ES PSP的段地址) 以用户程序第1条指令的地址设置CS、IP;以堆栈段地址设置SS、SP。 运行用户程序, 表明:DS/ES在用户程序中应重新设置,4.2.2 汇编语言的语句,1. 语句的种类与格式 (1)语句的种类,语句:汇编语言源程序的基本组成单位,规定一个基本操作。 源程序:语句序列,完成某个特定的操作任务。, 指令语句 可执行语句,对应CPU指令系统规定的一条指令。,三种基本语句:指令语句、伪指令语句和宏指令语句,汇编时,汇编程序为之产生一一对应的机器目标代码。 例:MOV D

11、S,AX ;双字节指令,机器码为8EH、D8H, 伪指令语句 由伪指令构成的说明语句(不可执行),可在任何段内。,汇编时,指示汇编程序如何汇编源程序,如分配存储单元、将程序分段等,本身不产生目标代码,CPU不执行。,例:SEGMENT/ENDS ; 将程序分段信息提供给汇编程序,以不同 ; 的名字来说明是数据段、代码段、堆栈段 例:MESSAGE DB THIS IS A SAMPLE PROGRAM. ; 定义变量MESSAGE在数据段DATA中的存放形式 ;汇编时,汇编程序将MESSAGE定义为一个字节类 ;型数据区的首地址,并按字节存储字符串。,宏指令语句 是以某个宏名字定义的一段指令序

12、列,汇编时,程序中有宏指令语句的地方被展开成相应的指令序列。宏指令语句是一般性指令语句的扩展。,例:SHIFT MACRO ;定义宏指令语句SHIFT MOV CL,4 SAL AL,CL ENDM,南京航空航天大学 电子信息工程学院, 标号和名字 为指令单元和伪指令所起的符号名称,是自定义的标识符。,命名必须符合汇编语言对标识符的规定: 以字母开头,由字母(不区分大小写)、数字(09)及部分特殊 字符(? $和下划线_等)组成的字符串,长度不超过31。 不能是有特定意义的保留字,如寄存器名AL和助记符等。,标号 后必须有冒号,代表指令所在存储单元的符号地址。 在程序中作为JMP、LOOP等指

13、令的转移目标。 名字 用于定义常量、变量、过程、段名等,指示所定义变量、 过程以及段的起始地址。,(2)语句的格式,指令语句的一般格式: 标号: 前缀 指令助记符 操作数 ;注释 伪指令语句的格式: 名字 伪指令定义符 操作数 ;注释, 表示可选,南京航空航天大学 电子信息工程学院, 助记符、定义符 规定指令或伪指令的操作功能,语句中唯一不可缺少的部分,指令助记符,汇编程序将其翻译成机器代码。 MOV AX,100H ;B8 00 01 伪指令定义符,汇编程序根据其要求的功能进行处理。 data SEGMENT ;data与某个段地址对应 string DB Tsinghua ;定义strin

14、g为字节存储区的起始地址,前缀仅可出现在指令助记符前(如,REP及段超越前缀等 ),指令语句中的操作数提供操作对象、存放位置、访问形式。 操作数可以是1个、2个或0个,2个时用逗号,分开。 (INC BX; MOV AX,DATA ; RET) 伪指令语句中操作数的格式和含义随伪操作指令各有不同。, 操作数,南京航空航天大学 电子信息工程学院, 注释,汇编程序对“ ;”之后的内容不做处理。 注释对汇编不起任何作用,不对应于任何机器码,仅增强 源程序的可读性。,操作数的表现形式有4种 常量操作数: 如 ,34 等。 寄存器操作数:如, AX 等。 存储器操作数:如,0100H 等。 表达式操作数

15、:如,BX+2、OFFSET NUM1 等。,以“ ;”开始,对程序的功能加以说明。,2. 语句中的操作数(4种),(1)常量操作数 汇编时值已确定且程序运行期间不变化(立即数/端口地址),整型数值常量 用相应的后缀来定义:2#(B) 、10#(D)、8#(Q)、16#(H) 16#:必须以数字开头来区别H结尾的字符串(AH,abcdH) 即,最高位为字母AF时,必须加前缀 0。 字符串常量 用单引号括起来的一个或多个字符,值为每个字符的ASCII码值。 例: 2=32H , 12=3132H ,A=41H , AB=4142H MOV AL,G ;AL G的ASCII码值 符号常量 在程序中

16、用标识符形式表示的常量,以提高程序的通用性。,(2)寄存器操作数 操作数是寄存器名。如:AX、SI等,MOV AL,05。,(程序中,字符串常量与整型数值常量可交替使用),(3)存贮器操作数 地址型操作数,有标号与变量两种。,标号和变量都与存储器地址相关联,应具有三种属性: 段属性(SEG):标号和变量对应存储单元的段地址,是段基 地址的高16位。 偏移量属性(OFFSET):标号和变量对应存储单元的偏移地址。 类型属性(TYPE): 对标号 指标号与使用它的指令之间的距离远近,有NEAR (近,段内转移或调用标号)和FAR(远,段间)。 对变量 指变量占用存取单元的字节数,有BYTE(字节)

17、、 WORD(字)、DWORD(双字)、4字、10字节5种。,变量:在数据段或堆栈段内 是以存储器寻址方式访问的操作数。 在程序中通过变量名(变量存储单元的符号地址)来引用。, 标号:在代码段内 是指令所存放单元的符号地址。,南京航空航天大学 电子信息工程学院,(4)表达式操作数 由各种操作数、运算符和操作符组成,在汇编时计算。 (不是在程序执行过程中)。,汇编程序先对表达式进行计算,再将得到的值汇编到指令中。, 数值表达式和地址表达式,数值表达式(汇编时产生一个数值): 由常量及算术逻辑运算符或关系运算符等连接而成。,地址表达式(值表示存储器地址,有上述三种属性): 由常量、变量、标号、寄存

18、器及一些运算符组成。,例:MOV AX,124 ; MOV AX,8 ;数值表达式 LEA BX, string + 4 ;地址表达式 MOV BX ES:SI + 4*3 ;地址表达式,南京航空航天大学 电子信息工程学院, 运算符和操作符 MASM宏汇编中有三类运算符:算术、逻辑、关系运算符 两类操作符:分析、合成操作符 运算符:实现对操作数的相关运算。 操作符:完成对操作数属性的定义、调用和修改。,主要有:,算术运算符 ( +、 / 、 MOD ) 逻辑运算符 ( AND、OR、NOT、XOR ) 关系运算符 ( EQ、NE、GT、GE、LT、LE ) 真:FFFFH 或 假: 0 分析操

19、作符 ( SEG、OFFSET 、TYPE、SIZE、 LENGTH 、 HIGH、LOW ) 合成操作符 ( PTR 、DS:、THIS、SHORT),南京航空航天大学 电子信息工程学院,算术运算符 ( +、/、MOD(取余数) ) MOV AX,6 8 ;MOV AX,48,数值表达式中可使用所有算术运算符,算术运算符不影响标志位 例:完成 80H + 90H 可以 MOV AL,80H+90H ;使用数值表达式 ;AL=10H、CF不变 或 MOV AL,80H ;使用加法指令 ADD AL,90H ;AL = 10H、CF = 1,运算结果仍为标号或变量,其三个属性中只有偏移量属性改变

20、,例:设 PLACE是变量名,是个符号地址。则, PLACE23仍是变量名,与PLACE的偏移地址之差为6,地址表达式仅可使用+、两种算术运算符,常用形式: 标号或变量常量,南京航空航天大学 电子信息工程学院,逻辑运算符(AND、OR、XOR和NOT) 实现操作数按位逻辑操作,只适用于数值表达式。 MOV AX, 80h OR 70h ;MOV AX,0F0h,注意:逻辑运算符与逻辑指令助记符 形同意不同,作为助记符时,在程序运行时被执行,操作对象是reg/mem,作为运算符时,在程序汇编时由汇编程序计算,计算结果 构成指令操作数的一部分 。,南京航空航天大学 电子信息工程学院,在两个无符号操

21、作数之间进行大小关系比较: 关系不成立(为假),则结果为“0”(假: 0); 关系成立(为真),则结果为全“1”(真:FFFFH)。,分析操作符(数值返回运算符) 运算对象是存储器操作数,它返回标号或变量的属性值。 合成操作符(修改属性运算符) 作用于存储器操作数(标号或变量)时可以改变它们的属性。,例:MOV BX,PORT LT 5 汇编为: MOV BX,0FFFFH(条件成立) 或: MOV BX,0000H (条件不成立),关系运算符(EQ、NE、LT、GT、LE和GE),结果值在汇编时获得,两个操作数必须同是数值 或 同一个段内的两个存储单元地址,南京航空航天大学 电子信息工程学院

22、, 运算符和操作符的优先权等级,南京航空航天大学 电子信息工程学院,DATA SEGMENT ;定义数据段 D1 DB 5 DUP(?) ;连续的字节单元 CC EQU $D1 ;对单元计数 SUM DW 0 ;为结果保留一个字 DATA ENDS ;数据段定义结束 STACK SEGMENT PARA STACK STACK ;定义堆栈段 DB 100 DUP (?) ;100字节的栈空间 STACK ENDS ;堆栈段定义结束 CODE SEGMENT ;定义代码段 ASSUME DS:DATA,SS:STACK,CS:CODE ;对各段进行说明 BEGIN:MOV AX,DATA ; D

23、S初始化为DATA MOV DS,AX LEA SI,D1 ;预置源数据的指针,例:多个连续字节单元的累加,南京航空航天大学 电子信息工程学院,MOV CX,CC ;预置次数 LODS BYTE PTR SI ;取一个数并修改指针 MOV AH,0 ;清AX的高字节 CLC ;清CF位 AGAN:ADC SUM,AX ;累加 LODS BYTE PTR SI ;再取数并修改指针 LOOP AGAN ;控制循环 MOV AH,4CH ;完成,返回DOS INT 21H CODE ENDS ;代码段结束 END BEGIN ;整个程序结束,4.3 汇编语言的伪指令语句,指示汇编、链接程序如何进行汇

24、编与链接。 影响目标代码生成,本身不产生目标代码。,1. 符号定义伪指令,(1)等值语句EQU 符号名 EQU 表达式 例:PORT1 EQU 312 ;给常量赋予符号名 PORT2 EQU PORT1+1 ;给数值表达式赋予符号名PORT2 ADDR EQU ES:SI+4 ;给地址表达式定义一个名字 CHAR EQU NAME ;为字符串定义新的名字 COUNT EQU CX ;为CX定义新的符号名COUNT LD EQU MOV ;为MOV定义新的符号名LD,注:用EQU定义过的符号不能重新定义,符号定义、数据定义、程序分段、过程和宏定义、模块定义 等。,4.3.1 基本伪指令语句,有

25、选择处理器方式、数据定义、程序分段、条件汇编、结构定义等 。,给常量或表达式赋予一个符号名,方便在程序中的使用。,南京航空航天大学 电子信息工程学院,例:B EQU BP+8 B EQU 20H 不行!,(2)等号语句= 符号名 表达式 (功能与EQU类似),EQU 与 = 的区别: 在同一源程序中,用EQU定义过的符号不能重新定义,= 可以。,例: EMP60 ;定义EMP等于60 EMPEMP+1 ;重新定义EMP等于61 EMP123*4 ;重新定义EMP等于492,符号定义是定义在程序中要使用的常量。 用EQU、= 定义的符号不占用存储器单元。 即,汇编程序不为这样的符号分配存储空间。

26、,特别注意:,南京航空航天大学 电子信息工程学院,2. 数据定义伪指令,(1)格式,用于定义变量(程序中所用的存储器操作数),指定 变量的类型和名称,为变量分配存储单元并赋初值。,变量名 数据定义符 操作数 ,操作数,操作数, 表示可选,存放时低对低高对高,变量名 指示变量存储单元的符号地址 数据定义符 指示变量的类型(字节、字、双字等) 操作数 指示变量的内容(是赋给变量的初值) 多个相同类型的变量可在一条语句中定义,常用的数据定义符有: DB 定义字节变量,每个变量分配1字节的存储单元。 DW 定义字变量,每个变量分配2字节存储单元。 DD 定义双字变量,每个变量分配4字节存储单元。,经过

27、定义的变量有三种属性: SEGMENT,OFFSET, TYPE,例: 定义赋初值的变量 data SEGMENT xx DB 1, -1, 0fcH yy DW 1, -1, 0fcH zz DD 1, -1, 0fcH data ENDS,段地址 可用操作符SEG获得 偏移量 可用操作符OFFSET获得 数据类型 可用操作符TYPE获得,其它的数据定义符有: DQ 变量为4字数据类型(64位) DT 变量为10字节数据类型(80位),南京航空航天大学 电子信息工程学院, 为数据项分配存储单元,用变量名作为该存储单元的名称。,(2)具体形式和功能,例:X DB 25H Y DW 4142H

28、Z DD 12345678H,初始值也可以是表达式: IN_PORT DB PORT_VAL OUT_PORT DB PORT_VAL+1 PORT_VAL是符号常量,已由EQU语句赋了值。,PORT_VAL+1的值在汇编时计算, 预留内存单元,但不赋初值,以存放运算结果。 例: A DB ? ;操作数用?表示 B DW ?,南京航空航天大学 电子信息工程学院,例:ALL_ZERO DB 0,0,0,0,0,0 ALL_ZERO DB 6 DUP(0), 定义字符串(只能用DB定义 ),例: str1 DB TsingHua str2 DB INPUT: , 0dH , 0aH ,$, 定义一

29、个表(数组),例:W_TABLE DW 1122H,3344H B_TABLE DB 1,2,4,9,16,每个字符的值为它的ASCII码,所以只能用DB。,DUP还可以嵌套使用,P141,DUP是重复操作符,当表中的操作数相同时,可用DUP来缩写。 格式:重复次数 DUP ( 操作数),南京航空航天大学 电子信息工程学院,例:STRING1 DB AB STRING2 DW AB STRING3 DW AB,CD,当字符串长度不超过两个字符时,也可以用DW来定义。,注意:3个及以上的字符,只能用DB定义。,南京航空航天大学 电子信息工程学院, 当操作数是标号或变量时,可用DW或DD将标号或变

30、量操作 数的偏移地址或全地址来初始化存储器。,例:XX DW CYCLE YY DD CYCLE CYCLE: MOV BX,AX ;CYCLE是程序中一条指令语句的标号,例:TABLE DB 12H,34H TAL_PS DD TABLE,例:VAR3 DW VAR+1 ; 将VAR+1的偏移地址存 入VAR3开始的两个字节 或 VAR3 DD VAR+1 ; 将VAR+1的全地址存入 VAR3开始的两个字, 数据定义语句使汇编程序对访问存储器的指令,产生正确的 目标代码。,例1:OPER1 DB ?,? OPER2 DW ?,? MOV OPER1,0 ;字节0 OPER1 MOV OPE

31、R2,0 ;字0 OPER2,例2:SUM DB ? INC SUM ;变量SUM的字节内容1,(3)分析操作符与合成操作符 分析操作符(数值返回运算符) 运算对象是存储器操作数,它返回变量或标号的属性值。 合成操作符(修改属性运算符) 作用于存储器操作数时可以改变它们的属性。, 分析操作符(SEG、OFFSET、TYPE、SIZE 、LENGTH) 使用格式: 操作符 标号或变量,例:ARRAY DB 100 DUP(0) MOV AX,SEG ARRAY MOV DS,AX ;对DS初始化 MOV BX,OFFSET ARRAY MOV AL,BX,用分析或合成操作符,可以返回或修改存储器

32、操作数的三种属性。,南京航空航天大学 电子信息工程学院,SEG、OFFSET 返回标号或变量的段地址和偏移地址,TYPE LENGTH SIZE TYPE 返回存储器操作数(标号或变量)的类型值 LENGTH 返回变量用DUP重复定义的的数据项总数, 其他情况返回1。 SIZE 返回TYPE和LENGTH的乘积(为变量所分配的字节 单元总数),对变量:1/2/4 对标号:-1/-2,例1:MOV AX,TYPE ARRAY ;ARRAY是字节变量,该语句汇编结果为 MOV AX,1,例2:,南京航空航天大学 电子信息工程学院,PTR 临时指定或修改存储器操作数的类型属性,保持原 有的段、偏移地

33、址属性,且原定义的类型属性不变。,使用格式: 类型 PTR 标号或变量,例:INC BX (有不确定性) INC BYTE PTR BX INC WORD PTR BX,对变量:,例:ARRAY1 DB 0,1,2,3,4 ARRAY2 DW 0,1,2,3,4 MOV BX,WORD PTR ARRAY13 MOV CL, BYTE PTR ARRAY26 MOV WORD PTRSI,4, 合成操作符 (PTR、LABLE、THIS),仅在当前所在的指令中有效,类型有:BYTE、WORD、DWORD、NEAR、FAR等,配合EQU伪指令,可以为原变量定义新的变量名。,对标号:,ARRAY1

34、 DB 0,1,2,3,4 ARRAY2 DW 0,1,2,3,4 WBYTE EQU WORD PTR ARRAY1 BWORD EQU BYTE PTR ARRAT2 MOV BX,WBYTE3 ;按字使用 MOV CL, BWORD6 ;按字节使用,例:W_VAR DD INCHES INCHES:CMP SUM,100 JMP WORD PTR W_VAR ;段内转移 或 JMP DWORD PTR W_VAR ;段间转移 或 JMP NEAR PTR INCHES ;段内转移 或 JMP FAR PTR INCHES ;段间转移,NEAR PTR可以略去,用PTR指明标号的类型时,可

35、确定是段内转移或段间转移。,例:ABC DW ? A1 EQU BYTE PTR ABC ;A1是ABC的第一个字节 A2 EQU BYTE PTR ABC1 或 A2 EQU A11 MOV AL,A1 MOV AH,A2,对例3可如下处置: MOV AX,WORD PTR OPER1+1 ; AX=3402H MOV AL, BYTE PTR OPER2 ; AL=34H MOV AL, BYTE PTR OPER2+1 ; AL=12H,南京航空航天大学 电子信息工程学院,LABLE 为当前存储单元定义一个指定类型的标号或变量。 常用于定义1个数据块或标号, 使之具有多重名字和属性.,例

36、:WBYTE LABLE WORD ;定义一个字类型的数据区 ARRAY DB 1,2,3,4 ;定义一个字节型的数据区 MOV AL,ARRAY ; 01H AL MOV AX,WBYTE ;0201H AX,THIS 与EQU配合使用,具有LABLE的同样作用。 使用格式: 标号或变量名 EQU THIS 类型 例:BWORD EQU THIS BYTE ; 定义字节 ARRAY DW 100 DUP(?) ;定义字,WBYTE 、ARRAY 指向同一个数据区,但有不同的类型属性,将原定义的字缓冲区ARRAY按字节区BWORD来使用,使用格式:标号或变量名 LABLE 类型,南京航空航天大

37、学 电子信息工程学院,3. 程序分段伪指令(将程序分成若干逻辑段),用于告诉汇编程序和链接程序, 如何按逻辑段来组织程序和利用存储器。,南京航空航天大学 电子信息工程学院,(1)段定义伪指令 SEGMENT/ENDS 定义 DS/ES/SS/CS 段,指出段名和段的各种属性。,段定义由伪操作SEGMENT开始、ENDS结束。SEGMENT/ENDS 必须成对出现,且段名(合法标识符)必须相同。 SEGMENT和ENDS语句之间可以有指令和其他伪指令,表示存放 在该段内存中的变量、指令或其他伪指令对该段内存的处理。 程序中可以定义多个段。 程序经汇编、链接及装入内存后,段名为一具体的段地址。,格

38、式:段名 SEGMENT 定位类型组合属性类别名 (段体) 段名 ENDS,段起始地址的高16位,段的三个属性,顺序不可交换,段的三个属性,为源程序的汇编与链接提供了必要的信息。,定位类型 告诉链接程序链接时段的起始边界。有4种选择。,组合类型 在多模块(每个模块有自己的代码段、数据段、 堆栈段)组合时,告诉链接程序本段与其他模 块中同名段的链接关系。有6种选择。,类别名 给各段的名字信息,用单引号括起来(STACK、 CODE、DATA等)。若缺省,表明该段类别为空。 同名同类别的段在内存中依序连续存放。,南京航空航天大学 电子信息工程学院,例: 两个模块,汇编连接后有,模块1: STACK

39、 SEGMENT STACK DW 20 DUP (?) STACK ENDS DATA SEGMENT COMMON DATA ENDS CODE SEGMENT PUBLIC CODE ENDS END,模块2: STACK SEGMENT STACK DW 30 DUP (?) STACK ENDS DATA SEGMENT COMMON DATA ENDS CODE SEGMENT PUBLIC CODE ENDS END,南京航空航天大学 电子信息工程学院,(2)段寄存器说明伪指令 ASSUME,例:P145 说明如下:, 段定义时用了STACK,系统会自动初始化SS、SP,这时 可

40、去掉SS:STACK以及代码段中初始化SS、SP的4条语句。 CS、IP的初始值由伪指令END MAIN装入,标号MAIN标示 程序开始执行的第1条指令地址, 只有主程序的END允许带标号。,建立段与段寄存器之间的联系,说明源程序中定义 的段应由哪一个Sreg去寻址。,格式:ASSUME 段寄存器:段名,段寄存器:段名,,注意: ASSUME并未真正的将段地址装入相应的Sreg Sreg(CS除外)的初值必须由用户在程序的开始处用指令来设置,基于 、 ,通常在程序中仅需对DS、ES段寄存器作初始化。,南京航空航天大学 电子信息工程学院,END伪指令(END 启动地址 ) 指示源程序到此结束(汇

41、编程序不处理 END 之后的语句),注意: 源程序中必须有 END 结束语句。 启动地址可是一个标号或过程名, 指示程序的入口。 程序装入内存后,系统跳转到程序的入口处, 开始执行。,取消先前建立的段与段寄存器的联系 ASSUME 段寄存器: NOTHING 需要时可再重新建立段寄存器与新的段之间的关联。,南京航空航天大学 电子信息工程学院,(3)组定义伪指令 GROUP,组内各段装在一个64KB的物理段中,各段间的跳转是段内跳转。,格式:组名 GROUP 段名,段名,将程序中若干不同名的段集合成一个组,并指定组名。,(4)指定地址伪指令 ORG,ORG语句之后段内所有的代码或数据均以表达式(

42、常量) 的值为起始偏移量连续存放,除非遇到另一个ORG语句。 此语句本身并不占内存。,格式1:ORG 表达式 ;将表达式的值(065535) LC 格式2:ORG $+表达式 ;将LC的当前值$表达式的值LC,强行指定地址计数器LC的当前值,以改变段内在它 之后的代码或数据块存放的偏移地址。,记载正在汇编的指令代码或数据存放在当前段内偏移量的部件,南京航空航天大学 电子信息工程学院,DATA SEGMENT ORG 0004H AVR1 DW 2030H AVR2 DB 40H DWVR DW AVR1 DDVR DD AVR2 DATA ENDS,例1:设DATA的段地址为2000H,南京航

43、空航天大学 电子信息工程学院,例2: VECT SEGMENT ORG 10 VECT1 DW 47A5H ORG 20 VECT2 DW 0C956H ORG $+8 (跳过8个字节的存储区) VECT3 DW 0123H,例3:ARRAY DW 1,2,$+4,3, 4, $+4,南京航空航天大学 电子信息工程学院,南京航空航天大学 电子信息工程学院,例4: DATA SEGMENT ORG 30H DB1 DB 12H,34H ORG $+20H STRING1 DB ABC H COUNT EQU $-STRING1 DATA ENDS,南京航空航天大学 电子信息工程学院,4. 过程和

44、宏定义伪指令,(1)过程定义伪指令 PROC/ENDP,格式:过程名 PROC NEAR/FAR RET RET 过程名 ENDP,过程(子程序)和宏都是程序段的一种形式,它们是 模块化程序设计的基础。,过程的属性,缺省时为NEAR,定义一个过程,并指出过程名及过程的属性。,一段由CALL指令调用,用RET返回的程序,过程定义由PROC开始,至ENDP结束,之间为过程的指令序列。 程序中可以定义多个过程(主、子程序都可用过程来表示)。 程序经汇编、链接及装入内存后, 过程名为一具体的内存地址, 指示过程的入口。,南京航空航天大学 电子信息工程学院,NEAR过程只能被定义该过程的段中的其他程序调

45、用(段内调用) FAR过程可由任何段中的程序调用(段间调用) 根据过程的属性,汇编程序自动将CALL/RET指令翻译成段内 (段间)调用及段内(段间)返回的目标代码。,(2)宏定义伪指令MACRO/ENDM,宏扩展:汇编时,将对应的宏体代替宏指令并产生目标代码。 宏体的每条语句前冠以“” 。,使用“宏”功能可以减少重复编写相同语句段的工作。 宏功能的使用过程是:宏定义、宏调用、宏展开。,可同时包含指令语句和伪指令语句, 宏的定义、调用与扩展 宏定义格式:宏指令名 MACRO 形参,形参 ;宏体(指令序列) ENDM 宏定义是指用一个标识符(宏指令名)来代替一组指令序列,宏调用格式:宏指令名 实参,实参 宏调用是在源程序中用宏指令代替所定义的程序段。, 取消宏指令名伪指令PURGE 格式:PURGE 宏指令名 , ;注销之前定义的宏指令名,例 P148,南京航空航天大学 电子信息工程学院,(3)宏与过程的区别 对需重复使用的模块既可定义为宏,也可定义为过程。,宏:由汇编程序识别,汇编时完成宏扩展(宏体代码插入)的处理。 过程:汇编时仅产生CALL指令的代码,在程序执行时完成调用。 宏可以直接传递参

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1