《第4章 汇编语言语法和DOS功能调用.ppt》由会员分享,可在线阅读,更多相关《第4章 汇编语言语法和DOS功能调用.ppt(63页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第4章汇编语言语法和DOS功能调用,主讲曹红波,第4章汇编语言语法和DOS功能调用,4.1汇编语言程序的格式4.2汇编语言中的基本数据4.3伪指令语句4.4汇编语言中的表达式4.5指令语句4.6宏指令语句及其使用4.7DOS系统功能调用4.8习题例解4.9练习题,4.1汇编语言程序的格式例4-1试求小于100的所有非零偶数,并把结果存入以BUFF开始的内存区。MY_DATASEGMENT;定义数据段BUFFDB50DUP(?);设置缓冲区MY_DATAENDS;定义数据段结束MY_CODESEGMENT;定义代码段ASSUMECS:MY_CODE,;规定CS和DS的内容DS:MY_DATAST
2、ART:MOVAX,MY_DATA;DS初始化为MY_DATAMOVDS,AX,MOVAL,2;置循环初始值LEABX,BUFFLLP:MOVBX,AL;循环体INCALINCALCMPAL,100;循环控制JNZLLPINT20H;返回DOSMY_CODEENDS;代码段结束ENDSTART;整个程序结束,汇编语言程序的格式可以归结为以下几点:(1)段的结构段名1SEGMENT段名nSEGMENT语句块语句块段名1ENDS段名nENDS段名2SEGMENTEND标号语句块段名2ENDS,(2)语句的结构3种基本语句类型:指令语句伪指令语句宏指令语句语句一般有4个部分组成,即:标号或名字操作码
3、操作数;注释标号或名字:这是一个任选部分,在语句之首,4.2汇编语言中的基本数据1、标识符标识符-由程序员自由建立起来的,有特定意义的字符序列。标识符的组成规则如下:必须由字母、数字(0,9)及特殊符号(?,)组成,且必须以字母打头。字符总数限制在31个以内。不能使用属于系统专用保留字(保留的字)。,4.2汇编语言中的基本数据2、常数语句中出现的那些固定值,除了自身的值以外,没有其它任何属性。常数分为两类(1)数值常数:后缀B,Q,D或不用,H(2)字符串常数:不超过255个如:D7S4,3、变量存放在存储器单元中的操作数,它的值是可以改变的,在程序中出现的是存储器单元地址的符号,即与某一数据
4、项第一字节相对应的标识符。变量的3个属性:段地址:变量所在段的段地址;偏移地址:变量所在段内的偏移地址;类型:所定义的每个变量所占据的字节数。,4、标号可执行指令语句地址的符号表示,即用标识符来表示地址。标号的3个属性:段地址:与标号对应的指令首字节所在的段地址。偏移地址:与标号对应的指令首字节所在的偏移地址。类型:标号的类型属性有两种:NEAR和FAR类型。,4.3伪指令语句伪指令语句可分为以下几种类型:数据定义伪指令语句标识符赋值与解除伪指令语句段定义伪指令语句过程定义伪指令语句程序开始与结束伪指令语句方式定义伪指令语句结构定义伪指令语句分组伪指令语句其它伪指令语句,1、数据定义伪指令语句
5、五条:DB、DW、DD、DQ和DT,分别用来定义字节、字、双字、8字节和10字节。指令格式:变量名助记符操作数1,操作数2,操作数n;注释变量名助记符nDUP(操作数1,操作数2,操作数n);注释,例4-2操作数是常数、表达式、字符串数据的定义DATA1DB15H,25HDATA2DW9988H,56HDATA3DD2*40H,0AABBHDATA4DBHELLO,例4-3操作数用“?”定义不确定值的变量,用DUP来定义重复变量,不确定值的变量一般用作保留存储空间,以便存放运算结果。DATA1DB?DATA2DW0D55H,?DATA3DB5DUP(0)DATA4DW10DUP(?)DATA5
6、DB4DUP(1,2DUP(20),2、标识符赋值与解除伪指令语句共有4条:等值伪指令语句EQU等号伪指令语句“=”解除伪指令语句PURGE别名定义伪指令语句LABEL(1)等值伪指令EQU语句指令格式:标识符EQU操作数例如:DATAEQU100DATA1EQUDATA2CIEQUADD,(2)等号伪指令语句“=”指令格式:标识符=操作数,例如:DATA=100DATA1=DATA+10SOURCE=BXSIMOVAX,SOURCESOURCE=BXMOVCX,SOURCE,(3)解除伪指令语句PURGE指令格式:PURGE标识符1,标识符2,标识符n功能:用该指令解除标识符,以后可用EQU
7、重新定义(4)别名定义伪指令语句格式:别名LABEL类型属性LABEL,伪指令助记符,不可缺省。功能:给下一个变量或标号取另一个名字,重新定义类型,灵活,3、段定义伪指令语句(1)段结构定义伪指令语句SEGMENTENDS指令格式:段名SEGMENT定位类型组合类型分类名逻辑段内容段名ENDS功能:将一个逻辑段的内容定义成一个整体。参数:4种定位类型:PARA、BYTE、WORD和PAGE6种组合类型:NONE、PUBLIC、COMMON、AT、STACK和MEMORY类别名:可省略,不超过40个字符,将所有分类名相同的逻辑段组成一个段组。,(2)段分配伪指令语句指令格式:ASSUMECS:段
8、名,DS:段名,SS:段名,ES:段名功能:定义当前有效的4个逻辑段,指明段和段寄存器的关系,并把代码段的段基址装入CSASSUMEES:NOTHING取消已经由ASSUME指定的段寄存器,4、过程(子程序)定义伪指令语句指令格式:过程名PROC属性过程内容RET过程名ENDP功能:定义一个在主程序中可以用CALL指令调用的过程。CALL过程名,5、程序开始与结束伪指令语句共有4条伪指令语句:NAME、TITLE、ORG和END。(1)目标模块命名伪指令语句格式:NAME程序名;定义一个程序名,程序每一页开头输出TITLE文本名;功能:为源程序目标模块赋一个程序名。(2)定位伪指令语句格式:O
9、RG表达式功能:下一条语句的起始偏移位置ORG$+6(3)程序结束伪指令语句格式:END标号名(起始地址),6、方式定义伪指令语句汇编语言有两种操作方式:8086和80386格式:.8086默认的.386使用32位寄存器必须加功能:定义汇编程序的操作方式,7、结构定义伪指令语句有三条语句:结构定义伪指令,结构存储分配和预置伪指令及结构使用伪指令。(1)结构定义伪指令语句格式:结构名STRUC数据变量序列;为DB、DW等;结构名ENDS,例4-9定义一个数据表格TAB的结构TSTRUSTRUCDA1DBSXYZDA2DW?DA3DWSEGLP1DA4DW2DUP(3)DA5DW5678H,123
10、4HTSTRUENDS只定义,汇编时不产生目标代码,不分配空间字符串、简单变量、多重变量,(2)结构存储分配和预置伪指令语句格式:结构变量名结构名元素值,元素值结构变量名结构名NDUP(元素值,元素值)例:对例4-9中的TAB结构进行存储空间分配和预置,形成4个结构变量。DATA1TSTRUDATA2TSTRUFROMDATA3TSTRU,7FH,SEGLLLDATA4TSTRU5DUP(7890,11H)连续预置了5个相同的结构变量,每个结构变量的第一个元素和第二个元素为7890和11H,(3)结构使用伪指令语句格式:结构变量名字段变量DATA1.DA1=FORM功能:给出了不同结构变量名的
11、数据结构中的变量元素值设当前数据段基址为1000H,结构变量DATA1的偏移地址为100H,则例4.10中的4个结构变量在存储器中的地址分配如图4-3所示。经过预置的结构变量,具有三属性:段属性、偏移地址属性、类型属性BYTEWORDDWORD,8、分组伪指令语句格式:组名GROUP段1,段2,功能:将段1、段2等逻辑段放在同一个64KB的物理段内,并给它起一个新的名字。,9、其它伪指令语句(l)外部伪指令语句格式:PUBLIC名称1,名称2,EXTRN名称1:类型,名称2:类型,功能:PUBLIC定义全局标识符,名称在本模块中定义的EXTRN指出外部标识符,名称为在其他模块中用PUBLIC定
12、义的类型:BYTEWORDNEARFAR常数为ABS,(2)对准伪指令语句格式:EVEN;下一个语句的地址调整为偶地址(3)条件汇编伪指令语句一般格式是:IF;如果条件成立ELSE;否则ENDIF;结束条件汇编语句,IF有多种形式:IF操作数IFE操作数IFDEF标号或变量IFNDEF标号或变量IFBIFNBIFIDN,IFDIF,IF1IF2,4.4汇编语言中的表达式表达式-运算对象和运算符组成。汇编语言中有类运算符,即:算术运算符;逻辑运算符;关系运算符;分析运算符;修改属性运算符;其它运算符。,、算术运算符算术运算符有:加()、减()、乘(*)、除()、取模运算(MOD)、左移(SHL)
13、和右移(SHR)。取模运算是取两数相除的余数,对象必须为正整数。例如:92MOD16结果为12(相当于取低4位的值)97HMOD20H结果为23(相当于取低5位的值)33HMOD7结果为2,2、逻辑运算符逻辑运算符有:与(AND)、或(OR)、非(NOT)和异或(XOR)例如:MOVAL,NOT0AAH;含有表达式NOT0AAHMOVBL,23HAND0FH;含有表达式23HAND0FH汇编时,汇编程序对表达式进行计算,汇编后相应的指令变成:MOVAL,055HMOVBL,03H,3、关系运算符关系运算符有:相等EQ、不等NE、小于LT、大于GT、小于或等于LE、大于或等于。4、分析运算符分析
14、运算符有:OFFSET、SEG、TYPE、LENGTH、SIZE(1)OFFSET格式:OFFSET变量或标号;取偏移地址例如:MOVSI,OFFSETLAB1,(2)SEG格式:SEG变量或标号;取段基址(3)TYPE格式:TYPE变量或标号;返回类型和距离表4-1TYPE运算符返回值,(4)LENGTH格式:LENGTH变量返回变量的个数,只有当变量中使用DUP时,才返回个数,否则为1例如:MOVAL,LENGTHXX2(5)SIZE格式:SIZE变量;返回变量所包含的总字节数例如:MOVAX,SIZEXX1,5、修改属性运算符(综合运算符)修改属性运算符有:段操作符、PTR、THIS、H
15、IGH、LOW、SHORT(1)段操作符格式:段前缀:变量或地址表达式(2)PTR格式:类型PTR变量距离PTR标号;将左边赋给右边例如:MOVBYTEPTRBX,10HMOVWORDPTRBX,10HJMPFARPTRLL1,(3)THIS格式:变量EQUTHIS类型;将右边赋给左边标号EQUTHIS距离例如:DATA1EQUTHISBYTETABLEDW200DUP(?)又如:LL1EQUTHISFARMOVAX,100,给MOVAX,100前的标号LL1修改距离为FAR,(4)SHORT格式:SHORT标号功能:指出转移类指令,目的地址范围在-128127间(5)HIGH和LOW它们称为
16、字节分离运算符格式:HIGH变量或标号;分别分离高低字节部分LOW变量或标号例如:MOVAH,HIGHBB1,4.5指令语句指令语句的格式:标号:前缀指令助记符操作数;(注释)(1)立即寻址和直接寻址的表示形式BB1EQU1234HMOVAX,BB1MOVCX,BB1(2)基址寄存器加变址寄存器寻址的表示形式MOVAX,BXSIMOVAX,BX+SI,(3)相对寄存器寻址的表示形式MYDATDB100DUP(?)MOVAX,MYDATBXMOVAX,MYDAT+BXMOVCX,MYDATBXSIMOVCX,MYDAT+BX+SI,4.6宏指令语句及其使用1、宏定义宏定义格式:宏指令名MACRO
17、形式参数1,形式参数2宏体;程序代码ENDM2、宏调用宏调用格式:宏指令名实际参数1,实际参数23、宏展开,例4-24无形式参数的宏定义、宏调用及宏展开宏定义:PUSHABMACROPUSHAXPUSHBXENDM宏调用:PUSHAB宏展开:+PUSHAX+PUSHBX,例4-25带形式参数的宏定义、宏调用及宏展开宏定义:LDSFMACROPR,VAR,N,REG,CCMOVPR,VARMOVAX,PRMOVCL,NS&CCREG,CLENDM宏调用1:LDSFSI,WVAR1,4,AX,AR宏调用2:LDSFDI,WVAR2,3,BX,AL宏展开1:+MOVSI,WVAR1+MOVAX,SI
18、+MOVCL,4+SARAX,CL宏展开2:+MOVDI,WVAR2+MOVAX,DI+MOVCL,3+SALBX,CL,4、宏嵌套(1)宏定义中使用宏调用例4-26设在程序的数据段已经定义了变量X,Y,Z,试计算X+YZ,并要求保护所有使用的寄存器。宏定义:DBFMACROP,QMOVBX,PMOVAX,QADDAX,BXENDMDBFSMACROX1,X2,X3PUSHAX,PUSHBXDBFX1,X2MOVX3,AXPOPBXPOPAXENDM宏调用:DBFSX,Y,Z宏展开:+PUSHAX+PUSHBX+MOVBX,X+MOVAX,Y+ADDAX,BX+MOVZ,AX+POPBX+PO
19、PAX,(2)宏定义中包含宏定义例4-27设在程序的数据段已经定义了变量X,Y,Z,试共用一个宏定义,计算X+YZ、X-YZ、XANDYZ,并要求保护所有使用的寄存器。宏定义:DEFMMACROMNAME,OPENMNAMEMACROC1,C2,C3PUSHAXMOVAX,C1OPENAX,C2MOVC3,AXPOPAXENDMENDM,宏调用定义加法:DEFMADDIT,ADD宏调用定义减法:DEFMSUBT,SUB宏调用实现X+YZ:ADDITX,Y,Z宏展开:+PUSHAX+MOVAX,X+ADDAX,Y+MOVZ,AX+POPAX,宏调用实现X-YZSUBTX,Y,Z宏展开:+PUSH
20、AX+MOVAX,X+SUBAX,Y+MOVZ,AX+POPAX,5、宏定义中的标号与变量定义局部标号的格式:LOCAL参数1、参数2、参数n功能:放在宏体第一行,参数为宏体中用到的标号和变量局部标号或变量定义后,宏展开时程序中出现的各标号或变量依次用?0000,?0001,?0002,?0003代替,6、其它宏指令语句(1)取消宏指令语句格式:PURGE宏指令名1,宏指令名2宏指令名n功能:取消宏指令名,以后可重新定义(2)重复执行宏指令语句格式:REPT表达式宏体ENDM功能:连续重复完成相同的操作,次数为表达式所给的值,7、宏指令与子程序的区别主要区别在以下几个方面:1)宏指令调用比子程
21、序调用执行速度快:子程序调用需要入栈和出栈2)过程调用使用CALL语句实现,在CPU执行时进行处理,而宏指令调用由宏汇编软件MASM中的宏处理程序来处理。,7、宏指令与子程序的区别3)子程序比宏指令节省内存空间:过程调用的子程序与主程序分开独立存在,经汇编后存储器中只占有一个子程序段的空间,主程序转入此处运行,因此目标代码长度短,节省空间而宏调用在汇编过程中展开,宏调用多少次,就插入多少次宏体,因此目标代码长,占内存空间多。,7、宏指令与子程序的区别4)宏指令比子程序灵活:子程序一般完成某一个功能,仅入口参数可以改变,而宏指令可以带形式参数,调用时可以用实际参数取代,使不同的调用完成不同的操作
22、。,4.7DOS系统功能调用DOS功能调用表INT21H1、常用的DOS软中断(1)程序结束软中断1)INT20H调用格式举例:INT20H功能:终止当前进程,关闭所有打开的文件,清除磁盘缓冲区,返回控制台的命令接收状态,不需要任何的入口参数,放在程序之后,2)INT21H该软中断又有三种情况:无返回程序结束、程序结束并驻留和带返回程序结束。无返回程序结束的调用格式:MOVAH,0INT21H,程序退出,需入口参数AH=0(调用功能号),程序结束并驻留的调用格式举例:MOVAH,31HMOVAL,1MOVDX,400HINT21H带返回程序结束的调用格式举例:MOVAH,4CHMOVAL,1I
23、NT21H,AH为功能号,AL返回号,DX保留从程序段前缀开始的内存长度程序退出,并返回代码为1,同时驻留内存,保留从程序段前缀开始的16KB内存。,AH为功能号,AL返回号程序退出,并返回代码为1,3)INT27H调用格式举例:MOVDX,XXINT27H,程序退出,DX保留从程序段前缀开始的内存长度,作为系统的一个组成部分,不被覆盖!,(2)磁盘扇区读与写调用格式举例:MOVAL,0MOVCX,4MOVDX,4MOVBX,3000HINT25H,AL读写驱动器号CX读写扇区数DX起始逻辑扇区号BX读写内存的缓冲区首地址,表4-2常用的DOS软中断,2、DOS系统功能调用DOS系统功能可分为
24、三个方面:设备管理、文件管理和目录管理设备管理包括:键盘输入、显示输出、设置磁盘缓冲器、选择当前盘等功能调用;文件管理包括:建立文件、打开文件、读写文件、删除文件等功能调用;目录管理包括:查找目录项、更改目录项、建立子目录、删除子目录等功能调用。,(1)显示功能调用1)单字符显示调用格式举例:MOVDL,*MOVAH,2INT21H2)字符串显示调用格式举例:在屏幕上显示HOWAREYOU?字符串,2号功能调用,显示期间检测Ctrl+Break6号功能调用,显示期间不检测Ctrl+Break,DAT1DBHOWAREYOU?,CR,LF,START:MOVAX,DATAMOVDS,AXMOVDX,OFFSETDAT1MOVAH,9INT21H,1)单字符键盘输入调用格式举例:从键盘输入字符并显示MOVAH,1INT21H2)字符串键盘输入调用格式举例:从键盘输入一个字符串,将输入的字符数送CL寄存器,并将指针指向字符串的第一个字符。MOVDX,OFFSETBUFFMOVAH,0AHINT21H,