汇编语言程序格式_第1页
汇编语言程序格式_第2页
汇编语言程序格式_第3页
汇编语言程序格式_第4页
汇编语言程序格式_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

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

文档简介

关于汇编语言程序格式第1页,共80页,2022年,5月20日,5点16分,星期五主要内容汇编语句的格式、源程序结构、汇编语言程序开发方法汇编语言中的数值表达式和地址表达式常用伪指令及操作符功能、以及参数的表达、变量的定义,还有变量和标号的属性第2页,共80页,2022年,5月20日,5点16分,星期五教学要求掌握:(1)汇编语言源程序格式(2)数据定义语句(3)段定义语句(4)伪指令语句(5)符号定义语句了解:汇编程序的开发过程,一些不常用的伪指令,如:地址计数器$、指定起始位置伪指令ORG、EVEN伪指令等。第3页,共80页,2022年,5月20日,5点16分,星期五4.1汇编语言程序开发

汇编语言程序的开发必须经过编写源程序、编译、连接和运行3个主要步骤,而编写汇编语言源程序要遵守汇编语言的语句格式和程序格式。第4页,共80页,2022年,5月20日,5点16分,星期五4.1.1汇编语言语句格式用汇编语言编写的源程序是由许多语句(又称汇编指令)组成的。每个语句由1~4个部分组成,它们有两种格式:执行性语句——由硬指令构成的语句,它通常对应一条机器指令:

[标号:]指令助记符[操作数,操作数][;注释]说明性语句——由伪指令构成的语句,它通常指示汇编程序如何汇编源程序

[名字]伪指令助记符[参数,参数,…][;注释]

其中,用方括号括起来的部分,可以有也可以没有。每部分之间用空格(至少一个)分开,一行最多可有132个字符。第5页,共80页,2022年,5月20日,5点16分,星期五标识符

标号和名字是符合汇编语法的用户自定义的标识符。标识符是用来标识指令或某一存储单元地址,每个标识符的定义是唯一的。可由下列字符组成:字母:A~Z,a~z;数字:0~9;特殊字符:?、·、@、_、$。

数字不能作为标识符的第一个字符,而圆点仅能用做第一个字符。标识符最长为31个字符。当标识符后跟冒号时,表示是标号,它代表该行指令的起始地址;当标识符后不带冒号时,表示变量;伪指令前的标识符不加冒号。

第6页,共80页,2022年,5月20日,5点16分,星期五指令助记符指令助记符表示不同操作的指令,可以是8088的指令助记符,也可以是伪指令。第7页,共80页,2022年,5月20日,5点16分,星期五操作数

操作数是指令执行的对象。依指令的要求,可能有一个、两个或者没有。如:RET;无操作数COUNT:INCCX;一个操作数如果是伪指令,则可能有多个操作数(参数)。如:COSTDB3,4,5,6,7;5个操作数MOVAX,[BP+4] ;第二个操作数为表达式第8页,共80页,2022年,5月20日,5点16分,星期五注释

该项可有可无,是为源程序所加的注释,用于提高程序的可读性。使用分号区分为注释语句。

第9页,共80页,2022年,5月20日,5点16分,星期五4.1.2汇编语言程序格式

程序由一条一条语句(指令)构成,每条语句占一行。汇编语言程序中,语句可以分为3种:指令性语句(指令语句,在第3章已经介绍)指示性语句(伪指令语句,在本章4.3节介绍)宏指令语句(或宏调用语句,在第6章介绍)第10页,共80页,2022年,5月20日,5点16分,星期五汇编语言源程序的组成原则(1)完整的汇编语言源程序由段组成。(2)需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点。(3)所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内。(4)通常,程序还需要一个堆栈段。第11页,共80页,2022年,5月20日,5点16分,星期五完整段定义格式DATAREASEGMENT;定义数据段;数据定义语句DATAREAENDS;**************************PROGNAMSEGMENT;定义代码段;MAINPROCFAR ;主程序ASSUMECS:PROGNAM,DS:DATAREASTART: ;程序起始执行地址

;为程序返回DOS设置堆栈值

PUSHDS ;入栈保存原DS段址

SUBAX,AX ;设置偏移地址为0PUSHAX ;入栈保存偏移地址;置DS寄存器为当前数据段

MOVAX,DATAREA ;DATAREA段地址

MOVDS,AX ;存入DS寄存器;主程序部分

RET ;返回DOSMAINENDP ;主程序结束;SUB1PROCNEAR;定义子程序;子程序部分SUB1ENDP ;子程序结束;PROGNAMENDS;代码段结束

;***********************************ENDSTART;汇编结束第12页,共80页,2022年,5月20日,5点16分,星期五汇编语言源程序结构特点(1)汇编语言程序通常由若干段组成,段由伪指令SEGMENT与ENDS定义,各段顺序任意,段的数目按需要确定,原则上不受限制。(2)段由若干语句组成,语句以指令为主体而构成。一条语句写在一行上,书写时语句的各部分应尽量对齐。(3)汇编语言程序中至少要有一个启动标号,作为程序开始执行时目标代码的入口地址。启动标号常用START、BEGIN、MAIN等命名。(4)为增加程序的可读性,可在汇编语言语句“;”后加上注释。第13页,共80页,2022年,5月20日,5点16分,星期五简化段定义格式.MODELSMALL ;定义存储器模型.STACK100H ;定义堆栈段.DATA ;定义数据段;数据定义语句.CODE ;定义代码段MAINPROCFARSTART:MOVAX,@DATA ;数据段地址

MOVDS,AX ;存入DS寄存器;主程序部分

MOVAX,4C00HINT21H ;返回DOSMAINENDP ;主程序结束

ENDSTART ;汇编结束第14页,共80页,2022年,5月20日,5点16分,星期五汇编语言程序开发过程

在计算机上建立并运行汇编语言程序的基本步骤是:编辑程序、汇编程序、连接程序、运行程序。第15页,共80页,2022年,5月20日,5点16分,星期五汇编语言程序上机过程第16页,共80页,2022年,5月20日,5点16分,星期五4.2汇编语言的表达式

汇编语句中的数据(常数、变量、标号、地址)都可以用表达式给出,MASM汇编语言允许使用的表达式有两种:数值表达式和地址表达式。表达式的运算在汇编阶段由汇编程序进行运算并将结果当做操作数。第17页,共80页,2022年,5月20日,5点16分,星期五4.2.1数值表达式数值表达式的常用运算符运算符类型运算符号及说明算术运算符+(正)、-(负)、+(加)、-(减)、*(乘)、/(除)、MOD(取余)、SHL(逻辑左移)、SHR(逻辑右移)逻辑运算符AND(与)、OR(或)、XOR(异或)、NOT(非)关系运算符EQ(相等)、NE(不相等)、GT(大于)、LT(小于)、GE(大于等于)、LE(小于等于)第18页,共80页,2022年,5月20日,5点16分,星期五常量

常量是指那些在将源程序翻译成目标程序期间已经有确定数值的量,直接写在汇编语言语句中,在程序的执行过程中,它不可能发生变化。常量主要用于伪指令语句中给变量赋初值,或者用做机器指令语句中的立即操作数,变址寻址和基址变址寻址中的位移量、比例因子等。

通常用二进制、八进制、十进制或十六进制来书写常量。当数字的第一个字符是A~F或a~f时,在字符前应添加一个数字0,以示和变量的区别,如10101011B、1234D、1234H、0abcdH、'AB'等都是常量。第19页,共80页,2022年,5月20日,5点16分,星期五算术运算符和表达式

算术运算符如前表中所示。这些运算符和常量、括号可组成数值表达式

如120HLT100H+3,21HLE21H等。该表达式的计算结果规定如下:若关系不成立,则该数值表达式的计算结果为0;否则,其结果为全1。第20页,共80页,2022年,5月20日,5点16分,星期五【例】指令中的算术运算MOVAH,2+6MOVCL,33/5MOVDL,23MOD5MOVBL,00001010BSHL4MOVAH,0110BSHR5等效于:MOVAH,08HMOVCL,06HMOVDL,03HMOVBL,10100000BMOVAH,0000B

注意:算术运算的运算对象和运算结果都必须是整数,除法运算的结果只取商,模除运算的结果只取余数。第21页,共80页,2022年,5月20日,5点16分,星期五逻辑运算符和表达式

逻辑运算符如前表中所示。这些逻辑运算符和常量、括号也可组成数值表达式。

如47HAND0FH,NOT56H。第22页,共80页,2022年,5月20日,5点16分,星期五【例】指令中的逻辑运算MOVAL,NOT00110011BMOVBL,11110000BAND10111101BMOVAH,10100000BOR00000101BMOVBH,10101011BXOR10100100B

等效于:MOVAL,11001100BMOVBL,10110000BMOVAH,10100101BMOVBH,00001111B注意:以上语句可以用逻辑运算指令语句来实现,但二者的区别在于:(1)逻辑表达式不影响标志位,逻辑运算指令影响标志位。(2)表达式中的逻辑运算由汇编程序在汇编阶段完成,逻辑运算指令由CPU在程序执行阶段完成。第23页,共80页,2022年,5月20日,5点16分,星期五4.2.2地址表达式

地址表达式是计算存储单元地址的表达式,它可由标号、变量名和由括号括起来的基址或变址寄存器组成。地址表达式的常用运算符运算符类型运算符号及说明分析运算符HIGH(高字节)、LOW(低字节)、SEG(段地址)、OFFSET(偏移量)、TYPE(标识符类型)、LENGTH(变量长度)、SIZE(变量容量)、WIDTH(记录/记录字段宽度)、MASK(记录/记录字段的屏蔽位)属性运算符PTR(符号地址)、段操作符、SHORT(短转向地址)、THIS(指定类型)第24页,共80页,2022年,5月20日,5点16分,星期五标号

标号是指在代码段内定义和使用的指令地址。标号是可有可无的,如果有标号,必须和后面的操作项以冒号分隔开来。标号常作为转移指令的操作数,确定程序转移的目标地址。标号的3个属性:(1)段属性(SEG)(2)偏移属性(OFFSET)(3)距离属性(DISTANCE)第25页,共80页,2022年,5月20日,5点16分,星期五变量

变量在除代码段以外的其他段中被定义,用来定义存放在存储器单元中的数据。 经过定义的变量有3个属性:(1)段属性。定义变量所在段的起始地址(即段基址)。(2)偏移地址属性。表示变量所在的段内偏移地址。此值为一个16位无符号数,它代表从段的起始地址到定义变量的位置之间的字节数。(3)类型属性(TYPE)。表示变量占用存储单元的字节数,即所存放数据的长度。变量可分别被定义为8位(DB,1个字节)、16位(DW,2个字节)、32位(DD,4个字节)、64位(DQ,8个字节)和80位(DT,10个字节)数据。第26页,共80页,2022年,5月20日,5点16分,星期五分析运算符和表达式HIGH和LOW运算符。格式:HIGH/LOW表达式功能:选取表达式计算结果的高8位和低8位SEG运算符。格式:SEG变量或标号功能:计算变量或标号的段地址

如:MOVAX,SEGA;将变量A所在段的段地址值送AX

第27页,共80页,2022年,5月20日,5点16分,星期五分析运算符和表达式OFFSET运算符。格式:OFFSET变量或标号功能:计算变量或标号的段内偏移地址

如:MOVBX,OFFSETA;将变量A的偏移地址值送BXTYPE运算符。格式:TYPE变量或标号功能:计算变量或标号的类型值第28页,共80页,2022年,5月20日,5点16分,星期五分析运算符和表达式LENGTH运算符。格式:LENGTH变量功能:对于使用DUP定义的变量,计算分配给该变量的单元数,其他变量的LENGTH值为1。SIZE运算符。格式:SIZE变量功能:计算分配给该变量的字节数。第29页,共80页,2022年,5月20日,5点16分,星期五【例】指令中的TYPE运算符A1 DB 21H,42HA2 DW 3412HA3 DD ?ALOP: MOV AL,TYPE A1 MOV BL,TYPE A2 MOV AH,TYPE A3 MOV DL,TYPE ALOP等效于:ALOP: MOV AL,1 MOV BL,2 MOV AH,4 MOV DL,0FFH第30页,共80页,2022年,5月20日,5点16分,星期五【例】指令中的LENGTH运算符FEESDW100DUP(0)ARRAYDW1,2,3MOVCX,LENGTHFEESMOVBX,LENGTHARRAY等效于:MOVCX,100MOVBX,1第31页,共80页,2022年,5月20日,5点16分,星期五【例】指令中的SIZE运算符FEESDW100DUP(0)ARRAYDW1,2,3TABLEDB'ABCD'MOVCX,SIZEFEESMOVCX,SIZEARRAYMOVCX,SIZETABLE等效于:MOVCX,200MOVCX,2MOVCX,1

注意:当变量为DUP定义且DUP括号内为单项数据时,下列关系成立:

SIZE=LENGTH*TYPE第32页,共80页,2022年,5月20日,5点16分,星期五属性运算符和表达式属性运算符又称修改属性运算符或合成运算符。属性运算符在程序运行过程中暂时修改变量或标号的属性。在程序运行过程中,当需要修改变量或标号的属性(段属性、偏移地址属性和类型属性)时,可用属性运算符来实现。第33页,共80页,2022年,5月20日,5点16分,星期五PTR运算符格式:类型PTR表达式功能:用来修改变量或标号的类型属性。例如:F1DB15HF2DW3132HALPHA:MOVAX,WORDPTRF1BETA:MOVBL,BYTEPTRF2第34页,共80页,2022年,5月20日,5点16分,星期五段操作运算符段操作运算又称段超越前缀。段寄存器(CS,DS,ES和SS)后跟一个冒号,称为修改段属性运算符,表示后跟的操作数由指定的段寄存器提供段地址值。例如:MOVAX,ES:[BX];从ES中偏移地址为BX的地址中取出一个字送AXMOV BL,DS:[BP];从DS中偏移地址为BP的地址中取一个字节送BL第35页,共80页,2022年,5月20日,5点16分,星期五SHORT运算符SHORT为短转向地址说明运算符,它说明转移指令的目标地址与本指令之间的字节距离在-128~+127范围内,具有短程转移的属性。例如:LOOP1:JMPSHORTLOOP2LOOP2:MOVAX,BX表示标号LOOP1与目标标号LOOP2之间的距离小于127个字节。

第36页,共80页,2022年,5月20日,5点16分,星期五THIS运算符格式:变量/标号EQUTHIS类型功能:将变量或标号定义成指定的类型,但并不分配新的存储单元,其地址与跟在后面的变量的地址相同。例如:GAMAEQUTHISBYTESTARTEQUTHISFAR第37页,共80页,2022年,5月20日,5点16分,星期五运算符的优先级高级优先级运算符号低级1()、<>、[]、LENGTH、SIZE、WIDTH、MASK2段超越前缀运算符(:)、PTR、OFFSET、SEG、TYPE、THIS3HIGH、LOW4+、-(单目)5*、/、MOD、SHL、SHR6+、-(双目)7EQ、NE、LT、LE、GT、GE8NOT9AND10OR、XOR11SHORT第38页,共80页,2022年,5月20日,5点16分,星期五4.3伪指令语句汇编语言最主要的特点是用助记符代替机器指令的操作码,用符号代替操作数地址或操作数,这就是汇编语言中的机器指令语句。汇编语言程序中的语句可以由指令、伪指令和宏指令组成。伪指令和指令的区别是:每一条指令必须生成机器代码,然后在程序运行期间由CPU来执行其操作;而伪指令是在汇编期间由汇编程序执行的操作命令,除了数据定义及存储器分配伪指令分配存储器空间外,其他伪指令不生成目标码。第39页,共80页,2022年,5月20日,5点16分,星期五4.3.1数据定义伪指令数据定义及存储器分配伪指令的格式如下:[变量]助记符操作数[,…,操作数][;注释]数据定义及存储器分配伪指令格式中的“变量”是操作数的符号地址,它是可有可无的,它的作用与指令语句前的标号相同,区别是变量后面不加冒号。如果语句中有变量,那么汇编程序将操作数的第一个字节的偏移地址赋于这个变量。“注释”字段用来说明该伪指令的功能,它也不是必须有的。“助记符”字段说明所用伪指令的助记符。第40页,共80页,2022年,5月20日,5点16分,星期五DB伪指令DB(definebyte)伪指令用来定义字节,对其后的每个数据都存储在一个字节中。DB能定义十进制数、二进制数、十六进制数和ASCII字符,二进制数和十六进制数要分别用“B”和“H”表示,ASCII字符用单引号(‘)括起来。例如:COUNTER DB6 DB'A','D',0Dh,'$'TABLE DB1,3,5,7,9,11第41页,共80页,2022年,5月20日,5点16分,星期五DW伪指令DW(defineword)伪指令用来定义字,对其后的每个数据分配两个字节(1个字),数据的低8位存储在低字节地址中,高8位存储在高字节地址中。例如:Word1 DW89H,1909H,-1DW0abcdH,?,0第42页,共80页,2022年,5月20日,5点16分,星期五DD伪指令DD(definedoubleword)伪指令用来定义双字,对其后的每个数据分配4个字节(2个字)。该伪指令同样将数据转换为十六进制,并根据低地址存储低字节,高地址存储高字节的规则来存放数据。例如:DW1DD12345678H,?DW2DD0abcd1243H第43页,共80页,2022年,5月20日,5点16分,星期五DQ和DT伪指令DQ(definequadword)伪指令用来定义4字,即64位字长的数据,DQ之后的每个数据占用8个字节(4个字)。DT(definetenbytes)伪指令用来为压缩的BCD数据分配存储单元,它虽然可以分配10个字节(5个字),但最多只能输入18个数字,要注意的是,数据后面不需要加"H"。第44页,共80页,2022年,5月20日,5点16分,星期五DUP伪指令DUP(duplicate)伪指令可以按照给定的次数来复制某个(某些)操作数,用以避免多次输入同样一个数据。例如,把6个0FFH存入相继字节中,可以用下面两种方法,显然用DUP的方法更简便些。DATA1DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFHDATA2DB6DUP(0FFH)第45页,共80页,2022年,5月20日,5点16分,星期五DUP伪指令DUP操作一般用来保留数据区,如用数据定义伪指令“DB64DUP(?)”可为堆栈段保留64个字节单元。DUP还可以嵌套。例如:T1DB3DUP(0)T2DW2DUP(?)T3DB3DUP(1,2DUP(50H))第46页,共80页,2022年,5月20日,5点16分,星期五4.3.2符号定义伪指令汇编语言中所有的变量名、标号名、过程名、指令助记符、寄存器名等统称为“符号”。这些符号可以用符号定义伪指令来命名或重新命名。第47页,共80页,2022年,5月20日,5点16分,星期五等值语句EQU格式:符号EQU表达式功能:将表达式的值赋给EQU左边的符号。

EQU伪指令的使用可使汇编语言程序简单明了,便于程序调试和修改。第48页,共80页,2022年,5月20日,5点16分,星期五等值语句EQU(1)用符号名代表常量或表达式。当把一个常量或表达式定义成一个具有一定含义的符号名后,在程序中就可以用该符号名来代表该常量或表达式。例如:NUMBER EQU 100 ;给缓冲区的长度取一个符号名BUFF_LENEQU NUMBER+2CR EQU 13 ;给“回车”符的ASCII码定义一个符号名LF EQU 10;给“换行”符的ASCII码定义一个符号名BUFFER DB NUMBER,?,NUMBERDUP(?) ;用符号名来定义缓冲区

第49页,共80页,2022年,5月20日,5点16分,星期五等值语句EQU(2)用符号名代表字符串。用一个具有一定含义的符号名定义某一个较长的字符串,在随后的程序中就用该符号名。例如:MOREQU"GoodMorning!"在该定义之后,就可使用符号名GREETING来代表字符串"Howareyou!"。第50页,共80页,2022年,5月20日,5点16分,星期五等值语句EQU(3)用符号名代表关键字或指令助记符。例如:MOVEEQUMOV;给指令MOV取另一个符号名MOVECOUNTEREQUCX;给寄存器CX取一个叫“计数器”的符号名上面的定义只是给原来的助记符MOV和CX起了另一个别名,而原来助记符MOV和CX仍然可以使用,所以,可编写如下语句:MOVEAX,CX;相当于指令:MOVAX,CXMOVCOUNTER,BX;相当于指令:MOVCX,BX第51页,共80页,2022年,5月20日,5点16分,星期五等值语句EQU(4)用符号名定义存储单元的别名。可将一片存储单元定义为另一个数据类型的符号名,有关叙述参见前面的操作符THIS。例如:WORD1EQUTHISWORD ;给后面的字节存储单元取一个字属性的符号名BYTE1DB12h,21hFLAGDW1234HFLAG1EQUbyteptrFLAG ;给FLAG的低字节取一个字节属性的符号名FLAG2EQUbyteptrFLAG+1 ;给FLAG的高字节取一个字节属性的符号名有了上述定义后,可编写如下语句:MOVAX,WORD1;执行后,(AX)=2112HMOVBL,FLAG1;执行后,(BL)=34H第52页,共80页,2022年,5月20日,5点16分,星期五等值语句EQU

注意:等值语句在汇编时不产生任何目标代码,也不占用存储单元。但在同一个程序中,不能对经EQU语句定义的符号重新定义。第53页,共80页,2022年,5月20日,5点16分,星期五等号语句=格式:符号=表达式 等号语句与EQU语句有同样的功能,区别在于等号语句定义的符号允许重新定义,使用更加方便灵活。下列等号语句是有效的。COUNT=5COUNT=COUNT+100第54页,共80页,2022年,5月20日,5点16分,星期五LABEL伪指令符号名定义语句LABEL与前面的操作符THIS功能类似,用于定义一个指定的符号名,且该符号名的段地址和偏移量与下面紧跟存储单元的相应属性相同,但该符号的类型是新指定的。LABEL语句的一般格式如下:符号名LABEL类型

其中,常用的类型有BYTE、WORD、DWORD、NEAR和FAR等。第55页,共80页,2022年,5月20日,5点16分,星期五4.3.3段定义伪指令段定义伪指令指示汇编程序如何按段组织程序和使用存储器。在MASM5.0以上的汇编语言版本中,有完整段定义伪指令和简化段定义伪指令两种。第56页,共80页,2022年,5月20日,5点16分,星期五完整段定义段定义伪指令主要有SEGMENT/ENDSASSUME。第57页,共80页,2022年,5月20日,5点16分,星期五段的定义段名SEGMENT[定位类型][组合类型][类别名]本段语句序列

………段名ENDS本段语句序列第58页,共80页,2022年,5月20日,5点16分,星期五定位类型BYTE(字节):表示本段起始单元可从任一地址开始。WORD(字):表示本段从一个偶字节地址开始,即段起始单元地址的最后一位二进制数一定是0,即以0,2,4,6,8,A,C,E结尾。PARA(节):如果定位类型用户未选择,则默认为PARA。它表示本段从一个节的边界开始(一节为16字节)。所以段的起始地址一定能以16整除,最后4位二进制数一定是0,如09150H,0AB30H等。PAGE(页):表示本段从一个页的边界开始。一页为256字节,所以段的起始地址一定能以256整除。这样,段起始地址的最后8位二进制数一定为0(也即以00H结尾的地址)。第59页,共80页,2022年,5月20日,5点16分,星期五组合类型NONE。PUBLICCOMMONSTACKAT表达式MEMORY第60页,共80页,2022年,5月20日,5点16分,星期五类别名类别用于表示段的分类。类别名是由程序设计人员自己选定的由任何字符串组成的名字,但是它不能再作为程序中的标号、变量名或其他定义符号。在连接处理时,LINK程序把类别名相同的所有段存放在连续的存储区内(如没有指定组合类型PUBLIC、COMMON时,它们仍然是不同的段)。第61页,共80页,2022年,5月20日,5点16分,星期五【例】数据段的定义实例DATA1 SEGMENTWORD1 DW 1,9078H,?BYTE1 DB 21,'Hello' DD 12345678HDATA1 ENDS第62页,共80页,2022年,5月20日,5点16分,星期五【例】代码段的定义实例CODE1 SEGMENTMOV AX,DATA1 ;把数据段DATA1的段值送AXMOV DS,AX ;把AX的值送给DS,即DS存储数据段的段值MOV AX,4C00HINT 21H ;调用DOS功能,结束程序的运行CODE1 ENDS第63页,共80页,2022年,5月20日,5点16分,星期五段寄存器的说明语句在汇编语言源程序中可以定义多个段,每个段都要与一个段寄存器建立一种对应关系。建立这种对应关系的说明语句格式如下:ASSUME段寄存器名:段名[,段寄存器名:段名,……]

其中,段寄存器是CS、DS、ES、SS,段名是在段定义语句说明时的段名。第64页,共80页,2022年,5月20日,5点16分,星期五【例】段寄存器的说明实例DATA1SEGMENT ;定义数据段DATA1WORD1 DW4231HBYTE1 DB"AAAAFFF"DATA1 ENDSDATA2SEGMENT ;定义数据段DATA2WORD2 DW5566HWORD3 DW7878HDATA2 ENDSDATA3SEGMENT ;定义数据段DATA3BYTE2 DB?DATA3 ENDSCODE1SEGMENT ;编写代码段CODE1ASSUMECS:CODE1,DS:DATA1,ES:DATA2 ;(1)MOVAX,DATA1 ;(2)MOVDS,AX ;(3)MOVAX,DATA2 ;(4)MOVES,AX ;(5)

MOVAX,WORD1 ;访问段DATA1中的字变量WORD1MOVWORD2,AX ;访问段DATA2中的字变量WORD2 ASSUMEDS:DATA3,ES:NOTHING ;(6)MOV AX,DATA3MOV DS,AXMOVBL,BYTE2 ;访问段DATA3中的字节变量BYTE2

MOV AX,4C00H ;(7)INT 21H ;(8)CODE1 ENDS第65页,共80页,2022年,5月20日,5点16分,星期五堆栈段的说明堆栈段是一个特殊的段,在程序中可以定义它,也可以不定义。除了要生成COM型执行文件的源程序外,一个完整的源程序一般最好定义堆栈段。如果在程序中不定义堆栈段,那么,操作系统在装入该执行程序时将自动为其指定一个64KB的堆栈段。第66页,共80页,2022年,5月20日,5点16分,星期五简化段定义用完整的段定义格式可以控制段的各种属性,MASM5.0以后的汇编程序提供了一种简化的段定义方式,它使定义段更简单、方便。第67页,共80页,2022年,5月20日,5点16分,星期五存储模型伪指令程序存储模型伪指令的格式如下:.MODEL存储模型[,语言类型][,操作系统类型][,堆栈类型]存储模型功能适用系统Tiny(微型)所有数据和代码都放在一个段内,其访问都为NEAR型,整个程序小于或等于64KB,并会产生.COM文件MS-DOSSmall(小型)所有代码在一个64KB的段内,所有数据在另一个64KB的段内(包括数据段、堆栈段和附加段)MS-DOSWindowsMedium(中型)所有代码大于64KB时可放在多个代码段中,转移或调用可为FAR型。所有数据限在一个段内,DS可保持不变MS-DOSWindowsCompact(紧凑型)所有代码限在一个段内,转移或调用可为NEAR型。数据大于64KB时,可放在多个段中MS-DOSWindowsLarge(大型)代码段和数据段都可超过64KB,被放置在有多个段内,所以数据和代码都是远访问MS-DOSWindowsHuge(巨型)单个数据项可以超过64KB,其他同Large模型MS-DOSWindowsFlat(平展型)所有代码和数据放置在一个段中,但段地址是32位的,所以整个程序可为4GB。MASM6.0支持该模型OS/2WindowsNT第68页,共80页,2022年,5月20日,5点16分,星期五简化的段伪指令简化段伪指令功能注释.CODE[段名]创建一个代码段段名为可选项,如不给出段名,则采用默认段名。对于多个代码段的模型,则应为每个代码段指定段名.DATA创建一个数据段段名是:_DATA.DATA?创建无初值变量的数据段段名是:_BSS.FARDATA[段名]建立有初值的远调用数据段可指定段名,如不指定,则将以FAR_DATA命名.FARDATA?[段名]建立无初值的远调用数据段可指定段名,如不指定,则将以FAR_BSS命名.CONST建立只读的常量数据段段名是CONST.STACK[大小]创建一个堆栈段并指定堆栈段大小段名是STACK。如不指定堆栈段大小,则默认值为1KB第69页,共80页,2022年,5月20日,5点16分,星期五与简化段定义有关的预定义符号@CODE:由.CODE伪指令定义的段名或段组名。@DATA:由.DATA伪指令定义的段名,或由.DATA、.DATA?、.CONST和.STACK所定义的段组名。@STACK:堆栈段的段名或段组名。第70页,共80页,2022年,5月20日,5点16分,星期五【例】简化段定义实例.MODELSMALL.STACK100H;定义堆栈段及其大小.DATA;定义数据段.CODE;定义代码段START:;起始执行地址标号MOVAX,@DATA;数据段地址MOVDS,AX;存入数据段寄存器

MOVAX,4C00HINT21HENDSTART;程序结束第71页,共80页,2022年,5月20日,5点16分,星期五其他伪指令除了以上介绍的伪指令之外,还有其他一些

温馨提示

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

评论

0/150

提交评论