第四章 伪指令与程序设计_第1页
第四章 伪指令与程序设计_第2页
第四章 伪指令与程序设计_第3页
第四章 伪指令与程序设计_第4页
第四章 伪指令与程序设计_第5页
已阅读5页,还剩99页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第四章第四章 宏汇编语言程序设计宏汇编语言程序设计4.1 汇编语言程序格式汇编语言程序格式4.2 MASM中的表达式中的表达式4.3 伪指令语句伪指令语句4.4 DOS系统功能调用和系统功能调用和BIOS中断调用中断调用4.5 程序设计方法程序设计方法4.6 宏汇编和条件汇编宏汇编和条件汇编2021-12-2824.1 汇编语言程序设计特点汇编语言程序设计特点o 汇编语言是一种用符号表示的、面向汇编语言是一种用符号表示的、面向CPU指令系统的程序指令系统的程序设计语言。是机器语言的符号表示。设计语言。是机器语言的符号表示。o 基本特点:基本特点: 程序设计人员能更充分地利用机器硬件的全部功能,

2、发程序设计人员能更充分地利用机器硬件的全部功能,发挥机器的长处;挥机器的长处; 程序目标代码占用内存少,执行速度快,效率高,具有程序目标代码占用内存少,执行速度快,效率高,具有实时性;实时性; 由于汇编的特点,由于汇编的特点,汇编语言汇编语言常用于编写计算机系统程序、常用于编写计算机系统程序、实时通信程序和实时控制程序。但汇编语言程序依赖于实时通信程序和实时控制程序。但汇编语言程序依赖于机器硬件,其机器硬件,其通用性和移植性都较差通用性和移植性都较差。2021-12-283从源程序获得目标程序的过程从源程序获得目标程序的过程o汇编语言源程序汇编语言源程序 经过经过汇编汇编翻译成二进制代码的翻译

3、成二进制代码的浮动目标文件浮动目标文件,然后,然后由由连接程序连接程序将将目标文件和库文件目标文件和库文件相连接相连接 生成机器上生成机器上可执行的目标程可执行的目标程序序进行汇编语言开发需要的文件:进行汇编语言开发需要的文件:1)汇编程序)汇编程序 MASM.exe 2)连接程序)连接程序 LINK.EXE 3)库管理程序)库管理程序LIB.EXE(如果不创建子程序库,不需要该文件)(如果不创建子程序库,不需要该文件)4)文本编辑器。如)文本编辑器。如DOS下的下的EDIT 或其它开发工具中的编辑环境如或其它开发工具中的编辑环境如Turbo C等。目的:生成等。目的:生成.ASM文件。文件。

4、5)调试程序)调试程序 DEBUG源程序源程序二进制代码的浮动目标程序二进制代码的浮动目标程序库文件库文件可执行程序可执行程序汇编程序汇编程序连接程序连接程序Masm.exelink.exe2021-12-284开发的步骤(补充)开发的步骤(补充)1、源程序的汇编、源程序的汇编 命令格式:命令格式:MASM 源程序文件名源程序文件名 如果没有语法错误,则生成目标模块文件如果没有语法错误,则生成目标模块文件.obj,否则给,否则给出错误信息出错误信息2、目标文件的连接、目标文件的连接 命令格式:命令格式:LINK obj文件名文件名 如果没有严重错误,将生成可执行文件如果没有严重错误,将生成可执

5、行文件 .exe,否则将,否则将提示相应的错误信息提示相应的错误信息3、可执行文件的执行调试、可执行文件的执行调试 命令格式:命令格式:可执行文件名可执行文件名 操作系统加载该文件进入主存开始运行,如果出现运行操作系统加载该文件进入主存开始运行,如果出现运行错误,可用错误,可用debug.exe调试程序。调试程序。 命令格式:命令格式:debug 可执行程序文件名可执行程序文件名注意:如果程序里没有的堆栈段,系统会给出注意:如果程序里没有的堆栈段,系统会给出warning,但不会影响程序运行。,但不会影响程序运行。2021-12-2854-1汇编语言程序格式汇编语言程序格式p汇编语言源程序用语

6、句书写,汇编语言源程序用语句书写,MASMMASM中可以使用的语句中可以使用的语句有两类:有两类:指令性语句和伪指令语句指令性语句和伪指令语句。o 指令性语句:即执行性语句指令性语句:即执行性语句(指令指令),与机器码一一对应与机器码一一对应,表示某,表示某种确定操作,包括四部分:种确定操作,包括四部分: 标号:标号: 指令操作码指令操作码 操作数操作数 ;注释注释 例:例: AGAN:ADC BX,AX;累加累加o 指示性语句:即说明性语句指示性语句:即说明性语句(伪指令伪指令),不对应机器码不对应机器码,只为汇编,只为汇编提供所需信息,由四部分组成:提供所需信息,由四部分组成: 名字名字

7、伪指令伪指令 操作数操作数 ;注释注释 例:例:SUMDW 0;为结果保留一个字为结果保留一个字 2021-12-286DATASEGMENTSRC_LESSDBHELLO!,0DH,0AH,$DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOV DX,OFFSET SRC_LESSMOV AH,9INT 21HMOV AH,1INT 21HMOVAH,4CHINT21HCODE ENDSENDSTART2021-12-287汇编程序的基本结构要求汇编程序的基本结构要求o 完整的汇编程序要包括:完整的汇编程序要

8、包括:段定义、段分配、设置段地址、返段定义、段分配、设置段地址、返回回DOS语句、程序结束语句、程序结束 和程序体和程序体。必要时加上过程调用。必要时加上过程调用。o 完整汇编语言程序的典型格式完整汇编语言程序的典型格式1. 段定义格式:段定义格式: 段名段名 SEGMENT 段名段名 ENDSo 至少有一个代码段,至少有一个代码段,堆栈段如果不定义,由计算机自动分配。堆栈段如果不定义,由计算机自动分配。段名是由字母数字组成的,可以任意定义。段名是由字母数字组成的,可以任意定义。o 计算机识别不同的段靠计算机识别不同的段靠 段分配段分配ASSUME 语句语句完成完成o ASSUME CS:段名

9、,:段名,DS:段名,:段名,SS:段名,:段名,ES:段名:段名2021-12-288o assume指定段与段寄存器之间的关系,但并不为段寄存指定段与段寄存器之间的关系,但并不为段寄存器设定初值,程序中如果使用数据段或者附加段,需要明确器设定初值,程序中如果使用数据段或者附加段,需要明确对对DS、ES赋值。只要正确书写源程序,赋值。只要正确书写源程序,CS、IP和和SS、SP的值将会由连接程序正确设置的值将会由连接程序正确设置o 设置方法:设置方法: MOV AX,STACKMOV AX,STACK MOV SS,AX MOV SS,AX MOV AX,DATA MOV AX,DATA M

10、OV DS,AX MOV DS,AXo 程序执行完毕后要返回程序执行完毕后要返回DOS,最常用的实现方法:,最常用的实现方法:p 全部程序以全部程序以END结尾,结尾,END后面可以加上程序执行起始的后面可以加上程序执行起始的名称,汇编程序遇到名称,汇编程序遇到END就结束汇编。就结束汇编。MOV AX,4C00HINT 21H2021-12-289三、数据项(汇编语言中使用的操作数)三、数据项(汇编语言中使用的操作数)1 1、常数、常数 二进制数:以二进制数:以“B B”结尾,如结尾,如0000110100001101B B; 八进制数:以八进制数:以“O O”结尾,如结尾,如725725O

11、 O; 十六进制数:以十六进制数:以“H H”结尾,并且必须以数字打头,即结尾,并且必须以数字打头,即若最高位为字母若最高位为字母A AF F,前面应加,前面应加0 0,如,如0 0A12A12H H; 十进制数:以十进制数:以“D D”结尾或省略结尾,如结尾或省略结尾,如1010D D、1010。o 字符串常量字符串常量 字符串常量表示为包含在两个字符串常量表示为包含在两个单引号单引号之间的一连串之间的一连串ASCIIASCII字符。每个串元素的值定义为该元素所对应的字符。每个串元素的值定义为该元素所对应的1 1字节字节ASCIIASCII码值码值。2021-12-2810三、数据项(汇编语

12、言中使用的操作数)三、数据项(汇编语言中使用的操作数)2 2、变量:指存储在存储单元中的值,所有变量有三个属性:、变量:指存储在存储单元中的值,所有变量有三个属性:v段值段值SEGMENTSEGMENT:变量所在段的段基址:变量所在段的段基址v段内偏移地址段内偏移地址OFFSETOFFSET:变量所在地址和所在段首地址之:变量所在地址和所在段首地址之间的偏移字节数间的偏移字节数v类型类型TYPETYPE:变量中每个元素包含的字节数。:变量中每个元素包含的字节数。3 3、标号:可执行指令语句地址的符号表示,三个属性:、标号:可执行指令语句地址的符号表示,三个属性:v段值段值SEGMENTSEGM

13、ENT:标号所在段的段基址:标号所在段的段基址v段内偏移地址段内偏移地址OFFSETOFFSET:标号所在地址和所在段首地址之:标号所在地址和所在段首地址之间的偏移字节数间的偏移字节数v类型类型TYPETYPE:指转移指令中标号可转移的距离,也叫距离:指转移指令中标号可转移的距离,也叫距离属性,属性,NEARNEAR(近标号,实现本代码段内转移)、(近标号,实现本代码段内转移)、FARFAR(远标(远标号,段间转移)号,段间转移)2021-12-2811 补充:补充:o 变量:放在伪指令前的标识符是变量变量:放在伪指令前的标识符是变量o 标号:放在指令前的标识符是标号标号:放在指令前的标识符是

14、标号,标号后有标号后有“:”o 都有段地址、偏移地址、类型等属性。都有段地址、偏移地址、类型等属性。o 例如:例如:DATA SEGMENT TRY DB 20DATA ENDSNEXT: . LOOP NEXT2021-12-28124-2、MASM中的表达式中的表达式o 表达式表达式=操作数操作数+运算符。运算符。o 表达式可出现于源程序的任何地方,表达式可出现于源程序的任何地方,o 在在汇编过程中汇编过程中(而不是程序执行过程中而不是程序执行过程中)即可产生)即可产生确定的值。运算的结果作为语句中的操作数使用。确定的值。运算的结果作为语句中的操作数使用。p6类运算符:算术运算符、逻辑运算

15、符、关系运类运算符:算术运算符、逻辑运算符、关系运算符、数值返回运算符、修改属性运算符、其它算符、数值返回运算符、修改属性运算符、其它运算符运算符2021-12-2813o算术运算符:算术运算符:+、-、*、/、MOD、SHL、SHRo逻辑运算符:逻辑运算符:AND、OR、XOR、NOTo关系运算符:关系运算符:EQ、NE、GT、 LT、 GE 、LEo分析运算符:分析运算符:SEG、OFFSET、TYPE、SIZE、LENGTH 、HIGH、LOWo综合运算符:综合运算符:PTR、DS:、THIS、SHORT2021-12-2814一、算术运算符一、算术运算符 数值表达式数值表达式中可使用所

16、有算术运算符中可使用所有算术运算符 地址表达式地址表达式仅使用仅使用+、-算术运算符算术运算符 /除法,取商。除法,取商。MOD除法取余数。除法取余数。例例4-2 数组数组ARRAY定义如下:定义如下:ARRAY DB 1,2,3,4,5,6,7,8TRY DB 20指令为:指令为:MOV AX,30*5MOV CX,(,(TRY-ARRAY)汇编时,计算表达式形成的指令为:汇编时,计算表达式形成的指令为:MOV AX,150MOV CX,8+、-、*、/、MOD、SHL、SHR2021-12-2815二、逻辑运算符二、逻辑运算符o 逻辑运算符在两个操作数之间逻辑运算符在两个操作数之间按位按位

17、进行二进制布尔运算,结进行二进制布尔运算,结果产生确定的数值。果产生确定的数值。AND、 OR、 NOT、 XORo 逻辑运算符只能对逻辑运算符只能对常数常数进行运算,运算结果也是常数。进行运算,运算结果也是常数。o 例例:AND BL, 46H AND 0FH; 汇编后得到汇编后得到 “ AND BL, 06H ” 的目标码的目标码2021-12-2816三、关系运算符三、关系运算符o 在两个在两个无符号无符号操作数之间进行大小关系比较操作数之间进行大小关系比较o EQ(相等)、(相等)、NE(不等)、(不等)、LT(小于)、(小于)、GT(大于)、(大于)、LE(小于或等于)、(小于或等于

18、)、GE(大于或等于)(大于或等于)o 若关系满足则返回若关系满足则返回全全1,否则返回,否则返回全全0。(。(0FFH0FFFFH0)o 两个操作数必须为两个操作数必须为 数据数据 或是同一段内的两个存储单元的地址或是同一段内的两个存储单元的地址o 例例: MOV AX, 0A2H NE 02H ; 汇编后得到汇编后得到 “ MOV AX, 0FFFFH ” 的目标码的目标码例例4-6 MOV CX,(PORT LT 5)AND 100)OR(PORT GE 5)AND 200)2021-12-2817四、数值返回运算符(分析运算符)四、数值返回运算符(分析运算符)o 对单个操作数进行属性分

19、解,分别返回不同属性的值对单个操作数进行属性分解,分别返回不同属性的值o SEG取取变量或标号变量或标号所在段的段基址,结果为所在段的段基址,结果为16位值位值o OFFSET 取取变量或标号变量或标号的段内偏移量,结果为的段内偏移量,结果为16位值位值o TYPE 取取变量或标号变量或标号的类型的类型o LENGTH 取取变量变量重复次数重复次数 or 1 只和有无只和有无DUP有关有关o SIZE 取分配给取分配给变量变量的字节个数的字节个数 SIZE=LENGTH*TYPE类型类型返回值返回值变量变量DBDWDDDQ1248标号标号NEARFAR-1FFH-2FEH表表4-2 TYPE运

20、算符返回值运算符返回值2021-12-2818例例则:则:SEG BUFF = CSEG ;段基址;段基址 OFFSET BUFF = 0 ;偏移量;偏移量 TYPE BUFF = 2(字)(字) ;类型;类型 LENGTH BUFF = 10 ;DUP次数次数 SIZE BUFF = 10*2 = 20 ;字节数;字节数SEG COUN = CSEGOFFSET COUN = 24TYPE COUN = 4(双字)(双字) LENGTH COUN = 1 SIZE COUN = 4 2021-12-2819修改属性运算符(综合运算符)修改属性运算符(综合运算符)o 可以在程序运行过程中,通过

21、可以在程序运行过程中,通过“修改属性运算符修改属性运算符”来来修改变量或标号的属性修改变量或标号的属性,包括段属性、偏移地址,包括段属性、偏移地址属性、类型属性等。属性、类型属性等。o 有有: 段操作符、段操作符、PTR、THIS、HIGH、LOW、SHORT2021-12-2820o 段操作符段操作符(P36 表表2-7) 格式:格式:段前缀:变量或地址表达式段前缀:变量或地址表达式 功能:功能:修改变量或表达式到某个段寄存器提供的段基址中修改变量或表达式到某个段寄存器提供的段基址中 段前缀:段前缀:CS、ES、DS、SS Eg4-12:MOVAX,ES:BXoPTR:给已分配的存储单元或标

22、号赋予新的属性。:给已分配的存储单元或标号赋予新的属性。格式:类型格式:类型/距离距离 PTR 变量或标号变量或标号功能:将功能:将PTR左边的类型属性赋给右边的变量或标号左边的类型属性赋给右边的变量或标号常与常与BYTE、WORD、NEAR、FAR等连用等连用Eg4-13: N1DB15H,36H MOV AX,WORD PTR N12021-12-2821o PTR例例o MUL BYTE PTRBX ;限定存储器操作数的类型限定存储器操作数的类型o JMP WORD PTRBX ;段内转移段内转移o JMP DWORD PTRBX ;段间转移;段间转移 CS:IPo JMP FAR PT

23、R LO ;段间转移;段间转移2021-12-2822q THIS:q 格式:变量格式:变量/标号标号 EQU THIS 类型类型/距离距离q 功能:该变量或标号的段地址和偏移地址与下一个存储功能:该变量或标号的段地址和偏移地址与下一个存储单元的地址相同,并具有单元的地址相同,并具有THIS后的属性后的属性q Eg4-45:FIRST EQU THIS BYTE TABLE DW 200DUP(?)(?) EG4-46 :SP1 EQU THIS FAR MOV AX,100oSHORT:格式:格式:SHORT 标号标号功能:限制转移类指令为短转移(功能:限制转移类指令为短转移(-128127

24、)Eg:L1:JMP SHORT L2 . L2:MOV AX,02021-12-2823o HIGH、LOW(字节分离运算符)(字节分离运算符) 格式:格式:HIGH/LOW 变量或标号变量或标号 功能:对于一个数或表达式,分离出高位字节和低位字节功能:对于一个数或表达式,分离出高位字节和低位字节 Eg: K1 EQU 0ABCDHK2 EQU 1234HMOV AH, HIGH K1MOV BL, LOW K2经过汇编后形成指令:经过汇编后形成指令:MOV AH,0ABHMOV BL,34H2021-12-28244-3 8086宏汇编语言常用伪指令宏汇编语言常用伪指令o 8086宏汇编语

25、言宏汇编语言MASM5.0规定的常用伪指令,包括规定的常用伪指令,包括 数据定义语句数据定义语句DB、DW、DD 标号赋值语句:标号赋值语句:EQU、= 段定义语句段定义语句SEGMENT、ENDS 段分配语句:段分配语句:ASSUME 过程定义语句:过程定义语句:PROC.ENDP 程序开始结束语句:程序开始结束语句:ORG、END、NAME 群定义语句群定义语句GROUP 结构定义语句:结构定义语句:STRUC.ENDS 记录定义语句:记录定义语句:RECODE2021-12-2825一、数据定义语句一、数据定义语句DB、DW、DD等等o 用于为数据项用于为数据项分配存储单元分配存储单元并

26、并预置初值预置初值。DB 变量为变量为字节字节数据类型(数据类型(8位位)DW 变量为变量为字字数据类型数据类型(16位位)DD 变量为变量为双字双字数据类型(数据类型(32位位)DQ 变量为变量为4字字数据类型(数据类型(64位位)DT 变量为变量为10字节字节数据类型数据类型(80位位)格式格式1:变量名:变量名 助记符助记符 操作数,操作数操作数,操作数 ;注释;注释格式格式2:变量名:变量名 助记符助记符 n DUP(操作数,操作数(操作数,操作数.) ;注释;注释2021-12-2826o ONE DB 8; 给变量给变量ONE分配一个字节分配一个字节,并,并 预置初值为预置初值为8

27、o TWODB ?; 字节变量字节变量TWO初值不定初值不定o ST DB 96, 20, ?, 57; 以以ST为首址为首址连续分配连续分配4个字节的存储单元个字节的存储单元o STR DB How are you ? $ ; 定义定义字符串字符串o TWIN DB 5 DUP( 0FFH ); 连续分配连续分配5个字节个字节,初值均为,初值均为0FFH2021-12-2827DB 与与DW的应用的应用41H42H42H41H20H30H30H20H注意注意 :用:用DWDW定义字符串时只允许包括两个定义字符串时只允许包括两个字符,多于两个字符只能用字符,多于两个字符只能用DBDB定义。定义

28、。2021-12-2828例例o 设设DATA的段首地址为的段首地址为2000HDATA SEGMENTORG 0004HAVR1 DW 2030H AVR2 DB 40HDWVR DW AVR1DDVR DD AVR2DATA ENDS30H20H40H04H00H06H00H00H20HAVR1AVR2DWVRDDVR0004H0006H0009H用伪指令可以将变量或标号的偏移地址存入存储器,当用用伪指令可以将变量或标号的偏移地址存入存储器,当用DD定义的定义的时候,变量或标号的偏移地址存入低位字中,段地址存入高位字中。时候,变量或标号的偏移地址存入低位字中,段地址存入高位字中。2021-

29、12-2829二、表达式赋值语句二、表达式赋值语句o 格式:符号名格式:符号名 EQU 表达式表达式o 功能:用于给变量、标号、常数、指令、表达式等定义功能:用于给变量、标号、常数、指令、表达式等定义一个一个符号名符号名,程序中用到左边的变量标号时可用右边的,程序中用到左边的变量标号时可用右边的常数或表达式代替常数或表达式代替o 特点特点 :一经定义不能重新定义一经定义不能重新定义 例例4-27 COUNT EQU 100 DATA EQU COUNT+2(注:(注:count必须提前定义)必须提前定义)A1 EQU BX+SIB1 EQU OFFSET A1C1 EQU ADD2021-12

30、-2830o 等号语句等号语句 ;赋值;赋值PP = 89FAHPP = PP+1; PP = 89FBHo 等号语句等号语句与与EQU语句语句的相同点在于的相同点在于:定义符号而非变量,定义符号而非变量,故用故用EQU、= 定义的符号定义的符号不占用存储器单元不占用存储器单元o 区别在于区别在于:等号语句等号语句可以在同一源程序中重复定义符号而可以在同一源程序中重复定义符号而无需解除无需解除2021-12-2831三、段定义语句三、段定义语句o 段定义语句段定义语句 SEGMENT / ENDSo 用于对用于对 DS、ES、SS、CS 段的定义段的定义o 语句格式:语句格式:段名段名 SEG

31、MENT 定位类型定位类型 组合类型组合类型 分类名分类名 段名段名 ENDSo ENDS必须与必须与SEGMENT成对出现,且成对出现,且段名必须一致段名必须一致。2021-12-2832段定义的相关约定(略)段定义的相关约定(略)2021-12-2833段定义的相关约定(略)段定义的相关约定(略) STACK:此参数在堆栈段中不能省略,多个模块只需一个:此参数在堆栈段中不能省略,多个模块只需一个堆栈段,各个模块的堆栈段采用覆盖方式组合,容量为其中堆栈段,各个模块的堆栈段采用覆盖方式组合,容量为其中最大的那段的容量。最大的那段的容量。 COMMON:本段与其它:本段与其它同名段有相同的起始地

32、址同名段有相同的起始地址,采用,采用覆盖方式在存储器中存放,长度为同名段中最大段的长度。覆盖方式在存储器中存放,长度为同名段中最大段的长度。 AT表达式:连接程序把本段装在表达式值所表达式:连接程序把本段装在表达式值所指定的段地址指定的段地址(此方式不能指定代码段)。(此方式不能指定代码段)。 MEMORY:定位该段与其它模块中的同名段有相同的首地:定位该段与其它模块中的同名段有相同的首地址,采用覆盖方式在存储器中组合连接,功能与址,采用覆盖方式在存储器中组合连接,功能与COMMAN类似,区别在于第一个类似,区别在于第一个MEMORY逻辑段覆盖其它段。逻辑段覆盖其它段。分类名分类名:给各段的名

33、字信息,连接程序将:给各段的名字信息,连接程序将类别名相同的段类别名相同的段组成组成一个段组用它们共同的名字作为这个段组的名字,物一个段组用它们共同的名字作为这个段组的名字,物理上相邻的连接在一起。类别必须用单引号括起来。理上相邻的连接在一起。类别必须用单引号括起来。2021-12-2834地址计数伪指令地址计数伪指令$SORTD SEGMENTARRAY DB 25,46,3,75,5COUNT EQU $-ARRAYSORTD ENDSo ARRAY的偏移地址的偏移地址:0000Ho $ 的偏移地址的偏移地址:0005Ho $-ARRAY 实际是实际是ARRAY数组的长度数组的长度表示表示

34、当前偏移地址值,当前偏移地址值,常用来常用来计算变量定义的数组计算变量定义的数组或字符串的个数。或字符串的个数。2021-12-2835段分配语句段分配语句ASSUMEASSUME 伪指令仅用在代码段首行伪指令仅用在代码段首行,用来将逻辑段分用来将逻辑段分别定义成代码段、数据段、堆栈段及附加段别定义成代码段、数据段、堆栈段及附加段2021-12-2836o 每个段的容量小于等于每个段的容量小于等于64KBo 用户可以设置多个逻辑段,但只允许用户可以设置多个逻辑段,但只允许4个逻辑段同时有效个逻辑段同时有效o 4个逻辑段不一定全部定义,通常个逻辑段不一定全部定义,通常代码段代码段和和数据段数据段

35、是必须的是必须的o 如果代码段中使用了串指令,必须设置附加段做目标串基址如果代码段中使用了串指令,必须设置附加段做目标串基址o ASSUME只指定某个段分配给哪个段寄存器,并将代码段只指定某个段分配给哪个段寄存器,并将代码段的段基址的段基址自动装入自动装入CS寄存器寄存器,而不能把其它段基址装入相,而不能把其它段基址装入相应的段寄存器,所以在应的段寄存器,所以在代码段的开始要有初始化程序代码段的开始要有初始化程序完成这完成这个工作。对个工作。对堆栈段来说堆栈段来说,除了将段基址送入,除了将段基址送入SS寄存器寄存器,还,还需要将栈顶偏移地址置入堆栈指示器需要将栈顶偏移地址置入堆栈指示器SP。o

36、 例例例例4-29:求两个求两个16位无符号数相乘位无符号数相乘 DATA SEGMENT D1 DW 1234H D2 DW 5678H P1 DD ? P2 DD ? DATA ENDS STACK SEGMENT STACK STT DB 100 DUP(?) TOP EQU LENGTH STT STACK ENDS CODE SEGMENT ASSUME CS:CODE , DS:DATA , SS:STACK MAIN PROC FAR START: MOV AX, STACK MOV SS, AX MOV SP, TOP PUSH DS SUB AX,AX PUSH AX MOV

37、 AX, DATA MOV DS, AX MOV AX, D1 MUL D2 MOV BX, OFFSET P1 MOV BX, AX MOV BX+2, DX RET MAIN ENDP CODE ENDS END STARTTOP=?2021-12-2838四、过程定义伪指令四、过程定义伪指令PROC FAR 、ENDP 远远过程定义伪指令过程定义伪指令PROC NEAR、ENDP 近近过程定义伪指令过程定义伪指令2021-12-2839o 过程名过程名实质上是过程入口的实质上是过程入口的符号地址符号地址,也有,也有三种属性三种属性:段属段属性性、偏移量属性偏移量属性和和类型类型。过程的。

38、过程的类型属性类型属性可以是可以是NEARNEAR或或FARFAR。q 过程和其它程序可定义在同一个段中,也可定义在不同的段过程和其它程序可定义在同一个段中,也可定义在不同的段中。对过程的调用要使用中。对过程的调用要使用CALLCALL语句语句,如:,如: CALL PROC_NAME1注:注:如果在过程定义中没有写明是如果在过程定义中没有写明是NEARNEAR过程或过程或FARFAR过程,则汇编过程,则汇编器将这个过程默认为器将这个过程默认为NEARNEAR过程。过程。例例COD1SEGMENTASSUME CS: COD1, ; 代码段中的其它语句(主程序)代码段中的其它语句(主程序)SU

39、B1 PROC FAR; 名为名为SUB1的的FAR过程开始过程开始 RET; 返回返回SUB1 ENDP; SUB1结束结束SUB2 PROC ; 名为名为SUB2的的NEAR过程过程开始开始 RET; 返回返回SUB2 ENDP; SUB2结束结束; 可能定义的其它过程可能定义的其它过程COD1ENDS; 代码段结束代码段结束2021-12-2841五、程序开始和结束语句五、程序开始和结束语句o 语句格式:语句格式:ORG 表达式或常量表达式或常量o ORG语句之后段内所有的数据或代码均以表达式或常量的语句之后段内所有的数据或代码均以表达式或常量的值为值为起始偏移量起始偏移量连续存放,除非

40、遇到另一个连续存放,除非遇到另一个ORG语句。语句。o 此语句本身并不占内存。此语句本身并不占内存。2021-12-2842例例4-33 用用ORG指定代码段地址指定代码段地址CODE SEGMENTORG 100HASSUME CS:CODE,DS:DATASTART:MOVAX,DATACODE ENDS请问:这里请问:这里100H是哪条语句的偏移地址呢?是哪条语句的偏移地址呢?2021-12-28432、NAME格式:格式:NAME NAME 程序名程序名功能:功能:给源程序汇编以后得到的目标程序指定一个程序名,连给源程序汇编以后得到的目标程序指定一个程序名,连接时需要使用这个目标程序的

41、名。接时需要使用这个目标程序的名。注释:如果程序中没有注释:如果程序中没有NAMENAME伪指令,则汇编程序将伪指令,则汇编程序将TITLETITLE伪指令伪指令(TITLE(TITLE属于列表伪指令属于列表伪指令) )后面后面“标题名标题名”中的前六个字符作中的前六个字符作为模块名。为模块名。如果源程序中既没有使用如果源程序中既没有使用NAMENAME,也没有使用,也没有使用 TITLETITLE伪指令,则汇编程序将源程序的文件名作为目标程序伪指令,则汇编程序将源程序的文件名作为目标程序的模块名。的模块名。 2021-12-28443. END3. END 格式格式:END标号标号 功能:功

42、能:标记汇编程序结束。标记汇编程序结束。 END伪指令助记符,不可缺省,在源程序最后一行,伪指令助记符,不可缺省,在源程序最后一行,每个模块只有一个每个模块只有一个END,汇编程序到,汇编程序到END语句停止汇编。语句停止汇编。 标号标号是该程序中是该程序中第一条可执行语句第一条可执行语句的标号,可以缺的标号,可以缺省。省。 以上几类伪指令语句是经常用到的,下面所介绍的伪指以上几类伪指令语句是经常用到的,下面所介绍的伪指令语句对于灵活的编程较为有用。自学。令语句对于灵活的编程较为有用。自学。2021-12-28454-4. DOS4-4. DOS系统功能调用和系统功能调用和BIOSBIOS中断

43、调用中断调用用户程序高级语言高级语言DOS操作系统其它操作系统BIOS硬件系统用户程序和操作系统的关系用户程序和操作系统的关系2021-12-28464-4. DOS4-4. DOS系统功能调用和系统功能调用和BIOSBIOS中断调用中断调用o 补充知识:补充知识:当我们编写的汇编语言源程序是在当我们编写的汇编语言源程序是在DOSDOS环境环境下运行时,下运行时,必须必须了解汇编语言是如何同了解汇编语言是如何同DOSDOS操作系统接口操作系统接口的。的。 当我们用编辑程序把源程序输入到机器中,用汇编程序把它转换当我们用编辑程序把源程序输入到机器中,用汇编程序把它转换为目标程序,为目标程序,用连

44、接程序对其进行连接和定位时,操作系统为每用连接程序对其进行连接和定位时,操作系统为每一个用户程序建立了一个一个用户程序建立了一个程序段前缀区程序段前缀区PSPPSP,其长度为,其长度为256256个字节,个字节,主要主要用于存放所要执行程序的有关信息用于存放所要执行程序的有关信息,同时,同时也提供了程序和操也提供了程序和操作系统的接口作系统的接口。操作系统在程序段前缀的开始处。操作系统在程序段前缀的开始处( (偏移地址偏移地址0000H)0000H)安排了一条安排了一条INT 20HINT 20H软中断指令。软中断指令。INT 20HINT 20H中断服务程序由中断服务程序由DOSDOS提提供

45、,执行该服务程序后,控制就转移到供,执行该服务程序后,控制就转移到DOSDOS,即返回到,即返回到DOSDOS管理的管理的状态。状态。因此,用户在组织程序时,必须使程序执行完后能去执行因此,用户在组织程序时,必须使程序执行完后能去执行存放于存放于PSPPSP开始处的开始处的INT 20HINT 20H指令,这样便返回到指令,这样便返回到DOSDOS,否则就无,否则就无法继续键入命令和程序。法继续键入命令和程序。2021-12-2847 DOS DOS在建立了程序段前缀区在建立了程序段前缀区PSPPSP之后,就将要执行的程序之后,就将要执行的程序(加载加载 文件时文件时)从磁盘装入内存。在定位程

46、序时,从磁盘装入内存。在定位程序时,DOSDOS将代码段置于将代码段置于PSPPSP下方,代码段之后是数据段,最后放置堆栈段。内存分配好下方,代码段之后是数据段,最后放置堆栈段。内存分配好之后,之后,DOSDOS就设置段寄存器就设置段寄存器DSDS和和ESES的值,以使它们指向的值,以使它们指向PSPPSP的开始的开始处处,即即INT 20HINT 20H的存放地址,同时的存放地址,同时将将CSCS设置为设置为PSPPSP后面代码段的段后面代码段的段地址,地址,IPIP设置为指向代码段中第一条要执行的指令位置设置为指向代码段中第一条要执行的指令位置,把,把SSSS设设置为指向堆栈的段地址,让置

47、为指向堆栈的段地址,让SPSP指向堆栈段的栈底指向堆栈段的栈底( (取决于堆栈的取决于堆栈的长度长度) ),然后系统开始执行用户程序,然后系统开始执行用户程序。 为了保证用户程序执行完后能返回到为了保证用户程序执行完后能返回到DOSDOS状态,可使用如下两种状态,可使用如下两种方法。方法。 2021-12-2848用户程序返回用户程序返回DOS的方法的方法(1)标准方法)标准方法 首先将用户程序的主程序定义成一个首先将用户程序的主程序定义成一个FAR过程过程,其最后一条指令,其最后一条指令为为RET。然后在代码段的主程序。然后在代码段的主程序(即即FAR过程过程)的开始部分用如下的开始部分用如

48、下三条指令将三条指令将PSP中中INT 20H 指令的段地址及偏移地址压入堆栈指令的段地址及偏移地址压入堆栈:PUSHDS ;保护;保护PSP段地址段地址MOV AX,0 ;保护偏移地址;保护偏移地址0PUSH AX 这样,当程序执行到主程序的最后一条指令这样,当程序执行到主程序的最后一条指令RETRET时,由于该过时,由于该过程具有程具有FARFAR属性,故存在堆栈内的两个字就分别弹出到属性,故存在堆栈内的两个字就分别弹出到CSCS和和IPIP,从而执行从而执行INT 20HINT 20H指令,使控制返回到指令,使控制返回到DOSDOS状态。状态。2021-12-2849用户程序返回用户程序

49、返回DOS的方法的方法(2)非标准方法)非标准方法 也可在用户的程序中不定义过程段,只在代码段结束之前也可在用户的程序中不定义过程段,只在代码段结束之前(即即CODE ENDS之前之前)增加两条语句:增加两条语句:MOV AH,4CHINT 21H则程序执行完后也会自动返回则程序执行完后也会自动返回DOS状态。状态。 2021-12-2850例:基本程序结构(例:基本程序结构(1)CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACKBEGIN: MOV AX, DATA MOV DS, AX CODE SEGMENT END BEGIN为段寄存器赋值为段

50、寄存器赋值2021-12-2851基本程序结构(基本程序结构(2)2021-12-2852二、二、DOS系统功能调用系统功能调用o DOS提供若干的软中断调用,例如提供若干的软中断调用,例如 读写磁盘扇区的软中断读写磁盘扇区的软中断INT 25H 和和 INT 26H, 退出程序的软中断退出程序的软中断 INT 20H、INT 22H等。等。o 软中断中以软中断中以INT 21H功能最强,它提供一系列的功能调用,功能最强,它提供一系列的功能调用,可以说几乎包括了整个系统的功能。可以说几乎包括了整个系统的功能。o 要求要求 :掌握:掌握 INT 21H 中的几个基本的输入输出调用。其中的几个基本

51、的输入输出调用。其它的掌握使用的方法即可它的掌握使用的方法即可2021-12-2853二、二、DOS系统功能调用系统功能调用 系统功能调用是微机的磁盘操作系统系统功能调用是微机的磁盘操作系统DOSDOS为用户提供的一为用户提供的一组例行组例行子程序子程序,因而又称为,因而又称为DOSDOS系统功能调用。系统功能调用。 为了使用方便,系统已将所有为了使用方便,系统已将所有子程序子程序按顺序编号,称为按顺序编号,称为调用号(又称子功能号)调用号(又称子功能号)。对于所有的功能调用,使用时一。对于所有的功能调用,使用时一般需要经过以下般需要经过以下四个步骤四个步骤: (1) (1) 系统功能号送系统

52、功能号送AHAH寄存器。寄存器。 (2) (2) 入口参数送指定寄存器入口参数送指定寄存器 (3) (3) 发出中断请求:发出中断请求:INT 21H(INT 21H(系统功能调用指令系统功能调用指令) )。 (4) (4) 根据出口参数分析功能调用执行情况。根据出口参数分析功能调用执行情况。 2021-12-28541、DOS键盘功能调用键盘功能调用表表4-7 DOS键盘功能调用键盘功能调用AH功能功能入口参数入口参数出口参数出口参数1读键盘输入的一个字符,并在屏读键盘输入的一个字符,并在屏幕上显示,检查幕上显示,检查Ctrl-Break键键AL=字符字符8同同1号子功能,无回显号子功能,无

53、回显AL=字符字符6直接读键盘输入的字符,回显,直接读键盘输入的字符,回显,不检查不检查Ctrl-Break键键DL=0FFH键盘有输入:键盘有输入:AL=字字符,符,ZF=0; 键盘无输键盘无输入:入:AL=0,ZF=17直接键盘输入字符,无回显,不直接键盘输入字符,无回显,不检查检查Ctrl-Break键键AL=字符字符0AH输入字符串到内存缓冲区输入字符串到内存缓冲区DS:DX=缓冲区首缓冲区首址址0BH检查键盘输入状态检查键盘输入状态AL=0FFH有键入有键入AL=00H无键入无键入0CH清键盘缓冲区清键盘缓冲区AL=键盘功能号键盘功能号(1,6,7,8,0A)出口参数依赖于清除出口参

54、数依赖于清除标准输入缓冲区后使标准输入缓冲区后使用的功能调用。用的功能调用。2021-12-2855 (1) (1)键入单字符:键入单字符: 1 1号功能调用:号功能调用: 调用格式:调用格式:MOVMOV AH AH,1 1INT INT 21H 21H 功能:系统执行该功能时将扫描键盘,等待键入。一旦有键功能:系统执行该功能时将扫描键盘,等待键入。一旦有键按下,就将按下,就将键值键值( (相应字符的相应字符的ASCIIASCII码值码值) )读入读入,先,先检查是否检查是否是是CtrlBreakCtrlBreak。若是,则退出命令执行;否则将。若是,则退出命令执行;否则将键值送入键值送入A

55、LAL寄存器,同时将这个字符寄存器,同时将这个字符显示显示在屏幕上。在屏幕上。 2021-12-2856例例4-51o 交互式程序中用户按下数字键交互式程序中用户按下数字键1,2,3,程序转入相应的,程序转入相应的服务子程序,若按下其它键就继续等待。服务子程序,若按下其它键就继续等待。KEY: MOV AH,1INT21HCMPAL,1JEONECMPAL,2JETWOCMPAL,3JETHREEJMPKEYONE:.TWO:.2021-12-2857(2)输入字符串)输入字符串 0AH号功能调用号功能调用 调用格式:调用格式:MOV DX,数据区的首偏移地址,数据区的首偏移地址MOV AH,

56、10INT 21H功能功能: :从键盘接收的字符串送到内存数据区。要求从键盘接收的字符串送到内存数据区。要求事先定义一个数据区,事先定义一个数据区,数数据区内据区内第一个字节指出数据区能容纳的字符个数第一个字节指出数据区能容纳的字符个数,不能为零;,不能为零;第二个字第二个字节保留,以用做填写实际输入的字符个数;节保留,以用做填写实际输入的字符个数;从从第三个字节开始存放从键第三个字节开始存放从键盘上接收的字符串,直到盘上接收的字符串,直到ENTERENTER键结束键结束。实际输入的字符数少于定义的。实际输入的字符数少于定义的字节数,数据区内其余字节填零;若多于定义的字节数,则后来输入的字节数

57、,数据区内其余字节填零;若多于定义的字节数,则后来输入的字符丢掉,且响铃。字符丢掉,且响铃。调用时,要求调用时,要求DSDS:DXDX指向数据区首地址。指向数据区首地址。2021-12-2858例如:例如: DATASEGMENTBUFDB 50;数据区长度;数据区长度DB ? ;保留,填入实际输入的字符个数;保留,填入实际输入的字符个数 DB 50 DUP(?) ;定义;定义50个字节存储空间个字节存储空间DATAENDSCODESEGMENTASSUME CS:CODE, DS:DATASTART:MOVAX, DATAMOVDS,AX MOV DX,OFFSET BUF MOV AH,1

58、0 INT 21H CODE ENDS ENDSTART2021-12-28592、DOS显示功能调用显示功能调用表表4-6 DOS显示功能调用显示功能调用AH功能功能入口参数入口参数说明说明2显示一个字符,检查显示一个字符,检查Ctrl-Break键键DL=字符字符光标跟随字符移动光标跟随字符移动6显示一个字符,不检查显示一个字符,不检查Ctrl-Break键键DL=字符字符(0FFH)光标跟随字符移动光标跟随字符移动9显示字符串显示字符串DS:DX=串地址串地址串以串以“$”字符结束字符结束,光标随串移动光标随串移动2021-12-2860 (1) 单字符显示:单字符显示:2号功能调用号功

59、能调用 调用格式:调用格式: MOV DL,待显示字符的,待显示字符的ASCII码码 MOV AH,2 INT 21H 本调用执行后,显示器显示其本调用执行后,显示器显示其ASCII码值放入码值放入DL中的字符。中的字符。 2021-12-2861 (2) 字符串输出:字符串输出:9号功能调用号功能调用调用格式:调用格式:MOV 通用寄存器,带显示字符串的段基址通用寄存器,带显示字符串的段基址MOV DS, 通用寄存器通用寄存器MOV DX,待显示字符串首字符的偏移地址,待显示字符串首字符的偏移地址;DS:DX MOV AH,9 INT 21H 本调用执行后,显示器显示待显示的字符串。调用时,

60、要求本调用执行后,显示器显示待显示的字符串。调用时,要求DS:DX必须指向内存中一个以必须指向内存中一个以“$”作为结束标志的字符串。作为结束标志的字符串。例如:例如: DATASEGMENTBUF DB HOW DO YOU DO?,0DH,0AH,$DATAENDSCODE SEGMENT MOV AX,DATA MOV DS,AX MOV DX,OFFSET BUF MOV AH,9 INT 21H CODE ENDS 换成:换成:MOV DX, SEG BUFMOVDS, DXMOVDX, OFFSET BUFMOVAH, 9INT21H2021-12-2863 常用系统功能调用应用举

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论