汇编语言-程序格式

上传人:mg****85 文档编号:49941962 上传时间:2018-08-05 格式:PPT 页数:33 大小:191.50KB
返回 下载 相关 举报
汇编语言-程序格式_第1页
第1页 / 共33页
汇编语言-程序格式_第2页
第2页 / 共33页
汇编语言-程序格式_第3页
第3页 / 共33页
汇编语言-程序格式_第4页
第4页 / 共33页
汇编语言-程序格式_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《汇编语言-程序格式》由会员分享,可在线阅读,更多相关《汇编语言-程序格式(33页珍藏版)》请在金锄头文库上搜索。

1、本章学习要点: (1)常见的伪指令及它们的用法 (2)汇编语言的结构 一、汇编语句的种类和格式 1. 语句的种类 汇编语言有多种类型的语句,指令语句、伪指令语句、宏指令 语句。 汇编语言在对源程序进行汇编时,把指令语句翻译成机器指令 ,也就是说指令语句有着与之对应的机器指令。 伪指令语句没有与其对应的机器指令,只是指示汇编程序如何 对源程序进行汇编,包括符号的定义、变量的定义、段的定义 等。通俗点讲,它实际上是属于一种说明语句。 2.语句的格式 指令语句格式: (标号)指令助记符(操作数(,操作数)(;注释) 伪指令语句的格式如下: (名字)伪指令定义符(参数,参数)(;注释)伪指令定义符:规

2、定了伪指令的功能 参数:说明伪指令操作的对象,如常数(数值表达式)等 名称:给所定义的内容起的名称。 在汇编语言中,名字和标号很容易区分,名字后面没有冒号, 而标号后一定用冒号。 标号和名字最多由31个字母、数字及规定的特殊字符组成,并 且不能以数字来开头。 标号和名字不能是汇编语言的保留字,如不能是“MOV”。 汇编语言不区分保留字中字母的大小写。如“MOV AX ,03H”等 同于“mov ax , 03h” 伪指令有多种,常见的如: (1)段定义伪操作 (2)数值数据定义及存储器分配 (3)符号数据定义 (4)程序开始和结束伪操作 (5)表达式赋值伪操作 此外还有基数控制伪操作、对准伪操

3、作等。看看下列代码有哪些伪指令:二、常见的伪指令/伪操作 (1)段定义语句 为了与存储器的分段结构相对应,汇编语言的源程序 也是由若干个段组成。 1. 段开始和段结束语句 段定义的一般格式如下: 段名SEGMENT 定位类型 组合类型 类型 段名ENDS例:一个简单的段如下所示: DSEG SEGMENT MESS DB HELLO , 0DH , 0AH , $ DSEG ENDS2. 段使用设定语句 汇编程序根据段开始语句和段结束语句判断出源程序的段划分 ,为了有效地产生目标代码,汇编程序还要了解各程序段与段 寄存器间的对应关系。这种对应关系由段使用设定语句说明。 ASSUME 段寄存器名

4、:段名,段寄存器名:段名 段寄存器名可以是CS,DS,SS和ES。 段名就是段开始和段结束语句中规定的段名。 例如:CS寄存器对应CSEG段,DS寄存器对应DSEG段。 ASSUME CS : CSEG , DS : DSEG ASSUME伪指令中段名也可以是一个特别的关键字NOTHING ,它表示某个段寄存器不与任何段有对应关系。DSEG1 SEGMENT VARW DW 12 DSEG1 ENDS DSEG2 SEGMENT XXX DW 0 DSEG2 ENDS CSEG SEGMENT ASSUME CS:CSEG , DS: DSG1 , ES : DSG2 MOV AX , DSE

5、G1 MOV DS , AX MOV AX , DSEG2 MOV ES , AX ASSUME DS: DSG2 , ES :NOTHING MOV AX , DSEG2 MOV DS , AX DSEG ENDS(2)关于数值数据定义语句及存储器分配 通过数值数据定义语句可以为数据项分配存储单元,并根据需 要设置其初值。 还可以用符号代表数据项,此时符号就与分配的存储单元相联 系。代表数据项的符号本省称为变量名,与之相对应的存储单 元用于存放变量。 1. 数据定义的格式 数据定义语句是最常用的伪指令语句。一般格式如下: 变量名 数据定义符 表达式,表达式,表达式;注释 例如:VARB DB

6、3 WARW DW -1234BUFF DB 100 , 3+4 , 5*6 1)定义字节数据项(DB) 每一个字节数据项只占用一个字节存储单元 例:COUNT DB 100DB 0DH ,0AH , $TABLEDB 0 , 1 , 4 , 9 , 16 2)定义字数据项(DW) 每一个字数据项只占用两个字节存储单元 例:FLAG DW 2FCDH, 100,-1VECTDW 0DW 100H 3)定义双字数据项(DD) 每一个双字数据项只占用四个字节存储单元 例:VECTOR DD 4FARPTRDD 12345678H, 0 此外,还可以定义8字节的数据项(DQ),10字节的数据项(DT

7、)4)定义没有初值的数据项 如果数据定义语句中的表达式只是一个问号(?),则表示不 预置对应变量的初值,而仅仅是给变量分配存储单元。 例:INBUFF DB 5 , ? , ? , ? , 8 , ?VARWDW ?OLDVDD ? 5)定义字符串 定义字节数据的伪指令DB也可以用于方便地定义字符串。 字符串要用引号括起来,单引号和双引号皆可,只要配对。 例如:MESS DB HELLO! 上述语句与如下语句定义内容相同: MESS DB H , E , L , L , O , !2. 重复操作符DUP 有时需要定义数组,有时还需要定于数据缓冲区。 例如: BUFFER DB 0 , 0 ,

8、0 , 0 , 0 , 0 , 0 , 0 以上操作太不方便,为此,汇编语言停供了在数据定义语句中 使用的重复操作符DUP。 比如,上述定义语句与如下定义语句起相同的作用: BUFFER DB 8 DUP(0) 重复操作符DUP的一般格式如下: count DUP (表达式, 表达式, ) 例如: BUFFER1 DB 5 , 0 , 5 DUP(?) BUFFER2 DB 100 DUP(0 , 2 DUP(1 , 2) , 0 , 3) BUFFER3 DB 256 DUP(ABCDE)(3)关于符号数据的定义语句 1. 等价语句EQU 格式 EQU 表达式 例:COUNT EQU 100

9、;符号COUNT就代表常数100 BUFF_LEN EQU 4*COUNT;COUNT是已定义的符号常数 HELLO EQU “How are you!” 例:MOVE EQU MOV COUNT EQU CX 在安排上述语句后,就可以用MOVE代替指令助记符MOV,用 COUNT代替寄存器CX。当然,MOV和CX仍可以照样使用。 当遇到: MOVE AX , CX;MOV AX , CX MOVE COUNT , 100;MOV CX , 100 需要注意:第1,等价语句不另外给符号分配存储单元; 第2,等价语句定义的符号不能与其它符号相同,也不能被重 新定义。2. 等号语句(=) 汇编语言

10、专门提供了符号语句来定义符号常数,即用符号表示 一个常数。等号语句的一般格式如下: 符号名 = 数值表达式 例如:XX = 10 用符号定义语句可被重新定义。 例如: ABCD = 1 ABCD = 1003. 定义符号名语句 格式:符号名 LABEL 类型 其中类型可以是BYTE、WORD、DWORD、NEAR、FAR, 其中前3项对应于数据项,后2项对应于可执行代码。 功能:指定为某一类型的符号,且该符号的段属性和偏移属性 与下一个紧接着的存储单元的段属性和偏移属性相同。 例如: BUFFER LABEL WORD BUFF DB 100 DUP(0) 定义了一个符号BUFFER,其类型是

11、WORD。因为段属性与偏 移属性和BUFF相同, 所以内容为0000H。 又如: QUIT LABEL FAR EXIT:MOV AH , 4CH “MOV AH , 4CH”有了QUIT和EXIT两个标号。(4)程序开始与结束伪操作END 伪操作 格式: END 标号 其中标号表示程序开始执行的起始地址。 注意: 程序是从END所指的“标号”开始执行,遇到END指令后结束。 如果END没有指定标号,则从相应代码段从开始运行。注意以下2个程序的区别:(5)对准伪操作 1. EVEN 格式:EVEN 功能:使紧随其后的内容从偶地址开始存储。 DSEG SEGMENT EVEN WORD_ARRA

12、Y DW 100 DUP(?) DSEG ENDS2. ORG 格式: ORG 常数表达式 功能:使紧随其后的内容从表达式所指定的地址开始存储。 DSEG SEGMENT ORG 10 VECT1 DW 47A5H ORG 20 VECT2 DW 1234H DSEG ENDS可以使用符号$来代表当前正在汇编的指令的地址。例:已知ARRAY的偏移量为0074H,试写出下列语句所分配 空间的内容 ARRAY DW 1 , 2 , $+4 , 3, 4, $ + 4三. 关于表达式的伪操作 (1)数值表达式 1.常数 常数有多种类型和表示方式,如: 1)十进制常数,以字母D结束为标识。 例:MOV

13、 AX , 178D 2)十六进制常数,以字母H结束为标识 例:MOV AL , 0AH 注意,在程序编写时,十六进制数必须以数字开头。 例:要使(AL)为ABH,程序必须使用下列写法: MOV AL , 0ABH 3)二进制常数,以字母B结束为标识 例:OR AL , 11001010BTEST BL , 00101000B 4)八进制常数,以字母Q结束为标识,如127Q。5)字符串常数(串常数) 串常数的值是包括在引号中的字符的ASCII代码值。 例:A的ASCII码值是41H CMP AL , A 相当于 CMP AL , 41H6)伪指令RADIX 设置其后数值的缺省进制 格式:RAD

14、IX exp exp的值必须是区间2,16内的一个整数。 例如: RADIX 8 MOV AL , 10 RADIX 16 MOV AH , 10 但是,为了避免混淆和不必要的误会,我们提倡慎用RADIX.2. 算术运算符 算术运算府包括正(+)、负(-),加(+)、减(-)、乘(* )、除(/)和模(MOD),这些算术运算符的意义与高级语 言中同样运算符的意义相似。 ADD AX , 100 * 4 + 2 ; 100 * 4 + 2就构成了一个算术表达式 SUB CX , 100H / 2 MOV AL , -33.关系运算符 关系运算符包括相等(EQ)、不等(NE)、小于(LT)、大 于

15、(GT)、小于或等于(LE)、大于或等于(GE)。 若关系不成立,则结果为0(一个数值); 若关系成立,则结果为FFFFH(一个数值)。 例如, MOV AX , 1234H LT 1024H 等同于 MOV AX , 0H MOV BX , 1234H GT 1024H 等同于 MOV BX , 0FFFFH4. 逻辑运算符 逻辑运算符包括按位操作的“与”(AND)、“或” (OR) 、“ 非” (NOT) 、“异或” (XOR) 、“左移”(SHL)和“右移” (SHR)。逻辑运算的结果也是数值。 例: MOV BX , (VAL LT 5) AND 20) OR (VAL GE 5) A

16、ND 30) 当VAL 5时,汇编的结果应该是: MOV BX , 20 否则,汇编结果应该是: MOV BX , 30注意:逻辑运算符和指令助记符的区别,表达式中的逻辑运算 符属于伪指令,在汇编时起说明作用;而指令助记符则有机器 指令与之对应。5. 在数值表达式中使用操作符 (1)HIGH、LOW 功能:取数值表达式的值的高8位(或低8位)。 例:MOV AL , LOW 3080H 将汇编成:MOV AL , 80HMOV AH , HIGH 2050H 将汇编成:MOV AH , 20HMOV AH , HIGH(1234H + 5) 将汇编成:MOV , 12HMOV AH , HIGH 1234H + 5 将汇编成:MOV AH , 17H 注意:最后1题为什么是先取1234H的高8位再加5,而不是先 加5再取高8位?6

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号