汇编语言语法和DOS功能调用_第1页
汇编语言语法和DOS功能调用_第2页
汇编语言语法和DOS功能调用_第3页
汇编语言语法和DOS功能调用_第4页
汇编语言语法和DOS功能调用_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

第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_DATA

START:MOVAX,MY_DATA;

DS初始化为MY_DATA

MOVDS,AX

MOVAL,2;置循环初始值

LEABX,BUFF

LLP:MOV[BX],AL;循环体INCALINCALCMPAL,100;循环控制JNZLLP

INT20H;返回DOSMY_CODEENDS;代码段结束

ENDSTART;整个程序结束汇编语言程序的格式可以归结为以下几点:(1)段的结构

段名1SEGMENT段名nSEGMENT

语句块语句块段名1

ENDS段名n

ENDS段名2SEGMENTEND标号

语句块段名2

ENDS┋

(2)语句的结构3种基本语句类型:

指令语句

伪指令语句

宏指令语句语句一般有4个部分组成,即:标号或名字

操作码

操作数;注释标号或名字:

这是一个任选部分,在语句之首4.2汇编语言中的基本数据1、标识符标识符--由程序员自由建立起来的,有特定意义的字符序列。标识符的组成规则如下:①必须由字母、数字(0,…,9)及特殊符号(?,·

,@,-,$)组成,且必须以字母打头。②字符总数限制在31个以内。③不能使用属于系统专用保留字(保留的字)。4.2汇编语言中的基本数据2、常数语句中出现的那些固定值,除了自身的值以外,没有其它任何属性。常数分为两类(1)数值常数:后缀B,Q,D或不用,H(2)字符串常数:不超过255个如:D7S43、变量存放在存储器单元中的操作数,它的值是可以改变的,在程序中出现的是存储器单元地址的符号,即与某一数据项第一字节相对应的标识符。变量的3个属性:①段地址:变量所在段的段地址;②偏移地址:变量所在段内的偏移地址;③类型:所定义的每个变量所占据的字节数。4、标号可执行指令语句地址的符号表示,即用标识符来表示地址。标号的3个属性:①段地址:与标号对应的指令首字节所在的段地址。②偏移地址:与标号对应的指令首字节所在的偏移地址。③类型:标号的类型属性有两种:NEAR和FAR类型。4.3伪指令语句伪指令语句可分为以下几种类型:①数据定义伪指令语句②标识符赋值与解除伪指令语句③段定义伪指令语句④过程定义伪指令语句⑤程序开始与结束伪指令语句⑥方式定义伪指令语句⑦结构定义伪指令语句⑧分组伪指令语句⑨其它伪指令语句1、数据定义伪指令语句五条:DB、DW、DD、DQ和DT,分别用来定义字节、字、双字、8字节和10字节。指令格式:

变量名助记符操作数1,操作数2,……操作数n

;注释

变量名助记符nDUP(操作数1,操作数2,……操作数n)

;注释例4-2操作数是常数、表达式、字符串数据的定义

DATA1DB15H,25H DATA2DW9988H,56HDATA3DD2*40H,0AABBHDATA4DB‘HELLO’15H25H88H99H56H00H80H00H00H00HBBHAAH00H00H48H45H4CH4CH4FHDATA1DATA2DATA3DATA4例4-3操作数用“?”定义不确定值的变量,用DUP来定义重复变量,不确定值的变量一般用作保留存储空间,以便存放运算结果。

DATA1DB?

DATA2DW0D55H,?

DATA3DB5DUP(0)

DATA4DW10DUP(?)

DATA5DB4DUP(1,2DUP(20))图4-2例4-3的汇编结果?55H0DH00H00H00H00H00H??┇┇??01H14H14HDATA1DATA2DATA3DATA4DATA5重复4次,共12个字节共20个字节??2、标识符赋值与解除伪指令语句共有4条:等值伪指令语句EQU

等号伪指令语句“=”

解除伪指令语句PURGE

别名定义伪指令语句LABEL(1)等值伪指令EQU语句指令格式:标识符EQU操作数

例如:DATA

EQU100DATA1EQU

DATA+2CIEQUADD(2)等号伪指令语句“=”指令格式:标识符=操作数例如:DATA=100DATA1=DATA+10SOURCE=BX+SIMOVAX,[SOURCE]SOURCE=BXMOVCX,[SOURCE]

(3)解除伪指令语句PURGE指令格式:PURGE标识符1,标识符2,…标识符n功能:用该指令解除标识符,以后可用EQU重新定义(4)别名定义伪指令语句格式:别名LABEL类型属性LABEL,伪指令助记符,不可缺省。功能:给下一个变量或标号取另一个名字,重新定义类型,灵活

3、段定义伪指令语句(1)段结构定义伪指令语句SEGMENT…ENDS

指令格式:段名SEGMENT定位类型组合类型‘分类名’

逻辑段内容段名ENDS

功能:将一个逻辑段的内容定义成一个整体。参数:4种定位类型:PARA、BYTE、WORD和PAGE6种组合类型:NONE、PUBLIC、COMMON、AT、STACK和MEMORY

类别名:可省略,不超过40个字符,将所有分类名相同的逻辑段组成一个段组。(2)段分配伪指令语句指令格式:ASSUMECS:段名,DS:段名,SS:段名,ES:段名功能:定义当前有效的4个逻辑段,指明段和段寄存器的关系,并把代码段的段基址装入CSASSUMEES:NOTHING取消已经由ASSUME指定的段寄存器4、过程(子程序)定义伪指令语句指令格式:过程名PROC

属性过程内容

RET

过程名ENDP功能:定义一个在主程序中可以用CALL指令调用的过程。

CALL过程名5、程序开始与结束伪指令语句共有4条伪指令语句:NAME、TITLE、ORG和END。(1)目标模块命名伪指令语句格式:NAME程序名;定义一个程序名,程序每一页开头输出

TITLE文本名;功能:为源程序目标模块赋一个程序名。(2)定位伪指令语句格式:ORG

表达式功能:下一条语句的起始偏移位置ORG$+6(3)程序结束伪指令语句格式:END

标号名(起始地址)6、方式定义伪指令语句汇编语言有两种操作方式:8086和80386格式:.8086默认的.386使用32位寄存器必须加功能:定义汇编程序的操作方式7、结构定义伪指令语句有三条语句:结构定义伪指令,结构存储分配和预置伪指令及 结构使用伪指令。(1)结构定义伪指令语句格式:结构名STRUC

数据变量序列;为DB、DW等;结构名ENDS例4-9定义一个数据表格TAB的结构

TSTRUSTRUCDA1DB‘SXYZ’DA2DW?DA3DWSEGLP1DA4DW2DUP(3)DA5DW5678H,1234H

TSTRUENDS只定义,汇编时不产生目标代码,不分配空间

字符串、简单变量、多重变量(2)结构存储分配和预置伪指令语句格式:结构变量名结构名<元素值,元素值…>结构变量名结构名

NDUP(<元素值,元素值…>)例:对例4-9中的TAB结构进行存储空间分配和预置,形成4个结构变量。

DATA1TSTRU<>

DATA2

TSTRU<’FROM’>DATA3

TSTRU<,7FH,SEGLLL>

DATA4TSTRU5DUP(<‘7890’,11H>)

连续预置了5个相同的结构变量,每个结构变量的第一个元素和第二个元素为‘7890’和11H(3)结构使用伪指令语句

格式:结构变量名·字段变量DATA1.DA1=‘FORM’功能:给出了不同结构变量名的数据结构中的变量元素值设当前数据段基址为1000H,结构变量DATA1的偏移地址为100H,则例4.10中的4个结构变量在存储器中的地址分配如图4-3所示。经过预置的结构变量,具有三属性:段属性、偏移地址属性、类型属性BYTEWORDDWORD8、分组伪指令语句格式:组名GROUP段1,段2,……功能:将段1、段2等逻辑段放在同一个64KB的物理段内,并给它起一个新的名字。9、其它伪指令语句(l)外部伪指令语句格式:PUBLIC名称1,名称2,…

EXTRN名称1:类型,名称2:类型,…

功能:PUBLIC定义全局标识符,名称在本模块中定义的

EXTRN指出外部标识符,名称为在其他模块中用PUBLIC定义的类型:BYTEWORDNEARFAR常数为ABS(2)对准伪指令语句格式:EVEN;下一个语句的地址调整为偶地址

(3)条件汇编伪指令语句一般格式是:

IF;如果条件成立

[ELSE];[否则]

ENDIF;结束条件汇编语句

IF有多种形式:IF操作数IFE操作数IFDEF标号或变量IFNDEF标号或变量IFB<变量>IFNB<变量>IFIDN<操作数l>,<操作数2>IFDIF<操作数1>,<操作数2>IF1IF2

4.4汇编语言中的表达式表达式运算对象和运算符组成。汇编语言中有6类运算符,即:①算术运算符;②逻辑运算符;③关系运算符;④分析运算符;⑤修改属性运算符;⑥其它运算符。1、算术运算符算术运算符有:加(+)、减(-)、乘(*)、除(/)、取模运算(MOD)、左移(SHL)和右移(SHR)。取模运算是取两数相除的余数,对象必须为正整数。例如:

92MOD16结果为12(相当于取低4位的值)

97HMOD20H结果为23(相当于取低5位的值)

33HMOD7结果为22、逻辑运算符逻辑运算符有:与(AND)、或(OR)、非(NOT)和异或 (XOR)例如:

MOVAL,NOT0AAH;含有表达式NOT0AAHMOVBL,23HAND0FH;含有表达式23HAND0FH汇编时,汇编程序对表达式进行计算,汇编后相应的指令变成:MOVAL,055HMOVBL,03H

3、关系运算符关系运算符有:相等EQ、不等NE、小于LT、大于GT、小于 或等于LE、大于或等于。

4、分析运算符分析运算符有:OFFSET、SEG、TYPE、LENGTH、SIZE(1)OFFSET

格式:OFFSET变量或标号;取偏移地址例如:MOVSI,OFFSETLAB1

(2)SEG

格式:SEG变量或标号;取段基址(3)TYPE

格式:TYPE变量或标号;返回类型和距离表4-1TYPE运算符返回值变量标号类型DBDWDDDQDTNEARFAR返回值124810-1-2(4)LENGTH格式:LENGTH变量返回变量的个数,只有当变量中使用DUP时,才返回个数,否则为1例如:MOVAL,LENGTHXX2(5)SIZE格式:SIZE变量;返回变量所包含的总字节数例如:MOVAX,SIZEXX1

5、修改属性运算符(综合运算符)修改属性运算符有:段操作符、PTR、THIS、HIGH、LOW、SHORT

(1)段操作符格式:段前缀:变量或地址表达式(2)PTR

格式:类型PTR变量距离PTR标号;将左边赋给右边例如:MOVBYTE

PTR[BX],10HMOVWORD

PTR[BX],10HJMPFAR

PTRLL1(3)THIS格式:变量EQUTHIS

类型;将右边赋给左边标号EQUTHIS

距离例如:

DATA1EQUTHISBYTETABLEDW200DUP(?)又如:

LL1EQUTHISFARMOVAX,100DATA1的偏移地址值与TABLE相同,但DATA1为字节,TABLE为字!给MOVAX,100前的标号LL1修改距离为FAR(4)SHORT

格式:SHORT标号功能:指出转移类指令,目的地址范围在-128—127间(5)HIGH和LOW它们称为字节分离运算符格式:HIGH变量或标号;分别分离高低字节部分

LOW变量或标号例如:MOVAH,HIGHBB14.5指令语句指令语句的格式:标号:前缀指令助记符操作数;(注释)(1)立即寻址和直接寻址的表示形式BB1EQU1234HMOVAX,BB1MOVCX,[BB1](2)基址寄存器加变址寄存器寻址的表示形式

MOVAX,[BX][SI]MOVAX,[BX+SI]

(3)相对寄存器寻址的表示形式MYDATDB100DUP(?)MOVAX,MYDAT[BX]MOVAX,[MYDAT+BX]

MOVCX,MYDAT[BX][SI]MOVCX,[MYDAT+BX+SI]

4.6宏指令语句及其使用1、宏定义宏定义格式:宏指令名MACRO

形式参数1,形式参数2…

宏体;程序代码

ENDM2、宏调用宏调用格式:宏指令名实际参数1,实际参数2…3、宏展开

例4-24无形式参数的宏定义、宏调用及宏展开宏定义:PUSHABMACROPUSHAXPUSHBXENDM宏调用:PUSHAB宏展开:+PUSHAX+PUSHBX例4-25带形式参数的宏定义、宏调用及宏展开宏定义:LDSF

MACROPR,VAR,N,REG,CCMOVPR,VARMOVAX,[PR]MOVCL,NS&CCREG,CLENDM宏调用1:LDSFSI,WVAR1,4,AX,AR宏调用2:

LDSFDI,WVAR2,3,BX,AL宏展开1:+MOVSI,WVAR1+MOVAX,[SI]+MOVCL,4+SARAX,CL宏展开2:+MOVDI,WVAR2+MOVAX,[DI]+MOVCL,3+SALBX,CL4、宏嵌套(1)宏定义中使用宏调用例4-26设在程序的数据段已经定义了变量X,Y,Z,试计算X+Y→Z,并要求保护所有使用的寄存器。宏定义:DBFMACROP,QMOVBX,PMOVAX,QADDAX,BXENDMDBFSMACROX1,X2,X3PUSHAX

PUSHBX

DBFX1,X2MOVX3,AXPOPBXPOPAXENDM宏调用:DBFSX,Y,Z宏展开:+PUSHAX+PUSHBX +MOVBX,X+MOVAX,Y+ADDAX,BX+MOVZ,AX+POPBX+POPAX(2)宏定义中包含宏定义例4-27设在程序的数据段已经定义了变量X,Y,Z,试共用一个宏定义,计算X+Y→Z、X-Y→Z、XANDY→Z,并要求保护所有使用的寄存器。宏定义:DEFMMACROMNAME,OPENMNAMEMACROC1,C2,C3PUSHAXMOVAX,C1OPENAX,C2MOVC3,AXPOPAXENDMENDM宏调用定义加法:

DEFMADDIT,ADD宏调用定义减法:

DEFMSUBT,SUB宏调用实现X+Y→Z:

ADDITX,Y,Z宏展开:+PUSHAX+MOVAX,X+ADDAX,Y+MOVZ,AX+POPAX宏调用实现X-Y→ZSUBTX,Y,Z宏展开:+PUSHAX+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)宏指令调用比子程序调用执行速度快:子程序调用需要入栈和出栈

2)过程调用使用CALL语句实现,在CPU执行时进行处理,而宏指令调用由宏汇编软件MASM中的宏处理程序来处理。

7、宏指令与子程序的区别3)子程序比宏指令节省内存空间:过程调用的子程序与主程序分开独立存在,经汇编后存储器中只占有一个子程序段的空间,主程序转入此处运行,因此目标代码长度短,节省空间

而宏调用在汇编过程中展开,宏调用多少次,就插入多少次宏体,因此目标代码长,占内存空间多。7、宏指令与子程序的区别4)宏指令比子程序灵活:子程序一般完成某一个功能,仅入口参数可以改变,而宏指令可以带形式参数,调用时可以用实际参数取代,使不同的调用完成不同的操作。4.7DOS系统功能调用DOS功能调用表INT21H1、常用的DOS软中断(1)程序结束软中断1)INT20H调用格式举例:INT20H功能:终止当前进程,关闭所有打开的文件,清除磁盘缓冲区,返回控制台的命令接收状态,不需要任何的入口参数,放在程序之后2)INT21H该软中断又有三种情况:无返回程序结束、程序结束并驻留和带 返回程序结束。无返回程序结束的调用格式:

MOVAH,0INT21H程序退出,需入口参数AH=0(调用功能号)程序结束并驻留的调用格式举例:MOVAH,31HMOVAL,1MOVDX,400HINT21H带返回程序结束的调用格式举例:MOVAH,4CHMOVAL,1INT21HAH为功能号,AL返回号,DX保留从程序段前缀开始的内存长度程序退出,并返回代码为1,同时驻留内存,保留从程序段前缀开始的16KB内存。AH为功能号,AL返回号程序退出,并返回代码为13)INT27H调用格式举例:MOVDX,XXINT27H程序退出,DX

温馨提示

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

最新文档

评论

0/150

提交评论