版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、15.45.4 汇编语言源程序掌握:掌握:n汇编语言与汇编程序的概念;汇编语言与汇编程序的概念;n汇编语言程序设计过程;汇编语言程序设计过程;n汇编语言源程序的结构框架;汇编语言源程序的结构框架;n常用伪指令及基本常用伪指令及基本DOS功能模块的应用。功能模块的应用。2一、一、80X86新增指令特点:n增加对增加对32位字长操作的指令;位字长操作的指令;n加强各类指令功能;加强各类指令功能;n增加了高级语言、控制保护、增加了高级语言、控制保护、Cache 管理管理等指令。等指令。3二、汇编语言及汇编程序n计算机语言:计算机语言:机器语言机器语言汇编语言汇编语言高级语言高级语言面向机器面向机器
2、的语言的语言机器语言机器语言汇编语言汇编语言高级语言高级语言4汇编语言及汇编程序n汇编语言源程序汇编语言源程序 用助记符编写的程序用助记符编写的程序源程序的编译程序源程序的编译程序汇编程序汇编程序汇编语言汇编语言源程序源程序机器语言机器语言目标程序目标程序5汇编语言程序设计与执行过程n输入汇编语言源程序输入汇编语言源程序 源文件源文件 .ASMn汇编(编译)汇编(编译) 目标文件目标文件 .OBJn链接链接 可执行文件可执行文件 .EXEn调试调试 最终程序最终程序6汇编语言的程序结构n一个源程序必须用其编译器能够理解的语法进一个源程序必须用其编译器能够理解的语法进行编写,这些语法是指语句和程
3、序结构必须遵行编写,这些语法是指语句和程序结构必须遵循的规则。汇编语言也是如此。循的规则。汇编语言也是如此。n首先,通过以下可在首先,通过以下可在PC DOS环境下运行的汇环境下运行的汇编语言源程序实例,初步认识标准的汇编语言编语言源程序实例,初步认识标准的汇编语言源程序的框架结构,并通过它来了解汇编语言源程序的框架结构,并通过它来了解汇编语言的有关规定和格式。的有关规定和格式。7例:打印输出字符串“THIS IS A SAMPLE PROGRAM”;SAMPLE PROGRAM DISPLAY MESSAGE;注释行;注释行STACK SEGMENT PARA STACK STACK;定义堆
4、栈段;定义堆栈段 DB 1024 DUP(0);在存储器建立一个堆栈区在存储器建立一个堆栈区STACK ENDS;段结束;段结束DATA SEGMENT ;定义数据段;定义数据段MESSAGE DBTHIS IS A SAMPLE PROGRAM;存放数据;存放数据 DB 0DH,0AH,$DATA ENDS;段结束;段结束CODE SEGMENT;代码段开始;代码段开始 ASSUME CS:CODE,DS:DATA,SS:STACK;将段名与段寄;将段名与段寄器联系起来器联系起来8START PROC FAR;将过程定义为远过程;将过程定义为远过程 PUSH DS MOV AX,0 PUSH
5、 AX MOV AX,DATA;建立数据段的可寻址性;建立数据段的可寻址性 MOV DS,AX;初始化;初始化DS LEA BX,MESSAGELOOP1: CMP BYTE PTRBX,$ JE LOOP2 MOV AH,5标准序,以便返回DOS操作系统9 MOV DL,BX INT 21H INC BX JMP LOOP1LOOP2: RETSTART ENDP;过程结束;过程结束CODE ENDS;代码段结束;代码段结束 END START;整个程序汇编结束;整个程序汇编结束10汇编源程序的特点n一、由若干逻辑段组成,各逻辑段都有一个段名,由一、由若干逻辑段组成,各逻辑段都有一个段名,由
6、段定义语句(伪指令)来定义和说明。通常只有代码段定义语句(伪指令)来定义和说明。通常只有代码段是必不可少的。数据段或附加段用来在内存中建立段是必不可少的。数据段或附加段用来在内存中建立一个适当容量的工作区用以存放常量和变量。堆栈段一个适当容量的工作区用以存放常量和变量。堆栈段则在内存中建立一个堆栈区,以便中断和子程序调用则在内存中建立一个堆栈区,以便中断和子程序调用及各模块间传递参数时使用。及各模块间传递参数时使用。n某些简单的程序并不一定需要数据段和堆栈段,但对某些简单的程序并不一定需要数据段和堆栈段,但对一些复杂的程序,堆栈段、数据段和代码段都可以不一些复杂的程序,堆栈段、数据段和代码段都
7、可以不止一个。止一个。n通常把数据段放在代码段前面。通常把数据段放在代码段前面。11汇编源程序的特点(续)n二、在代码段的起始处,用二、在代码段的起始处,用ASSUME命令说明命令说明各个段寄存器与逻辑段的关系。并由用户自己各个段寄存器与逻辑段的关系。并由用户自己设置各段寄存器(除代码段外)初值设置各段寄存器(除代码段外)初值 ,以建,以建立这些逻辑段的可寻址性。立这些逻辑段的可寻址性。n三、每个逻辑段由若干行汇编语句组成,每行三、每个逻辑段由若干行汇编语句组成,每行只有一条语句且不能超过只有一条语句且不能超过128个字符,但一条个字符,但一条语句允许有后续行,最后均以加车作结束。整语句允许有
8、后续行,最后均以加车作结束。整个源程序必须以个源程序必须以END语句来结束,它通知汇编语句来结束,它通知汇编程序停止汇编。程序停止汇编。END后面的标号后面的标号START表示表示该程序执行时的起始地址。该程序执行时的起始地址。12汇编源程序的特点(续)n四、每一条汇编语句最多由四、每一条汇编语句最多由4个字段组成,它个字段组成,它们均按照一定的规则分别写在一条语句的们均按照一定的规则分别写在一条语句的4个个区域,各区域之间用空格或区域,各区域之间用空格或TAB键隔开。键隔开。n五、每个源程序在代码段中都必须含有返回到五、每个源程序在代码段中都必须含有返回到DOS操作系统的指令语句,以保证程序
9、执行完操作系统的指令语句,以保证程序执行完毕后能自动回到毕后能自动回到DOS状态,以便继续向计算机状态,以便继续向计算机键入命令。键入命令。13源程序与PC DOS的接口n为保证用户程序执行完后自动返回为保证用户程序执行完后自动返回DOS,应采,应采取两项措施:一是将用程序中的主程序定义为取两项措施:一是将用程序中的主程序定义为FAR过程,其最后一条指令为过程,其最后一条指令为RET;二是在主;二是在主程序的开始处将程序的开始处将PSP所在段的段地址所在段的段地址DS(或(或ES)保存进栈,然后再将一个全)保存进栈,然后再将一个全0的字(的字(PSP的段内偏移地址)压入堆栈。的段内偏移地址)压
10、入堆栈。nPUSH DSnMOV AX,0nPUSH AX14源程序与PC DOS的接口(续)n还有一种返回还有一种返回DOS的非标准方法:不定义主程的非标准方法:不定义主程序为序为FAR过程并去掉标准序部分,只在代码段过程并去掉标准序部分,只在代码段结束之前(即结束之前(即CODE ENDS之前)增加两句:之前)增加两句:nMOV AH,4CHnINT 21H15汇编语言的语句格式n语句是汇编语言源程序的基本组成单位,源程语句是汇编语言源程序的基本组成单位,源程序是一个语句序列。语句序列中的每个语句规序是一个语句序列。语句序列中的每个语句规定了一个基本操作要求,而语句序列则完成某定了一个基本
11、操作要求,而语句序列则完成某个特定的操作任务。个特定的操作任务。16语句的种类n在在80X86/Pentium汇编语言中,有三种基本汇编语言中,有三种基本语句:指令语句、伪指令语句和宏指令语句。语句:指令语句、伪指令语句和宏指令语句。n指令语句:指令语句: 对应于对应于CPU指令系统中的一条指令,为可执行指令系统中的一条指令,为可执行语句。汇编程序将为之产生一对应的机器目标语句。汇编程序将为之产生一对应的机器目标代码。代码。如:指令语句如:指令语句MOV DS,AX ;机器代码为机器代码为8EH和和D8H17语句的种类(续)n伪指令语句伪指令语句nCPU不执行的语句,只是汇编时给汇编程序提不执
12、行的语句,只是汇编时给汇编程序提供汇编信息,如定义符号、分配存储单元、将供汇编信息,如定义符号、分配存储单元、将程序分段等。它本身不产生目标代码,所以是程序分段等。它本身不产生目标代码,所以是指示性语句。指示性语句。n如伪指令语句如伪指令语句SEGMENT/ENDS;18语句的种类(续)n宏指令语句宏指令语句n是以某个宏名字定义的一段指令序列。汇编时,是以某个宏名字定义的一段指令序列。汇编时,凡有宏指令语句的地方都将用相应的指令序列凡有宏指令语句的地方都将用相应的指令序列的目标代码插入。的目标代码插入。19汇编语言的语句格式n指令性语句指令性语句 由由CPU执行的指令执行的指令n语句格式:语句
13、格式:标号:标号: 前缀前缀 助记符助记符 操作数操作数,操作数操作数 ;注释;注释指令的符号地址,指令的符号地址,标号后要有冒号标号后要有冒号操作码操作码注释前加分号注释前加分号20汇编语言的语句格式n指示性语句指示性语句 : CPU不执行的指令,不生成目标代码;不执行的指令,不生成目标代码; 由汇编程序执行,用于分配内存空间、定义变量、指由汇编程序执行,用于分配内存空间、定义变量、指示程序开始和结束等。示程序开始和结束等。n指令格式:指令格式:名字名字 伪指令助记符伪指令助记符 操作数操作数 ,操作数,操作数, ;注释;注释变量的符号地址变量的符号地址其后不加冒号其后不加冒号指示性语句中至
14、少有一个操作数指示性语句中至少有一个操作数21汇编语言的语句格式(续)n其中,方括号中的内容为可选部分,操作数部分或是其中,方括号中的内容为可选部分,操作数部分或是0、1操作数,或是由逗号隔开的多个操作数。操作数,或是由逗号隔开的多个操作数。n(1)标号和名字:标号和名字分别是给指令单元和伪)标号和名字:标号和名字分别是给指令单元和伪指令起的符号名称,用符号汇编语言规定的标识符来表指令起的符号名称,用符号汇编语言规定的标识符来表示。标号后面必须有冒号,名字后面没有。示。标号后面必须有冒号,名字后面没有。n标号和名字的选择有一些限制。首先,它们必须符号汇标号和名字的选择有一些限制。首先,它们必须
15、符号汇编语言的标识符定义,即以字母开头,由字母(编语言的标识符定义,即以字母开头,由字母(AZ或或az,汇编程序不区分大小写)、数字及部分特殊字符,汇编程序不区分大小写)、数字及部分特殊字符(?、(?、$和下划线和下划线_等)组成的字符串表示,字符串等)组成的字符串表示,字符串长度不能超过长度不能超过31个。此外,标识符不能是汇编言中有特个。此外,标识符不能是汇编言中有特定意义的保留字。定意义的保留字。22汇编语言的语句格式(续)n(2)助记符和定义符)助记符和定义符n助记符和定义符分别用于规定指令语句的操作性质和助记符和定义符分别用于规定指令语句的操作性质和伪指令语句的伪操作功能,这部分是语
16、句中唯一不可伪指令语句的伪操作功能,这部分是语句中唯一不可缺省的。缺省的。n(3)操作数)操作数n指令语句中的操作数提供该指令的操作对象,并说明指令语句中的操作数提供该指令的操作对象,并说明要处理的数据存放在什么位置以及如何访问它。要处理的数据存放在什么位置以及如何访问它。n(4)注释)注释n注释由分号注释由分号“;”开始,用来对语句的功能加以说明,开始,用来对语句的功能加以说明,它们构成了源程序的编程文档,使程序更容易被理解它们构成了源程序的编程文档,使程序更容易被理解和阅读。和阅读。23操作数n常量常量 数值或字符、字符串数值或字符、字符串n寄存器寄存器n存储器单元存储器单元n变量或标号变
17、量或标号n表达式表达式 可包括各种运算符可包括各种运算符24常量n在汇编时已经确定其值且程序运行期间不变化在汇编时已经确定其值且程序运行期间不变化的量为常量,如语句中的立即数或端口地址等。的量为常量,如语句中的立即数或端口地址等。n这些常量的形式各不相同,常用的有二、十、这些常量的形式各不相同,常用的有二、十、八或十六进制的整型数值常量、字符串常量和八或十六进制的整型数值常量、字符串常量和已赋值的常标识符。已赋值的常标识符。n 在汇编语言源程序中,常用十六进制来表示在汇编语言源程序中,常用十六进制来表示数据和地址。数据和地址。25变量n代表内存中的数据区,程序中视为存储器操代表内存中的数据区,
18、程序中视为存储器操作数作数n变量的三种属性:变量的三种属性: 段段 值值 变量所在段的段地址变量所在段的段地址 偏移量偏移量 变量单元地址与段首地址之变量单元地址与段首地址之 间的位移量。间的位移量。 类类 型型 字节型(字节型(BYTEBYTE)、字型)、字型(WORD)(WORD)、双字型双字型(DWORD)(DWORD)、四字和十字节、四字和十字节5 5种种26表达式操作数n表达式操作数由各种操作数、运算符和操作符表达式操作数由各种操作数、运算符和操作符组成。组成。n汇编语言中的两类表达式:汇编语言中的两类表达式:n数值表达式:由数值常量、字符串常量或符号数值表达式:由数值常量、字符串常
19、量或符号常量等与算术、逻辑或关系运算符连接而成。常量等与算术、逻辑或关系运算符连接而成。n地址表达式:由常量、变量、标号、寄存器的地址表达式:由常量、变量、标号、寄存器的内容以及一些运算符组成。其值表示存储器地内容以及一些运算符组成。其值表示存储器地址,一般都是段内的偏移地址。地址表达式主址,一般都是段内的偏移地址。地址表达式主要用来表示指令语句中的操作数。要用来表示指令语句中的操作数。27三、基本伪指令n数据定义伪指令数据定义伪指令n符号定义伪指令符号定义伪指令n段定义伪指令段定义伪指令n设定段寄存器伪指令设定段寄存器伪指令n结束伪指令结束伪指令n* *过程定义伪指令过程定义伪指令n*宏命令
20、伪指令宏命令伪指令28数据定义伪指令n数据定义语句用于定义变量。它指定变量的类型和名数据定义语句用于定义变量。它指定变量的类型和名称,并为变量分配存储单元。称,并为变量分配存储单元。n格式:格式: 变量名变量名 伪指令助记符伪指令助记符 操作数,操作数, ;注释;注释其中,变量名是可选的;操作数是赋给变量的初值,多其中,变量名是可选的;操作数是赋给变量的初值,多个相同类型的变量可在一条语句中定义。个相同类型的变量可在一条语句中定义。经过定义的变量名有三个属性:数据类型、偏移量(可经过定义的变量名有三个属性:数据类型、偏移量(可用用OFFSET获得)和段基址(可用获得)和段基址(可用SEG获得)
21、。若某获得)。若某个变量所表示的是一个数组,则其类型属性为变量的个变量所表示的是一个数组,则其类型属性为变量的单个元素所占用的字节数。单个元素所占用的字节数。29数据定义伪指令伪指令助记符伪指令助记符nDB 定义的变量为字节型定义的变量为字节型nDW 定义的变量为字类型(双字节)定义的变量为字类型(双字节)nDD 定义的变量为双字型(定义的变量为双字型(4字节)字节)nDQ 定义的变量为定义的变量为4字型(字型(8字节)字节)nDT 定义的变量为定义的变量为10字节型字节型30数据定义伪指令nDATA1 DB 11H,22H,33H,44HnDATA2 DW 11H,22H,3344HnDAT
22、A3 DD 11H*2,22H,33445566H考虑以上变量在内考虑以上变量在内存中的存放形式存中的存放形式31数据定义伪指令n伪指令的性质决定所定义变量的属性;伪指令的性质决定所定义变量的属性;n定义字符串必须用定义字符串必须用DB伪指令伪指令n例:例: DATA1 DB ABCD,66HABCD41H42H43H44H66H32数据定义语句的具体形式和功能n(1)为数据项分配存储单元,用变量名作为)为数据项分配存储单元,用变量名作为该存储单元的名称。该存储单元的名称。n例:例:X DB 25H;定义变量;定义变量X为字节为字节n Y DW 4124H;定义变量定义变量Y为字为字n汇编时汇
23、编程序会把汇编时汇编程序会把25H、4142H这些初值这些初值分别放入名为分别放入名为X、Y的存储单元中的存储单元中33数据定义语句的具体形式和功能n(2)预留若干字节(字、双字)存储单元但)预留若干字节(字、双字)存储单元但并不赋以具体的初值,以存放程序的运行结果。并不赋以具体的初值,以存放程序的运行结果。这时操作数部分可使用问号这时操作数部分可使用问号“?”。n例:例:A DB ? ;为变量;为变量A分配一个字节单元分配一个字节单元n B DB ? ;为变量为变量B分配一个字单元分配一个字单元34数据定义语句的具体形式和功能n(3)引入若干个用逗号分隔的操作数来定义)引入若干个用逗号分隔的
24、操作数来定义一个表(数组)。一个表(数组)。n例:例:W_TABLE DW 1122H,3344H;定义一定义一个字表个字表n B_TABLE DB 1,2,4,8,16;定义一个字节定义一个字节表表n其中字变量其中字变量W_TABLE的内容为的内容为1122H,下一,下一个字单元的内容为个字单元的内容为3344H。35数据定义语句的具体形式和功能n(4)用)用DB伪指令在内存中定义一个字符串。字符串伪指令在内存中定义一个字符串。字符串中的每一个字符用它的中的每一个字符用它的ASCII码值来表示,为一个字码值来表示,为一个字节,所以字符串的定义必须用节,所以字符串的定义必须用DB命令。命令。n
25、例如:例如:MESSAGE DB HELLOn注意:当字符串的长度不超过两个字符时,也可用注意:当字符串的长度不超过两个字符时,也可用DW伪指令来定义。伪指令来定义。n例:例:STRING1 DB ABn STRING1 DW ABn STRING1 DW AB,CD36重复操作符n为一个数据区的各单元设置相同的初值为一个数据区的各单元设置相同的初值n格式:格式: 变量名变量名 伪指令助记符伪指令助记符 n DUP(初值,(初值,)n例:例: BW 20 DUP(0) DB 3 DUP(22H,11H,?),?)随机数随机数37分析操作符与合成操作符n作为存储器操作数的标号或变量都有段、偏移作
26、为存储器操作数的标号或变量都有段、偏移量和类型三种属性。在程序设计中,有时需要量和类型三种属性。在程序设计中,有时需要随时查询、调用或修改这些属性,以满足不同随时查询、调用或修改这些属性,以满足不同的访问要求,这些操作由分析和合成操作符来的访问要求,这些操作由分析和合成操作符来完成。完成。38分析操作符n分析操作符作用于存储器操作数时返回它们的分析操作符作用于存储器操作数时返回它们的属性值。这些操作符是:属性值。这些操作符是:SEG、OFFSET、TYPE、SIZE、LENGTH等。等。n分析操作符的使用格式:操作符分析操作符的使用格式:操作符 标号或变量标号或变量nSEG和和OFFSET操作
27、符操作符nSEG和和OFFSET分别用以返回标号或变量的段分别用以返回标号或变量的段地址和偏移地址。地址和偏移地址。39分析操作符nTYPE、LENGTH、SIZE操作符操作符nTYPE操作符返回一个数字值,表示存储器操操作符返回一个数字值,表示存储器操作数的类型。作数的类型。nLENGTH操作符返回变量用操作符返回变量用DUP重复定义的数重复定义的数据项总数。据项总数。nSIZE操作符则返回操作符则返回TYPE和和LENGTH的乘积,的乘积,表示为变量所分配的字节存储单元总数。表示为变量所分配的字节存储单元总数。n注意:注意: 要用要用LENGTH操作符返回的存储区必操作符返回的存储区必须用
28、须用DUP()来定义,否则返回来定义,否则返回1.40合成操作符nPTR操作符操作符nPTR用来临时指定或修改存储器操作数的类型用来临时指定或修改存储器操作数的类型属性(保持原有的段属性和偏移地址属性),属性(保持原有的段属性和偏移地址属性),如果这些变量或标号已有定义,则原定义的类如果这些变量或标号已有定义,则原定义的类型型 属性不变。属性不变。n使用格式:类型使用格式:类型 PTR 标号或变量标号或变量n其中,类型可以是其中,类型可以是BYTE、WORD、DWORD、NEAR或或FAR,它们仅在当前所在的指令中有,它们仅在当前所在的指令中有效。效。41合成操作符(续)nLABEL操作符操作
29、符nLABEL操作符为当前存储单元定义个指定类型操作符为当前存储单元定义个指定类型的标号或变量。它常用于定义一个数据块或标的标号或变量。它常用于定义一个数据块或标号,使它们具有多重名字或属性。号,使它们具有多重名字或属性。n使用格式:标号或变量名使用格式:标号或变量名 LABLE 类型类型n例:例:WBYTE LABEL WORD42合成操作符(续)nTHIS操作符操作符nTHIS操作符与操作符与EQU配合使用,具有配合使用,具有LABEL操操作符的同样作用。作符的同样作用。n使用格式:标号或变量名使用格式:标号或变量名 EQU THIS 类型类型n例:例:BWORD EQU THIS BYT
30、E43符号定义伪指令n格式:格式: 符号名符号名 EQUEQU表达式表达式n操作:操作: 用符号名取代后边的表达式,不可重新定义,即在用符号名取代后边的表达式,不可重新定义,即在同一源程序中,用同一源程序中,用EQUEQU定义过的符号名不能再赋予不同定义过的符号名不能再赋予不同的值。的值。n例:例: CONSTANT EQUCONSTANT EQU 100100;常量赋予符号名;常量赋予符号名 VAR EQU 30H+99HVAR EQU 30H+99HEQU说明的表达式不占用内存空间说明的表达式不占用内存空间44符号定义伪指令n 等号语句等号语句n格式:符号表达式格式:符号表达式n此语句的功
31、能与此语句的功能与EQU类似,唯一区别是能对符类似,唯一区别是能对符号进行再定义。号进行再定义。n例:例:EMP=60n EMP=EMP+1n EMP=123*445段定义伪指令n说明逻辑段的起始和结束;说明逻辑段的起始和结束;n说明不同程序模块中同类逻辑段之间的说明不同程序模块中同类逻辑段之间的联系形态联系形态46段定义伪指令段名段名 SEGMENT 定位类型定位类型 组合类型组合类型 类别类别 段名段名 ENDS说明逻辑说明逻辑段的起点段的起点说明不同模块说明不同模块中同名段的组中同名段的组和连接方式和连接方式47段定义伪指令SEGMENT/ENDSn格式:格式:n段名段名 SEGMENT
32、定义类型定义类型组合类型组合类型类别名类别名n (段体)(段体)n段名段名 ENDSn功能:指出段名及段的各种属性,并表示段的开始和功能:指出段名及段的各种属性,并表示段的开始和结束位置。结束位置。n段名是用户定义的标识符,是识别段的标志,用来指段名是用户定义的标识符,是识别段的标志,用来指示汇编程序为该段分配的存储器起始位置,包含段地示汇编程序为该段分配的存储器起始位置,包含段地址和段内偏移量两个属性。址和段内偏移量两个属性。48定义类型n汇编程序对源程序汇编后生成的目标代码文件汇编程序对源程序汇编后生成的目标代码文件(.OBJ),其中的段地址和偏移量都未最后确),其中的段地址和偏移量都未最
33、后确定,还需要用链接程序(定,还需要用链接程序(LINK)把各个模块)把各个模块连接起来。定位类型参数用于告诉连接起来。定位类型参数用于告诉LINK程序,程序,链接时本段首地址的边界定位方式。定位有四链接时本段首地址的边界定位方式。定位有四种类型:种类型:nPARA(节):表示段的起始地址必须为(节):表示段的起始地址必须为16的的倍数(倍数(XXXX0H),若语句中没有给出定位类),若语句中没有给出定位类型,则默认为型,则默认为PARA。49定义类型nPAGE(页):表示段的起始地址必须为(页):表示段的起始地址必须为256的倍数(的倍数(XXX00H),也就是页的起点上。),也就是页的起点
34、上。nWORD(字)(字):表示段的起始地址必须为偶数,表示段的起始地址必须为偶数,它最适合于安排类型为字的数据段。它最适合于安排类型为字的数据段。nBYTE(字节):表示该段可以从任意地址开(字节):表示该段可以从任意地址开始。始。50组合类型n一个汇编语言源程序往往有许多模块组成,而一个汇编语言源程序往往有许多模块组成,而每一个模块常常又有自己的数据段、代码段和每一个模块常常又有自己的数据段、代码段和堆栈段。组合类型用于告诉堆栈段。组合类型用于告诉LINK程序,多个程序,多个模块链接时本段与其他模块中同名段的组合链模块链接时本段与其他模块中同名段的组合链接关系。组合类型共有六种。接关系。组
35、合类型共有六种。nNONE:本段与其他同名段无组合关系,并有自本段与其他同名段无组合关系,并有自己的段起始地址。若语句中没有指明组合类型,己的段起始地址。若语句中没有指明组合类型,则默认为则默认为NONE。51组合类型nPUBLIC:在满足定位类型的前提下,:在满足定位类型的前提下,LINK程序将其程序将其与其他模块中说明为与其他模块中说明为PUBLIC的同名段邻接在一起,的同名段邻接在一起,共用一个段地址。共用一个段地址。nSTACK:与:与PUBLIC同样处理,只是链接后的段作为同样处理,只是链接后的段作为堆栈段。堆栈段。nCOMMON:各模块中由:各模块中由COMMON方式说明的同名段方
36、式说明的同名段得叠履盖,有着相同的起始地址。段的长度邓决于最得叠履盖,有着相同的起始地址。段的长度邓决于最长的长的COMMON段的长度。段的内容为所链接的最后段的长度。段的内容为所链接的最后一个模块中一个模块中COMMON段的内容以及没有覆盖到的前段的内容以及没有覆盖到的前面的面的COMMON段的内容。段的内容。52段寄存器说明伪指令ASSUMEn格式:格式:ASSUME 段寄存器:段名段寄存器:段名,段寄存器:段名,段寄存器:段名,nASSUME伪指令一般出现在代码段中伪指令一般出现在代码段中SEGMENT伪指令的伪指令的后面,它设定特定的段寄存器指向特定的段,说明源程序后面,它设定特定的段
37、寄存器指向特定的段,说明源程序中定义的段应由哪个段寄存器去寻址。中定义的段应由哪个段寄存器去寻址。n但是,但是,ASSUME并未真正将段地址装入相应的段寄存器,并未真正将段地址装入相应的段寄存器,段寄存器(段寄存器(CS除外)的初值设定还要由程序中的除外)的初值设定还要由程序中的MOV指令指令来完成。来完成。53指定地址伪指令ORG格式格式1:ORG 表达式表达式格式格式2:ORG $+表达式表达式功能:功能:ORG伪指令用来强行指定地址计数器的当伪指令用来强行指定地址计数器的当前值,以改变段内在它以后的代码或数据块存前值,以改变段内在它以后的代码或数据块存放的偏移地址。放的偏移地址。格式格式
38、1直接将表达式的值送入地址计数器。格式直接将表达式的值送入地址计数器。格式2将汇编将汇编ORG语句前地址计数器的现值语句前地址计数器的现值$加上加上表达式后送入地址计数器。表达式后送入地址计数器。54例nDATA SEGMENTn ORG 10H;在数据段在数据段10H偏移地址处偏移地址处开始存放开始存放20H,30Hn X DB 20H,30Hn ORG $+5n Y DB 40H,50H55段定义伪指令例DATA SEGMENT MEM1 DB 11H,22HMEM2 DW 1234HDATA ENDS56结束伪指令n表示源程序结束表示源程序结束n格式:格式: END 标号标号57一个完整
39、源程序结构例DSEG SEGMENTDATA1 DB 1,2,DATA2 DW 1234HDSEG ENDSESEG SEGMENT DB 20 DUP(?)(?)ESEG ENDSSSEG SEGMENT DB 200 DUP(?)(?)SSEG ENDS58一个完整源程序结构例CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG, ES:ESEG,SS:SSEG START:MOV AX,DSEG MOV DS,AX MOV AX,ESEG MOV ES,AX MOV AX,SSEG MOV SS,AX CSEG ENDS END START源程序源程序 代码代码59过程
40、定义伪指令n用于定义一个过程体用于定义一个过程体n格式:格式: 过程名过程名 PROC NEAR / FAR RET 过程名过程名 ENDP过程入口的符号地址过程入口的符号地址60宏命令伪指令n宏命令宏命令源程序中由汇编程序识别的具有源程序中由汇编程序识别的具有 独立功能的一段程序代码独立功能的一段程序代码n格式:格式: 宏命令名宏命令名 MACRO ENDM宏体宏体61四、DOS功能模块n用用 INT 21H 软中断指令,可调用包含多软中断指令,可调用包含多个子功能的功能包个子功能的功能包;n各子功能采用功能号来区分;各子功能采用功能号来区分;n功能包括:功能包括:设备管理、设备管理、62D
41、OS功能子程序的基本方法nBIOS/DOS的每个功能子程序都对应着一个子程序文的每个功能子程序都对应着一个子程序文件。使用这些子程序时,用户不必过问其内部结构和件。使用这些子程序时,用户不必过问其内部结构和细节,也不必关心硬件细节,也不必关心硬件I/O接口的特性,只要直接用接口的特性,只要直接用一条软件中断指令一条软件中断指令INT n即可(即可(n为中断向量号),为中断向量号),这称为中断调用。一般,对功能子程序的调用需要经这称为中断调用。一般,对功能子程序的调用需要经过三个步骤:过三个步骤:子程序入口参数关规定寄存器子程序入口参数关规定寄存器子程序编号送子程序编号送AH寄存器寄存器发软件中
42、断命令:发软件中断命令:INT n63n其中软中断命令其中软中断命令INT n中的中的n值因子程序不同值因子程序不同而可能不同,比如而可能不同,比如ROM BIOS的软中断类型号的软中断类型号有有n=51FH,DOS的软中断类型号有的软中断类型号有n20H,21H,232AH,2EH,2FH,33H和和67H等几等几种情况。种情况。n有的软中断命令只对应一个子程序,这时的功有的软中断命令只对应一个子程序,这时的功能调用无需上列步骤能调用无需上列步骤2;n有的软中断则对应很多子程序,这时的功能调有的软中断则对应很多子程序,这时的功能调用就必须指明子程序号。用就必须指明子程序号。64DOS功能模块
43、调用格式n调用格式:调用格式: MOV AH,功能号,功能号 INT 21H65常用子功能n从键盘输入单字符并显示;从键盘输入单字符并显示;n从键盘输入字符串并显示;从键盘输入字符串并显示;n在屏幕上显示单字符;在屏幕上显示单字符;n在屏幕上显示字符串。在屏幕上显示字符串。66从键盘输入单字符并显示n01号功能调用等待从键盘输入一个字符,调用号功能调用等待从键盘输入一个字符,调用返回时该字符的返回时该字符的ASCII码值送入码值送入AL寄存器,同寄存器,同时将该字符显示在屏幕上。时将该字符显示在屏幕上。n入口参数:无入口参数:无n调用方法:调用方法: MOV AH,01 INT 21Hn输入的
44、字符在输入的字符在AL中中67单字符输入例GET_KEY: MOVAH,1 INT21H CMPAL,Y JZ YES CMPAL,N JZ NO JNZGET_KEY YES: NO: 交互式应交互式应 答程序答程序68从键盘输入字符串nAH 功能号功能号OAHnDS:DX 字符串在内存中的存放地址字符串在内存中的存放地址nINT 21Hn从键盘接收字后串后存入以从键盘接收字后串后存入以DS:DX为首地址的内存缓冲区,同时为首地址的内存缓冲区,同时显示该字符串,输入过程以回车键结束。显示该字符串,输入过程以回车键结束。n使用时,要求事先在数据段定义一个输入缓冲区,其中第一个字使用时,要求事先
45、在数据段定义一个输入缓冲区,其中第一个字节指出缓冲区能容纳的字符个数,不能为节指出缓冲区能容纳的字符个数,不能为0.第二个字节保留用以第二个字节保留用以存放实际输入的字符个数。从第三个字节开始存放从键盘上接收存放实际输入的字符个数。从第三个字节开始存放从键盘上接收的字符。的字符。69定义字符缓冲区n用户自定义缓冲区格式:用户自定义缓冲区格式:0DHN1N2整个缓冲区整个缓冲区最大键入字符数最大键入字符数实际键入字符数实际键入字符数70输入字符串程序段nDAT1 DB 20,?,?,20 DUP(?)(?)nLEA DX,DAT1 MOV AH,0AH INT 21H71输入缓冲区14H ?20个字节个字节定义后的输入缓定义后的输入缓冲区初始状态:冲区初始状态:72单字符显示输出nAH 功能号功能号O2H或或05HnDL 待输出字符待输出字符nINT 21Hn功能:将寄存器功能:将寄存器DL中的单个字符输出到显中的单个字符输出到显示器或打印机。示器或打印机。n02H为显示器、为显示器、05H为打印机为打印机73单字符显示输出例nMOVAH,02nMOVDL,41H;A的的ASCII值值nINT21H 执行结果:屏幕显示字符执行结果:屏幕显示字符 A74字符串输出显示n入口参数:入口参数:DS:DX指向内存中一个以指向内存中一个以$结尾的字符串(不包括结尾的字符串(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 苏教版小学三年级数学上册全册教案
- 光影交错室内氛围营造
- 有用一年级下册数学教案表格
- 高一化学教案:第三单元从微观结构看物质的多样性
- 2024高中地理第1章区域地理环境与人类活动第3节第1课时四大地区学案湘教版必修3
- 2024高中物理第一章静电场综合评估含解析新人教版选修3-1
- 2024高中语文第2单元孟子蚜第3课民为贵练习含解析新人教版选修先秦诸子蚜
- 2024高中语文第六单元文无定格贵在鲜活子路曾皙冉有公西华侍坐训练含解析新人教版选修中国古代诗歌散文欣赏
- 2024高考历史一轮复习第12讲古代中国的农业和手工业学案含解析人民版
- 2024高考地理一轮复习第三部分区域可持续发展-重在综合第四章区域经济发展第32讲区域农业发展学案新人教版
- 四年级少先队活动课教案(完整版)
- 广东省深圳市名校2023-2024学年高一上学期期中联考物理试题
- 发那科注塑机讲义课件
- 2023年广西北海市创城办招聘20人(共500题)笔试必备质量检测、历年高频考点模拟试题含答案解析
- 2023高考英语新高考1卷完形填空全考点解析附译文全
- 工作票知识培训课件
- GB/T 42616-2023电梯物联网监测终端技术规范
- 河南省医院信息大全
- 酒店赔偿价目表
- 广西贵港市2023年中考物理试题(原卷版)
- 集团总裁岗位说明书
评论
0/150
提交评论