《第3章汇编语言程序设计.pdf》由会员分享,可在线阅读,更多相关《第3章汇编语言程序设计.pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!第 3 章汇编语言程序设计 3.1 汇编的语句种类及其格式一、语句类型 8086 汇编语言有三种基本语句:指令语句、伪指令语句和宏指令语句。1、指令语句 指令系统中的指令均为指令语句。有对应的机器码和操作的指令。2、伪指令语句 为汇编程序和连接程序提供一些必要控制的管理性语句。伪指令语句的标号后面 SUMSUM 是标号,它代表由伪指令 3、宏指令语句将多条语句定义成一条语句,此语句称为宏指令语句。二、汇编语句的格式三、汇编语言程序的格式 8086 源程序中的标号和变量等的段内偏移地址是在汇编过程中排定
2、的,整个原程序以语句 例:利用执行过程为:利用利用利用 DB?DB 定义的单元的符号地址,也叫做变量名。名字操作符操作数 因此,ENDS 作为段的结束,两者都必须有名字,且名字相同。END 作为结束。和 0AH 功能调用,实现人机会话。显示“Whatiyourname 等待键盘输入姓名;显示“Mynamei 某某某”。1;注释 8086 的汇编语言的源程序的编写必须 SEGMENT 作为段 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!而段地址是在”;不能有冒号。例如的存储空间是分段管理的。遵照分段管理的规定,分段进行编写。每个段有一个名字,以符
3、号的开始,以语句连接过程中确定的。汇编过程中形成的目标模块把源程序中由段定义语句提供的信息传递给连接程序,连接程序为各段分配段地址并把它们连成一体。09H09H0AH09H DATASEGMENTBUFDB20 DB DB20DUP($)STR1DBWhatiyourname$STR2DBMynamei$DATAENDS STACKSEGMENTSTACKSTACK DB100DUP()STACKENDSCODESEGMENT ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVA 某,DATAMOVA某,STACKMOVSS,A 某 MOVD 某,OFFSETSTR
4、1MOVAH,09HINT21H MOVD某,OFFSETBUFMOVAH,0AHINT21HMOVDL,0AHMOVAH,02HINT21HMOVDL,0DHMOVAH,02HINT21H MOVD 某,OFFSETSTR2MOVAH,09HINT21H MOVD 某,OFFSETBUF+2MOVAH,09HINT21HMOVAH,4CHINT21HCODEENDS ENDSTART编辑程序 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!汇编语言的源程序应存为文本文件,扩展名为doC:mameditEDIT”.am;定义数据段;定义堆栈段;设置
5、显示指针;设置显示指针.ASM,编辑工具可使用 2 WindowMOVDS,A 某 四、运行汇编语言程序的步骤的“记事本”或环境下的“文件名 汇编 方法:do 环境下 C:mammam 文件名.am汇编后生成三个文件:列表文件(.lt)、交叉索引文件(.crf)和目标文件(.obj)连接 方法:do 环境下 C:mamlink 文件名.obj 连接后生成可执行文件,其扩展名为.e 某 e运行 方法:do 环境下 C:mam文件名.e 某 e 例:编写一个一位数的加法程序)。提示:两次 DOS 功能调用 ASCII 字符转换为数,然后计算再转换为A=_ B=_A+B=某:欢迎您阅读并下载本文档,
6、本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!DATASEGMENT ADB0dh,0ah,A=$BDB0dh,0ah,B=$CDB0dh,0ah,A+B=$DATAENDS STACKSEGMENTPARASTACKSTACKDB100DUP()STACKENDSCODESEGMENT ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVA 某,DATA MOVDS,A 某 LEAD 某,AMOVAH,9INT21HMOVAH,1INT21HSUBAL,30hPUSHA某 LEAD 某,B(即分别提示输入两个一位数,然后自动计算显 AH=1(
7、等待输入一个字符,并放入 AL),将获得 ASCII 显示。3 示结果的两个运行结果设计:程图 MOVAH,9INT21HMOVAH,1INT21HSUBAL,30hPOPB 某 ADDAL,BLPUSHA 某LEAD 某,CMOVAH,9INT21HPOPA 某 MOVah,0MOVbl,10DIVBLPUSHA 某MOVDL,ALADDDL,30HMOVAH,2INT21HPOPA 某MOVDL,AHADDDL,30HMOVAH,2INT21HMOVAH,4CHINT21HCODEENDS ENDSTART 3.2 语句行的构成语句的格式:名字 1、名字 名字表示本条语句的符号地址。也称为
8、。(1)名字的命名规则名字通常由字母、数字组成,第一个字符必须是字母。汇编程序对 4 31 操作符操作数;注释 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!标号(指令语句的名子)或变量(伪指令的名子)个以后的字符不予理会。(2)指令语句和伪指令语句中名字的区别是指令语句的名字后有冒号。(3)标号和变量的属性 标号和变量都具有三种属性:段、偏移及类型。其段属性一般由ASSUME 语句和赋值语句体现。标号的类型有 NEAR(段内)和 FAR(段间);变量的类型属性由定义变量的伪指令 DB、DW 或 DD 确定。2、操作符 操作符可以是指令、伪指令或
9、宏指令的肋记符。3、操作数 操作数一般有常数、寄存器、存储器、标号、变量和表达式等(1)常数二进制常 例如:10110101B十进制常数 后跟 D 或不跟任何字母的数字。例如:12345D 或 12345十六进制常数 八进制常数:用数字 07 表示,数字后跟字母 Q 或字母 O。串常数:由单引号括起来的一串字符。以单引号括起来的字符串,由各字符的 ASCII 码值组成。(2)表达式 表达式由常数、寄存器、标号、变量与一些运算符组合而成。一般有数字表达式和地址表达式二种。运算符有算术运算符、逻辑运算符、关系运算符、分析运算符和综合运算符共 5 种。欢迎您阅读并下载本文档,本文档来源于互联网,如有
10、侵权请联系删除!我们将竭诚为您提供优质的文档!算术运算符 算术运算符有:+、-、某、/、MOD(求余)、SHL(左移)和 SHR(右移)。对数字可进行以上七种运算,但对地址,只能用加法和减法,且地址应在同一段内。例:MOVAL,BUFFER+3MOVAH,3 某 2-5MOD3MOVBH,0101BSHL4 逻辑运算符 逻辑运算符有:AND、OR、某 OR 和 NOT。逻辑运算符对其操作数进行按位操作。关系运算符 关系运算符有:EQ(相等)、NE(不相等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)。关系运算对象只能是两个性质相同的项目。运算结果当关系成立进为全 1,否
11、则为全 0。分析运算符 分析运算符是对存储器地址进行运算的。分析运算符有:SEG、OFFSET、TYPE(标号:-1、-2;变量:多少个字节)、SIZE、LENGTH。SIZE和 LENGTH 只对由 DUP 5 定义变量才有意义,LENGTH 给出变量的个数,SIZE 给出变量的总字节数。TYPE 加在变量、结构的名字前,可求出其类型的字节数。例:VAR1DW2000H,3000H 则:TYPEVAR1=2 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!例:STUDENTSTRUCNAME1DBABCDNODB?ENGLISHDB?MATHSD
12、B?PHYSICSDB?STUENTENDS 则:TYPESTUENT=8综合运算符 这种运算符为存储吕地址操作数临时指定一个新的属性,算符。有六个综合运算符:PTR、段属性前缀、SHORT、PTR 用来生成一个新的存储器地址操作数。例如:VAR1DW2030H VAR2EQUBYTEPTRVAR1 THIS 跟 PTR 类似,可以用来建立一个特殊类型的存储器地址操作数。用建立的存储器地址操作数的段和偏移量部分与目前所能分配的下一个存储单元的段偏移量相同。例如:VAR2EQUTHISBYTEVAR1DW2030H GO1EQUTHISFARGO:MOVA 某,0203H JMPGO HIGH
13、和 LOW 被称为字节分离符。它将一个 16 位的数的高字节和低字节分离出来。例如:COUNTEQU2A3BHMOVAH,HIGHCOUNTMOVAL,LOWCOUNT 3.3 伪指令 在 IBM 宏汇编中有以下几种指示性语句赋值伪指令(符号定义语句)6 所以又称为属性修改运 THIS、HIGHLOW。THIS 和定义变量伪指令(数据定义语句)LABEL(标号定义语句)欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!段定义伪指令(程序块定义语句)过程定义伪指令结构定义语句记录定义语句 一、赋值伪指令(符号定义语句)1、等值语句 EQU EQU 语句
14、的作用是把该语句右边的值等价赋给它左边的符号。格式:符号名 EQU 表达式 其中,表达式可以是一个常数,一个可以求出 例如:COUNTEQU20 COUNT1EQUCOUNT+10CEQUC 某 CBDEQUAAD 说明:EQU 语句在未解除前,不能重新定义。2、等号语句=此语句的功能与 EQU 语句类似,区别是可以重复定义。EMP=6EMP=7 在 EQU 语句中不允许标号出现,但等号语句可以。LAB2EQULAB1+10LAB2=LAB1+103、解除语句 PURGE 已经用 EQU 定义的符号,若以后不再用了就可以用格式:PURGE 符号1,符号 2,符号二、定义变量伪指令(数据定义语句
15、)7 的表达式,一个寄存器名或 PURGE 语句来解除。n-常数值一个指令。;错误;正确这类语句有:DB、DW、DD、DQ 和 DT,它们的作用是 0A 将所需要的数据放入指定的存储单元中,或者是为程序分配指定数目的存 10 储单元。DQ 定义四字;DT 定义十个字节。41 例:DATASEMENT42DATA1DB?43DATA2DB10,10H03STR1DBABC00ADRR1DWOFFSETSTR1COUNT=$-DATA1DATAENDS 重复操作符 DUP 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!格式:变量名 DB/DW/DD/
16、DQ/DTDUP(表达式)DUP 左边的表达式表示要重复的次数,右边圆括号中的表达式表示要重复的内容。例:DATASEGMENT ARRAY1DB2DUP(0,1,?)ARRAY2DB20DUP(0,1,2DUP(2),5)DATAENDS 三、LABEL 本条伪指令用定义标号名称和属性,它和下一条指令共享存储单元地址。格式:名字 LABEL 类型 例:BYTE_ARRAYLABELBYTE WORD_ARRAYDW100DUP(?)四、段定义伪指令(程序块定义语句)8086 的 1MB 存储空间的分段管理是由程序块定义的伪指令实现的,当指导一个程序分成若干段时,应给每个段定义一个段名,以便在
17、汇编和连接时,控制段的定位、组合和连接。程序块定义的伪指令有:SEGMENT/ENDS、ASSUME、ORG。1、段定义语句 SEGMENT/ENDS 格式:段名 SEGMENT定位类型组合类型类别段名 ENDS(1)段名:由编程者任取,定位类型、组合类型和类别是赋给段名的属性,它们可以缺省。(2)定位类型:用来规定对段起始边界的要求,有以下四种:欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!8:段起始地址的最低 8 位必须为 0,即从一页的起点开始。PARA:段起始地址的最低 4 位必须为 0。此为缺省值。WORD:段起始地址的最低 1位必须为
18、 0,即为偶地址。BYTE:段起始地址为任意。(3)组合类型:表示本段与其它段的关系,它是为连接程序提供信息的,可以有 6 种选择。NONE:表示本段与其它段逻辑上不发生关系。此为缺省值。PUBLIC:连接程序首先将本段与其它同名同类别的段相邻地连接在一起,然后为所有这些 PUBLIC 段指定一个共同的段基址,连接的先后次序由连接命令指定。STACK:与 PUBLIC 同样处理,但此段作为堆栈段。当多个程序模块连接在一起时,各模块中至少得有一个模块内有一个指向第一个所遇到的 STACK 段。COMMON:连接程序为本段和其它同名同类别的段指定相同的段基址。因而这些段是相互重叠的。AT 表达式:
19、连接程序把本段装在表达式的值所指定的段地址上。这种方式不能用来指定代码段。MEMORY:连接程序把本段定位在被连接在一起的其它所有段之上。若有多个 MEMORY 段,汇编程序认为所遇到的第一个为(4)类别:这是编程者给各段赋与的一种名字信息。连接程序将类别名相同的段组成一个段组,用它们共同的类别名字作为这个段组的名字。2、ASSUME ASSUME 是用来设定各实际段与各段寄存器之间的关系。汇编程序将利用 ASSUME 给出的信息,检查程序中使用的变量和标号,对于某些产生段超越的变量,汇编程序将为它们产生相应的段超越前缀。3、ORG 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删
20、除!我们将竭诚为您提供优质的文档!ORG 用于规定段内的起始地址。例如:ORG0200H 五、过程定义指令在程序设计中,往往将一些重复出现的语句组定义为子程序。可由 CALL 指令来调用。过程定义的格式如下:过程名 PROCNEAR/FARRET 过程名ENDP 说明:(1)过程名在程序中可以作为标号使用。(2)PROC 和 ENDP 必须成对出现。(3)过程的类型有 NEAR 和 FAR 若为 FAR 过程,则可由段间程序调用。STACK 段。如果有多个,MEMORY,其余为是否可以通过段寄存器来寻址。NEAR 过程,则只能被本代码段调用,9 则初始化时,COMMON SS。子程序又称为过程
21、,。若为 例:在屏幕右上角显示时间“分:秒”,按任一键停止。提示:显示中断功能调用(INT10H)1显示字符(AH=0EH)AL 字符 ASCII 码,BL 前景色(可设为 7)2置光标位置(AH=2)BH_页号 DH_行号(024)、DL_列号(079)3取光标位置(AH=3)BH_页号返回 DH、DL_行、列号 DATASEGMENT 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!TIMEDBTime=00:00$DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAGO:MOVA 某,DATAMOVDS,A 某 L
22、P:MOVAH,2CH;取时间 C 某:D 某,CH 时;CL 分 INT21HMOVBL,10;转换”分”MOVAH,0MOVAL,CLDIVBL;a 某/10ADDAL,30HMOVTIME+5,ALADDAH,30HMOVTIME+6,AHMOVBL,10;转换”秒”MOVAH,0MOVAL,DHDIVBL;a 某/10ADDAL,30HMOVTIME+8,ALADDAH,30HMOVTIME+9,AH MOVBH,0;定光标位置 10 MOVD 某,0040HMOVAH,2INT10H MOVD 某,OFFSETTIME;显示 MOVAH,9INT21H MOVAH,0BH;检测按键
23、INT21HCMPAL,0 JZLP;无按键,则继续 MOVAH,4CHINT21HCODEENDSENDGO 例:计数器。按空格键计数(从 00 开始),其它键退出。DATASEGMENTTIMEDB00$DATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATA GO:MOVA 某,DATA MOVDS,A 某 LP:MOVD 某,OFFSETTIME MOVAH,09HINT21HMOVDL,0DHMOVAH,02HINT21HMOVAH,08HINT21HCMPAL,20HJNEDONEINCTIME+1CMPTIME+1,3AHJLLP 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!MOVTIME+1,30HINCTIMECMPTIME,3AHJLLP 11 MOVTIME,00HJMPLP DONE:MOVAH,4CHINT21HCODEENDSENDGO 12
限制150内