版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,朱亚萍 杭州电子科技大学自动化学院,微机原理与接口技术,2,第四章 汇编语言程序设计,汇编语言程序格式 伪指令语句 DOS系统功能调用和BIOS中断调用 程序设计方法 宏汇编和条件汇编,内 容 提 要,3,汇编语言(Assembly Language) 指令的助记符符号地址标号 是机器语言的符号表示,是较低级的语言。 源程序 利用汇编语言编写的程序,称源程序。不能被机器识别。 源程序的运行 汇编程序翻译成二进制的浮动目标程序连接程序将目标文件与库文件相连,形成可执行程序可执行的程序在机器上直接运行 高级语言:可读性好,编程简单; 汇编语言:实时性能好,程序效率高,节省内存,运行速 度快。,
2、第四章 宏汇编语言程序设计 概述,概 述,4,第四章 宏汇编语言程序设计 概述,例 在屏幕上显示并打印字符串“This is a sample program”。一个完整的用汇编语言编写程序的格式: DATASEGMENT ;数据段 DA1DBThis is a sample program. DB0DH,0AH, $ ;回车、换行 DATAENDS ; STACKSEGMENT STACK STACK;堆栈段 ST1DB100 DUB(?) STACKENDS ; CODESEGMENT;代码段 MAINPROCFAR ASSUME CS:CODE,DS:DATA,SS:STACK STAR
3、T:MOVAX,STACK;送堆栈段地址 MOVSS,AX,5,第四章 宏汇编语言程序设计 概述,PUSHDS ;正常返回所需段地址及偏移地址 MOVAX,0 PUSHAX MOVAX,DATA;送数据段段地址 MOVDS,AX MOVAH,9;DOS 9号功能调用,显示字符串 MOVDX,OFFSET DA1 INT21H RET MAINENDP CODEENDS ENDSTART,6,4-1 汇编语言程序格式 指令性语句,指令性语句:机器指令相对应,可译成目标代码(机器指令代码)。 语句格式:标号: 指令助记符 操作数,操作数;注释 标号: 指令语句的符号地址,后面必须紧跟冒号“:”。
4、标号可使用的字符为字母(AZ,az)、数字(09)或某些特殊字符(、一、?)等。 第一个字符必须为字母或某些特殊字符,最大有效字符长度为31个字符(汇编程序仅识别前面31个字符)。 标号可以省略,它经常作为表示转移的地址。,一、指令性语句,4-1 汇编语言程序格式,7,4-1 汇编语言程序格式 指令性语句,注释: 说明指令或程序的功能,可省略。注释前加分号“;”。,操作数: 参与指令运算的数据。 可以有一个、多个操作数或无操作数;多个操作数之间用逗号“,”隔开,操作数与指令助记符之间用“空格”隔开。 操作数可以是常数、变量、标号、寄存器名或表达式。,指令助记符: 指令名称的代表符号,指出指令的
5、操作类型。 可译成机器码;不可省略,是关键字。,8,4-1 汇编语言程序格式伪指令语句,名字: 用符号地址表示,名字后不允许带冒号“:”,但可以省略。 通常是变量名、段名、过程名、符号名等。,二、伪指令语句,伪指令语句:无对应的机器指令,汇编时对伪指令进行处理,可完成数据定义、存储区分配、段定义、段分配、指示程序结束等功能。 语句的格式:名字 伪指令指示符 操作数,操作数 ;注释,9,4-1 汇编语言程序格式伪指令语句,注释:功能和使用与指令性语句相同。,操作数: 不同伪指令有不同要求。 操作数可以是常数、变量、字符串、表达式等。,伪指令指示符: 汇编程序MASM规定的符号。 常用的有变量定义
6、语句(DB、DW),符号定义语句( EQU、= ) ,段定义语句( SEGMENTEND ) ,段分配语句( ASSUME ) ,过程定义语句( PROCENDP )等。,10,4-1 汇编语言程序格式数据项,汇编语言中的操作数,可以是常数、寄存器、存储器、变量、标号或表达式。其中,常数、变量、标号是三种基本数据项。,三、数据项,是固定值,没有属性,是确定的数据。 二进制:字母“B”结尾,例00110100B; 八进制:字母“Q”或“O”结尾,例1037O、2370Q; 十进制:字母“D”结尾或省略,或科学表示法,例1234D、5678、2.735E-2; 十六进制:字母“H”结尾,“AF”开
7、头时,前面加0; 字符串:用单引号括起来,机内存放的是各字符的ASCII码。例ABC。,1常数,11,4-1 汇编语言程序格式数据项,2变量 变量通常指存放在存储单元中的值,程序运行中可以修改。所有的变量都具有三个属性。 段值(SEGMENT):变量所在段的段基址。 段内偏移地址(OFFSET):指变量所在地址与所在段首地址之间的地址偏移字节数。 类型(TYPE):指变量中每个元素所包含的字节数,类型有字节变量(BYTE)、字变量(WORD)、双字变量(DWORD)等。,12,4-1 汇编语言程序格式数据项,3.标号 标号是可执行指令语句的地址的符号表示,可作为程序转向的目标地址。具有三个属性
8、。 (1)段值(SEGMENT):标号所在段的段基址。 (2)段内偏移地址(OFFSET):标号所在地址与所在段的段首址之间的偏移地址字节数。 (3)类型(TYPE):指在转移指令中标号可转移的距离,也称距离属性。类型NEAR,表示此标号为近标号,只能实现段内转移或调用;类型FAR,表示此标号为远标号,可以实现段间转移或调用。 注意:若标号后面紧跟冒号,表示隐含此标号距离属性为NEAR,也可用伪指令将此属性改为FAR。,13,4-1 汇编语言程序格式MASM中的表达式,四、MASM中的表达式,表达式:运算对象 + 运算符。 在汇编时进行运算,运算结果作为语句中的操作数。 运算对象:常数、变量、
9、标号。 得到的运算结果可以是一个常数字,也可以是一个存储器的地址。 MASM中6类运算符:如表4-1所示。 算术运算符(Arithmetic Operators) 逻辑运算符(Logical Operators) 关系运算符(Relational Operators) 数值返回运算符(Value-Returning Operators) 修改属性运算符(Modifing attribute Operators) 其它运算符(other Operators),14,表41 MASM的表达式中的运算符(1),4-1 汇编语言程序格式MASM中的表达式,15,表41 MASM的表达式中的运算符(2)
10、,4-1 汇编语言程序格式MASM中的表达式,16,表41 MASM的表达式中的运算符(3),4-1 汇编语言程序格式MASM中的表达式,17,包括7种:+、*、(除,只取除法运算结果之商)、MOD(模,只取除法运算结果之余数)、SHL(左移,左移1位相当于乘2)、SHR(右移,右移1位相当于除2)。 注意:所有的算术运算符均可以对数据进行运算,运算对象与运算结果都是整数。 若对地址运算,通常是在标号上加减某一个数字量。 例 数组ARRAY定义如下 ARRAY DB1,2,3,4,5,6,7,8 TRY DB20 指令为:MOV AX,30*5 MOV CX,(TRYARRAY) 汇编时,计算
11、表达式形成如下指令: MOV AX,150 MOV CX,8,一、算术运算符,4-1 汇编语言程序格式MASM中的表达式,18,例 汇编程序指令格式如下: DAEQU300 MOVAX,DA80 MOVBX,DA MOD 100MOVCX,DA/100 MOVDH,0110 0100B SHR 2 汇编时,计算表达式形成指令为: DAEQU300 MOVAX,220 MOVBX,0 MOVCX,3 MOVDH,19H(0001 1001B),4-1 汇编语言程序格式MASM中的表达式,19,包括4种:AND(与)、OR(或)、NOT(非)、XOR(异或) 注意:按位运算的,只能对常数进行运算,
12、得到结果也是常数。 例MOVAL,NOT 0FFH MOVBL,8CH AND 73H(10001100B AND 0111 0011B) MOVAH,8CH OR 73H (1000 1100B OR 0111 0011B) 汇编时,计算表达式形成指令为: MOVAL,0 MOVBL,0 MOVAH,0FFH,二、逻辑运算符,4-1 汇编语言程序格式MASM中的表达式,20,包括6种:EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于) 。 注意:关系运算符的两个操作数必须是数据,或是同一段内的两个存储单元的地址;若结果为真,输出全是1,即0FFH或
13、0FFFFH;若结果为假,输出全是0。 例 MOV AX,10H GT 16 ADD BL,6 EQ 0110B MOV CX,(PORT LT 5) AND 100) OR (PORT GE 5) AND 200) 汇编时,计算表达式形成指令为: MOV AX,0 ADD BL,0FFH MOV CX,100;当端口 5时,三、关系运算符,4-1 汇编语言程序格式MASM中的表达式,21,数值返回运算符也称作分析运算符(Analytic opertors)。 包括5种:OFFSET、SEG、TYPE、LENGTH、SIZE 。 功能:加在变量或标号前,返回运算对象的某个参数值。例如偏移地址值
14、、段地址值、类型属性、变量包含的单元数等。 1OFFSET 格式:OFFSET 变量或标号 功能:返回标号或变量的偏移地址值。 例 若DA1为数据段中一个变量名 MOV BX,OFFSET DA1 ;等价于LEA BX,DA1,四、数值返回运算符,4-1 汇编语言程序格式MASM中的表达式,22,2SEG 格式:SEG 变量或标号 功能:取变量或标号的段基值。 例MOVAX,SEG M1 MOVDS,AX 设:M1是段名为DATA的数据段中的一个变量名;如DATA段从0500H开始,上述指令把0500H作为立即数在连接时插入指令,汇编后指令变为: MOVAX,0500H MOVDS, AX,4
15、-1 汇编语言程序格式MASM中的表达式,23,3TYPE 格式:TYPE 变量或标号 功能:加在变量前,返回变量的类型属性;加在标号前,返回标号的距离属性。如下表所示。,TYPE 运算符返回值,4-1 汇编语言程序格式MASM中的表达式,24,例A1DB 20H,30H A2DW 0438H A3DD ? L1:MOVAH,TYPE A1 MOVBH,TYPE A2 ADDAL, TYPE A3 MOVBL, TYPE L1 汇编时,计算表达式形成指令为: MOVAH,1 MOVBH,2 ADDAL,4 MOVBL,0FFH,4-1 汇编语言程序格式MASM中的表达式,25,4LENGTH
16、格式:LENGTH 变量 功能:当变量中使用DUP时,LENGTH返回此变量所包含的单元数,对其它变量则返回1。,例 M1DW 100 DUP(?) M2DW 1,2,3 M3DB ABCD MOV CX,LENGTH M1 MOV BL,LENGTH M2 MOVAL,LENGTH M3 汇编时,计算表达式形成指令为: MOVCX,100;返回变量所包含的100个字单元 MOVBL,1 MOVAL,1,4-1 汇编语言程序格式MASM中的表达式,26,5SIZE 格式:SIZE 变量 功能:加在变量前,返回该变量包含的总字节数。SIZELENGTH *TYPE,例 对上例定义的M1,M2,M
17、3 MOVCX,SIZE M1 MOVBL, SIZE M2 MOVAL, SIZE M3 汇编时,计算表达式形成指令为: MOVCX,200; 返回变量所包含的200个字节单元 MOVBL,2 MOVAL,1,4-1 汇编语言程序格式MASM中的表达式,27,修改同性运算符也称作综合运算符(Synthetic operators)。 包括6种:段操作符、PTR、THIS、HIGH、LOW、SHORT 功能:在程序运行过程中,修改变量或标号的属性,包括段属性、偏移地址属性、类型属性等。 1段操作符 格式:段前缀:变量或地址表达式 功能:表示某个变量或地址被修改。 例如:MOV AX,ES:BX
18、,五、修改属性运算符,4-1 汇编语言程序格式MASM中的表达式,28,2PTR 格式:类型/距离 PTR 变量或标号 功能:将PTR左边的类型属性赋给右边的变量或标号。 注意:PTR本身不分配存储单元,仅对已分配的存储单元赋予新的属性;常与类BYTE、WORD、NEAR、FAR等连用。,4-1 汇编语言程序格式MASM中的表达式,例N1 DB 15H,36H N2 DW 1122H,3344H LO:MOV AX,WORD PTR N1;使N1转换成字类型 MOV BL,BYTE PTR N2;使N2转换成字节类型,29,例 MOV BX,10H 将立即数送入BX间址指定的存储单元,可以通过
19、PTR指明是存入字节单元还是字单元。 MOV BYTE PTRBX,10H ;BX10H MOV WORD PTRBX,10H ;BX,BX+10010H 也可用PTR来改变距离属性, JMP FAR PTR LOP 在JMP语句中将标号LOP改为FAR,使JMP指令在其它代码段中也可以用,实现段间转移。,4-1 汇编语言程序格式MASM中的表达式,30,3THIS 格式:变量/标号 EQU THIS 类型/距离 功能:将EQU THIS右边的类型/距离属性,赋给左边的变量/标号,该变量或标号的段地址和偏移地址与下一个存储单元的地址相同。 例FIRST EQU THIS BYTE TABLE
20、DW 200 DUP(?) FIRST的偏移地址值与TABLE的偏移地址值相同,区别在于FIRST变量为字节类型,TABLE为字类型。,4-1 汇编语言程序格式MASM中的表达式,31,例SPPEQU THIS FAR MOVAX,100 此时MOV AX,100前有标号SPP,并赋予FAR属性,允许其它段的JMP指令跳到本段SPP上。,4-1 汇编语言程序格式MASM中的表达式,4SHORT 格式:SHORT 标号 功能:说明转移类指令中转向地址的属性为短转移:128+127之间。 例L1:JMPSHORT L2 L2:MOVAX,0,32,5HIGH和LOW 格式:HIGHLOW 变量或标
21、号 功能:HIGH和LOW称为字节分离运算符。HIGH从中分离出高位字节,LOW分离出低位字节。 例K1EQU 0ABCDH K2EQU 1234H MOVAH,HIGH K1 MOVBL, LOW K2 汇编时,计算表达式形成指令为: MOVAH,0ABH MOVBL,34H,4-1 汇编语言程序格式MASM中的表达式,33,1圆括号( ) ( )中的运算符具有最高优先权。 2方括号 方括号主要用来表示地址表达式或多重变量的下标值。 3尖括号 ,及圆点 在结构中专用。 4MASK和WIDTH 在记录中专用。,六、其它运算符,4-1 汇编语言程序格式MASM中的表达式,34,表达式的计算原则:
22、同级运算符从左到右的,圆括号( )可改变优先级次序。运算符的优先级别如下表所示。,七、优先级,表43 运算符优先级次序,4-1 汇编语言程序格式MASM中的表达式,35,4-2 伪指令语句 概述,4-2 伪指令语句,伪指令语句:在汇编期间进行处理,主要完成变量定义,存储器分配,指示程序开始和结束,段定义,段分配等。 数据定义语句:DB,DW,DD 标号赋值语句:EQU, 段定义语句:SEGMENTENDS 段分配语句:ASSUME 过程定义语句:PROCENDP 程序开始结束语句:ORG,END,NAME 群定义语句:GROUP 结构定义语句:STRUCENDS 记录定义语句:RECODE,3
23、6,4-2 伪指令语句 数据定义语句,变量名用符号表示,可以省略,后面不跟冒号。汇编时将变量助记符后的第一个字节的偏移地址作为它的符号地址。 助记符所用伪指令助记符主要有: DB:用来定义字节;DW:用来定义字; DD:用来定义双字;DQ:用来定义四个字; DT:用来定义十个字节;,一、数据定义语句,格式1:变量名 助记符 操作数,操作数 ;注释 格式2:变量名 助记符 n DUP(操作数,操作数) ;注释 功能:指定的存储单元,以分配存储空间或存入操作数。,37,4-2 伪指令语句 数据定义语句,操作数操作数可以是常数、字符串、变量、标号、表达式等。 多个操作数之间必须用逗号分开;格式2中,
24、n必须是正整数。 注释说明伪指令的功能,可以省略,注释前必须带分号“;”。,38,4-2 伪指令语句 数据定义语句,例 操作数是常数或表达式,DA1DB 10H,52H ;变量DA1中装入10H和52H DA2DW 1122H,34H ;变量DA2中装入22H,11H,34H,00H DA3DD 5*20H,0FFEEH ;变量DA3中装入A0H,00H,00H,00H,EEH,FFH,00H,00H,39,4-2 伪指令语句 数据定义语句,例 操作数是字符串 FIRSTDB HELLO;字符串HELLO的ASCII码装入FIRST开始的存储单元 SECOND DW OK ;字符串OK的ASC
25、II码装入SECOND开始的存储单元 ;只能定义两个字符,40,4-2 伪指令语句 数据定义语句,例 操作数用?定义不确定值的变量,用作保留存储空间。 M1DB ?;定义变量M1为不确定字节,保留1个字节空间 M2DW 0D55H,?;定义变量M2第二个字为不确定,保留两个字节空间,41,4-2 伪指令语句 数据定义语句,例 操作数用DUP来定义重复变量 ONE DB 5 DUP(0) ;重复5个0存入ONE起始的存储单元 TWO DW 10 DUP(?) ;重复10次,保留10个字的存储单元 THREE DB 4 DUP(1,2 DUP(20H) ;DUP嵌套,42,4-2 伪指令语句 数据
26、定义语句,例 用地址表达式定义变量。 已知变量PAR1,标号ADR2和ADR3,有定义为: ONE DW PAR1;PAR1的偏移地址赋给字变量ONE TWO DW ADR2;ADR2的偏移地址赋给字变量TWO THREE DD ADR3;ADR3的偏移地址和段基址赋给双字变量THREE,设:PAR1,ADR2,ADR3在同一代码段CS2000H中,其偏移地址分别为0100H,0200H,0300H。 则汇编后存储器中变量存放格式如右图所示。,43,4-2 伪指令语句 数据定义语句,例 变量的类型属性可以通过属性操作符PTR来指定。 OPE1 DB1,2 OPE2 DW2233H,5566H
27、MOVAX,OPE1+1 ;错啦! MOVAL,OPE2 ;错啦! 指令中两个操作数的类型属性不匹配,汇编程序提示出错。 正确的格式为: MOV AX,WORD PTR OPE1+1 ;AX3302H MOV AL,BYTE PTR OPE2 ;AL33H,44,4-2 伪指令语句 表达式赋值语句,共两种:赋值语句EQU,等号语句。它们均不占用内存。,二、表达式赋值语句,1赋值语句EQU 格式:符号名 EQU 表达式 功能:给变量、标号、常数、指令、表达式等定义一个符号名,一经定义在同一个程序模块中不能重新定义。 例COUNT EQU 100;常数值赋给符号名COUNT DATA EQU CO
28、UNT2 ;表达式值赋给符号名DATA A1 EQU BXSI;变址寻址存储单元内容赋给符号名A1 B1 EQU OFFSET A1;偏移地址值赋给符号名B1 C1 EQU ADD;加法指令赋给符号名C1 注意:在EQU语句右边表达式中的变量或标号,必须预先定义。 PURGE语句可以解除对某一个标号的赋值。 例 PURGE C1;C1不再代替ADD,45,4-2 伪指令语句 表达式赋值语句,2等号语句 等号语句“”与EQU语句具有相同功能,区别仅在于EQU左边的标号不允许重新定义,用“”定义的语句允许重复定义。,例 COUNT100 COUNT COUNT 10 A1BXSI MOV AX,A
29、1;BXSI单元中的内容AX B1ADD A1BX MOV CX,A1; BX单元中的内容CX,46,4-2 伪指令语句 段定义语句,段定义语句进行段定义,段分配语句明确段和段寄存器之间的关系。 1段定义语句SEGMENTENDS 格式:段名 SEGMENT 定位类型 组合类型 分类名 逻辑段内容 段名 ENDS 功能:将一个逻辑段定义成一个整体。 段名是逻辑段的标识符,不可省略。它确定了逻辑段在存储器中的地址,SEGMENT和ENDS前的段名必须相同。 SEGMENTENDS是段定义的伪指令助记符,任何一个逻辑段必须以SEGMENT开始,ENDS结束,不可省略,并且必须成对出现,两者之间是本
30、逻辑段的内容。,三、段定义语句,47,4-2 伪指令语句 段定义语句,定位类型(Align Type) 定位该段起始地址。定位类型参数主要有下面4种。 PARA指定定位段的起始地址必须在节(16的整数倍)的整数边界,参数缺省时,就当成PARA。 BYTE指定该段起始地址定位在存储单元的任何字节地址。 WORD指定该段起始地址定位在字的边界,即段的首地址必须是偶数。 PAGE指定该段起始地址定位在页的边界,即段的首地址必须是256的整数倍。,48,4-2 伪指令语句 段定义语句,组合类型(Combine Type) 决定逻辑段之间的组合方式,主要参数有6种。 NONE该段与其它同名段不连接,各段
31、独立,可作为缺省参数。 PUBLIC该段与其它同名段连接时,由低地址到高地址连接,组成一个逻辑段,连接次序由连接命令指定,连接时满足定位类型要求。 COMMON该段在连接时与其它模块中的同名段有相同的起始地址,采用覆盖的方式在存储器中存放,连接长度为各分段中最大长度。,49,4-2 伪指令语句 段定义语句,AT表达式定位该段的起始地址在表达式所指定的节(16的整数倍)边界上。通常各逻辑段在存储器中的位置由系统自动分配,当要求某逻辑段在指定节的边界上时,就要用AT参数来实现。AT不能指定代码段。 STACK指定该段为堆栈段,此参数在堆栈段中不可省略,多个模块只需设置一个堆钱段,各个模块中的堆栈段
32、采用覆盖方式组合。容量为各个模块中所设置的最大堆栈段容量。,50,4-2 伪指令语句 段定义语句,MEMORY定位该段与其它模块中的同名段有相同的首地址,采用覆盖方式在存储器中组合连接,其功能与COMMON参数类似,区别是第一个带MEMORY参数的逻辑段复盖在其它同名段的最上层,其它带此参数的同名段按照COMMON方式处理。,51,4-2 伪指令语句 段定义语句,分类名(C1ass Name) 汇编程序连接时将所有分类名相同的逻辑段组成一个段组。 分类名可选择不超过40个字符的名称。,注意: 段定义语句允许嵌套设置,但不允许相互交叉设置。 SEGMENT后面带有的三个参数必须按格式中规定的次序
33、排列,分类名必须用单引号 括起来。,52,4-2 伪指令语句 段定义语句,说明当前代码段、数据段、堆线段、附加段4个段如何定义。 段名必须是用段定义语句SEGMENTENDS定义过的名字。 ASSUME NOTHING取消前面由ASSUME所指定的段寄存器。 例: ASSUME ES:NOTHING,将逻辑段定义成代码段、数据段、堆栈段、附加段。 用户可以设置多个逻辑段,但只允许4个逻辑段同时有效。 格式:ASAUME CS:段名,DS:段名,SS:段名,ES:段名 功能:定义4个逻辑段,指明段和段寄存器的关系。 ASSUME为伪指令助记符,放在代码段的开始,不可省略。,2段分配语句(ASSU
34、ME),53,4-2 伪指令语句 段定义语句,注 意: 代码段和数据段是必须分配,附加段可以省略。 对串指令,必须设置附加段作目标串基址用,附加段也可用来存放数据,增大数据段容量。 ASSUME伪指令只将代码段的段基址自动装入CS寄存器中,而不能自动把其它段基址装入相应的段寄存器中,所以在代码段的开始要有一段初始化程序完成这一工作。 堆栈段:将段基址送入SS寄存器外,还要将栈顶偏移地址置入堆栈指示器SP中。,54,4-2 伪指令语句 段定义语句,例 两个16位无符号二进制数相乘 DDATA SEGMENT ;数据段 D1 DW 1234H D2 DW 5678H P1 DD ? P2 DD ?
35、 ;可删除! DDATA ENDS SSTACK SEGMENT STACK STACK STT DB 100 DUP (?) TOP EQU LENGTH STT SSTACK ENDS,55,4-2 伪指令语句 段定义语句,CCODESEGMENT MAIN PROC FAR ASSUME CS:CCODE, DS:DDATA, SS:SSTACK START:MOV AX,SSTACK ;初始化SS MOV SS,AX MOV SP, TOP ;初始化SP PUSH DS ;返回DOS用 SUB AX,AX PUSH AX MOV AX,DDATA ;初始化DS MOV DS,AX,56
36、,4-2 伪指令语句 段定义语句,L1: MOV AX,D1 ;D1D2,积在(DX,AX) MUL D2 MOV BX,OFFSET P1 ;积P2和P1所指向的存储单元 MOV BX,AX MOV BX+2,DX RET MAIN ENDP CCODE ENDS END START,57,4-2 伪指令语句 过程定义语句,四、过程定义语句,过程也称作子程序。节省内存空间,便于进行模块化程序设计。 格式:过程名 PROC 属性 ;过程内容 RET N 过程名 ENDP 功能:定义一个过程,主程序可以用CALL指令调用它。 过程名过程的名字,不可缺省。子程序入口地址。具有三种属性:,段属性:该
37、过程所在段的段基址。 偏移地址属性:该过程第一个字节与段首址之间距离字节。 距离属性:为NEAR或FAR。NEAR允许过程在段内调用;FAR允许过程在段间调用,NEAR为缺省使用。,58,4-2 伪指令语句 过程定义语句,PROCENDP过程定义伪指令助记符,成对出现,不可缺省。二者前面有相同的过程名。 RET N为过程内部的返回指令。 过程内部至少有一条RET指令,可以在过程的任何位置,使过程返回到主程序。 过程内部可以有多个RET,表示此过程具有多个返回出口(在不同条件下,从不同出口返回)。 N为弹出值,N必须为正偶数,可以缺省。 过程调用允许嵌套和递归调用。嵌套与递归的深度由堆栈段的容量
38、决定。,59,4-2 伪指令语句 过程定义语句,DATA SEGMENT ONE DB 22H,33H,44H,55H TWO DB 55H,66H,77H,88H SUM DB 20 DUP(?) DATA ENDS STACK SEGMENT STACK STACK STT DB 100 DUP(?) TOP EQU LENGTH STT STACK ENDS,例 用过程调用的方法,将内存中N个BCD码相加。,60,4-2 伪指令语句 过程定义语句,CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA STAR
39、T:MOV AX,STACK MOV SS, AX MOV SP,TOP PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOVES,AX,61,4-2 伪指令语句 过程定义语句,MOV SI,OFFSET ONE ;SI指向第一个加数 MOV BX,OFFSET TWO ;BX指向第二个加数 MOV DI,OFFSET SUM ;DI指向和数 CLD ;清方向标志 CLC ;清进位标志 MOV CX,4 LL: CALL ABC LOOP LL RET MAIN ENDP,62,4-2 伪指令语句 过程定义语句,ABC PROC NEAR ;完
40、成单字节数据加法运算 LODSB ;SIAL,SI+1SI L1: ADC AL,BX ;带进位相加 DAA ;十进调整 STOSB ;ALDI,DI+1DI INC BX ;指针改变 RET ABC ENDP CODE ENDS END START,63,4-2 伪指令语句 过程定义语句,例 远过程定义及调用格式 MCODESEGMENT MAIN SPD PROC FAR ;过程定义,远过程属性 RET SPD ENDP CALLSPD ;同一段内调用 MCODE ENDS NCODESEGMENT ;另一段NCODE CALL SPD ;远过程调用 NCODE ENDS END MAIN
41、,64,4-2 伪指令语句 过程定义语句,例 过程嵌套调用格式 MSUB PROC FAR CALL SBU1 RET SUB1 PROC NEAR RET SUB1 ENDP MSUB ENDP,65,4-2 伪指令语句 程序开始和结束语句,1NAME 格式:NAME 程序名 功能:为源程序目标模块赋名字。 NAME为伪指令助记符,放在程序开始,在输出汇编语言源程序的列表文件时,将在每一页的开头打印出该程序名。若源程序中省略NAME伪指令,汇编程序将源文件名作目标模块的名字。 2ORG 格式:ORG 表达式 功能:给汇编程序设置位置指针,指定下面语句的起始偏移地址。 ORG为伪指令助记符,不
42、可缺省。,五、程序开始和结束语句,66,4-2 伪指令语句 程序开始和结束语句,表达式给定的偏移地址值,表达式的计算结果必须是正整数。一般情况下段定义语句指出了段的起点,偏移地址为0,段内各语句或数据的地址由段地址开始依次类推可确定。当用户要求指定某条指令或数据为指定地址时,可用ORG语句来改变,ORG语句可放在程序的任何位置。 例 用ORG指定代码段地址 CODESEGMENT ORG100H ASSUME CS:CODE,DS:DATA, START:MOVAX,DATA CODEENDS,67,4-2 伪指令语句 程序开始和结束语句,3END 格式:END 标号名 功能:标记汇编源程序结
43、束。 END 是伪指令助记符,不可缺省,放在源程序的最后一行,汇编程序到END语句停止汇编。每个模块只有一个END。 标号名是该程序中第一条可执行语句的标号名,可以缺省,若一个程序包含多个模块,END后面带的标号为主程序模块中的标号名称。,例 CODE SEGMENT START: SUB1PROCNEAR SUB1ENDP CODEENDS ENDSTART,68,4-2 伪指令语句 结构定义语句,六、结构定义语句(自学),69,4-2 伪指令语句 外部指令及对准伪指令,1外部伪指令,七、外部伪指令及对准伪指令,程序中包含多个模块时,有些程序或数据在各个模块间要相互共享,可用外部伪指令PUB
44、LIC和EXTRN来实现此功能。其中PUBLIC用来定义共享模块,EXTRN(external reference)用来调用共享模块。,格式: PUBLIC 名称,名称,;注释 EXTRN 名称:类型,名称:类型,;注释,70,4-2 伪指令语句 外部指令及对准伪指令,PUBLIC伪指令助记符,不可缺省 名称本语句的操作数,它是本模块中已经定义过的变量,标号或常数,可供其它模块共享。多个名称之间用逗号分开,不可缺省。 EXTRN伪指令助记符,不可缺省。 名称其它模块中用PUBLIC语句定义过的变量、标号或常数,供本模块引用,不可缺省。名称后面紧跟冒号“:”。,71,4-2 伪指令语句 外部指令
45、及对准伪指令,类型属性是指该名称应具有的属性,若所定义的名称是变量,则类型为BYTE或WORD;若名称是标号,则类型为NEAR或FAR;若名称是常数,则类型为ABS。类型属性应与在其它模块中被定义时的属性相同。多个名称之间用逗号,将它们分开。 EXTRN语句的引用,必须与已用PUBLIC语句定义过的名称相呼应。,例 DATA SEGMENT A1 DB 30H,31H A2DW 4 DUP(0) A3EQU 0011H A4DB 2 DUP(?) DATAENDS,72,CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA TMF LAB
46、ELFAR PUBLIC A2,A3,TMF ;A2,A3,TMF可供其它模块共享 CODE ENDS PDATA SEGMENT P1 DB 0AH,0BH P2 DB 2 DUP(?) PDATA ENDS,4-2 伪指令语句 外部指令及对准伪指令,73,PCODE SEGMENT EXTRN A2: WORD,A3: ABS,TMF:FAR MAIN: MOV AX,PDATA MOV AX,OFFSET A2 MOV CX,A3 JMP TMF PCODE ENDS END MAIN 在PCODE模块中,可引用CODE模块中已定义的A2,A3和TMF,实现了数据或程序共享。,4-2 伪指令语句 外部指令及对准伪指令,74,4-2 伪指令语句 外部指令及对准伪指令,2对准伪指令 格式:EVEN 功能:EVEN伪指令使下一语句的地址调整为偶地址。,例XDATASEGMENT X1DB 0DH EVEN X2DW 100 DUP(?) XDATAENDS 设:X1偏移地址从100H开始 则:没有加入EVEN伪指令时,X2的100个字将从偏移地址101H开始; 加上EVEN伪指令后,X2数据从102H开始,提高了存储器存取速度。,75,4-2 伪指令语句 外部指令及对准伪指令,另
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职工工作质量督查考核办法
- 春运便民服务站点设置
- 初中生物伴性遗传规律动态模拟实验软件应用研究课题报告教学研究课题报告
- 受处分个人思想汇报2026(2篇)
- 犯错更正思想汇报2026(2篇)
- 2026年消防救援事业发展规划方案
- 2026年学前班下半年学期计划
- 2027年考研法律硕士(非法学)专业基础课重点难点解析卷
- 2026年幼儿园保育员下半年工作计划
- 2026年新年安全生产计划书
- 高考考务人员培训系统考试试题答案
- 2026上海市大数据中心招聘10名笔试参考题库及答案解析
- 四川省达州市(2026年)辅警招聘公安基础知识考试题库及答案
- (二模)青岛市2026年高三年级第二次适应性检测语文试题(含答案)
- 15 青春之光 课件(共23张)
- 国药集团2026届春季校园招聘笔试历年备考题库附带答案详解
- 产科孕产期管理诊疗常规
- 2026年北京市丰台区初三下学期一模道德与法治试卷和答案
- 【 生物 】人体的运动重难点梳理课件-2025-2026学年北师大版七年级生物下册
- 《AQ3067-2026化工和危险化学品重大生产安全事故隐患判定准则》解读
- 2026湖北三支一扶试卷真题
评论
0/150
提交评论