汇编语言指令的构成
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一讲
第四章汇编语言程序设计-语句特点、伪指令
回顾:8086/8088的内部结构、寄存器功能和工作过程,指令格式、寻址方式和功能。
重点和纲要:汇编语言程序设计-语句特点、伪指令(了解汇编的概念及其方法, 掌握汇编程序的基本格式,常用运算符的使用方
法,汇编的步骤。了解伪指令的功能,掌握定义数据、符号、
段、过程等伪指令的使用方法,能编写格式正确的汇编程序)。
讲授内容:
4.1 汇编语言的基本元素
一、汇编语言的语句格式
由汇编语言编写的源程序是由许多语句(也可称为汇编指令)组成的。每个语句由1~4个部分组成,其格式是:
[标号] 指令助记符[操作数][;注解]
其中用方括号括起来的部分,可以有也可以没有。每部分之间用空格(至少一个)分开,一行最多可有132个字符。
1.标识符
是给指令或某一存储单元地址所起的名字。可由下列字符组成:
字母:A ~ z ;数字:0 ~ 9 ;特殊字符:?、·、@、一、$ 。
数字不能作标识符的第一个字符,而圆点仅能用作第一个字符。标识符最长为31个字符。当标识符后跟冒号时,表示是标号。它代表该行指令的起始地址;当标识符后不带冒号时,表示变量;伪指令前的标识符不加冒号。
2.指令助记符
表示不同操作的指令,可以是8088的指令助记符,也可以是伪指令。 3.操作数
是指令执行的对象。依指令的要求,可能有一个、两个或者没有, 例如: RET ;无操作数
COUNT : INC CX ;一个操作数 如果是伪指令,则可能有多个操作数,例如: COST DB 3,4,5,6,7 ;5个操作数 MOV AX ,[BP 十4] ;第二个操作数为表达式 4.注解
该项可有可无,是为源程序所加的注解,用于提高程序的可读性。
二、 汇编语言的运算符
1.算术运算符、逻辑运算符和关系运算符
① 算术运算符可以应用于数字操作数,结果也是数字。而应用于存储器操作数时,只有+、- 运算符有意义。
2.取值运算符SEG 、OFFSET 、TYPE 、SIZE 和LENGTH · SEG 和OFFSET 分别给出一个变量或标号的段地址和偏移量。
例如,定义: SLOT DW 25
则:MOV AX ,SLOT ;从SLOT 地址中取一个字送入AX
MOV AX ,SEG SLOT ;将SLOT 所在段的段地址送入AX MOV AX ,OFFSET SLOT ;将SLOT 所在段的段内偏移地址送AX
· TYPE 操作符返回一个表示存储器操作数类型的数值。各种存储器地址操作数类型部分的值如表3-1所示。
· LENGTH 和SIZE 操作符只应用于数据存储器操作数。(用DB/DW/DD 等定义的操作数)
LENGTH 返回一个与存储器地址操作数相联系的单元数, SIZE 操作数返回一个为存储器操作数分配的字节数。 例如:若 MULT-WORD DW 50DUP (0) 则 LENGTH (MULT-WORD )=50
表3-1存储器操作数的类型属性及返回值
SIZE(MULT-WORD)=100
注意:SIZE(X)=(LENGTH X)* (TYPE X)
3.属性运算符
属性运算符用来给指令中的操作数指定一个临时属性,而暂时忽略当前的属性。常用的有:
(1) 合成运算符PTR
它作用于操作数时,则忽略了操作数当前的类型(字节或字)及属性(NEAR或FAR),而给出一个临时的类型或属性,
一般格式:类型PTR 表达式
功能:建立一个存储器地址操作数,它与其后的存储器地址操作数有相同的段地址偏移量,但有不同的类型。
例如:SLOT DW 25
此时SLOT已定义成字单元。若我们想取出它的第一个字节内容,则可用PTR 对其作用,使它暂时改变为字节单元,即
MOV AL,BYTE PTR SLOT
三、表达式
是由运算符和操作数组成的序列,在汇编时产生一个确定的值。这个值可以仅表示一个常量,也可以表示一个存储单元的偏移地址,相应的表达式称为常量表达式和地址表达式。
1.常数
汇编语言语句中出现的常数可以有7种:
①二进制数后跟字母B,如01000001B。
②八进制数后跟字母Q或O,如202Q或202O。
③十进制数后跟D或不跟字母,如85D或85。
④十六进制数后跟H,如56H,0FFH。注意,当数字的第一个字符是A~F 时,在字符前应添加一个数字0,以示和变量的区别。
另有,十进制浮点数、十六进制实数、字符和字符串
2.常量操作数
常量操作数是一个数值操作数,一般是常量或者是表示常量的标识符。可以
为数字常量操作数或字符串常量操作数。前者可采用二进制、八进制、十进制或十六进制等计数形式;而后者则为相应字符的ASCII码。
3.存储器操作数
存储器操作数是一个地址操作数,代表一个存储单元的地址,通常以标识符的形式出现。
存储器操作数可以分为变量及标号两者类型,如果存储器操作数所代表的是某个数据在数据段、附加段或堆栈段中的地址,那么这个存储器操作数就称为变量;如果存储器操作数所代表的是某条指令代码在码段中的地址,那么这个存储器操作数称为标号。变量所对应的存储单元内容在程序的运行过程中是可以改变的,标号通常作为转移指令或调用指令的目标操作数,在程序运行过程中不能改变。
存储器操作数有三个方面的属性。
(1) 段地址:即存储器操作数所对应的存储单元所在段的段地址;
(2) 偏移地址:即存储器操作数所对应的存储单元在所在段内的偏移地址;
(3) 类型:变量的类型是相应存储单元所存放的数据项的字节数;而标号的类型则反映了相应存储单元地址在作为转移或调用指令的目标操作数时的寻址方式,可有两种情况,即NEAR和FAR。具体值可见表3-1
4.常量表达式
由常量操作数及运算符构成,在汇编时产生一个常量。
如PORT、V AL十1、OFFSET SUM、SEG SUM、TYPE CYCLE等。
5.地址表达式
由存储器操作数与运算符构成,必须有明确的物理意义。
例如SUM+2、CYCLE-5
表达式SUM+2、CYCLE-5的值仍然是一个存储器操作数,该存储器操作数的段地址与类型属性分别与存储器操作数SUM及CYCLE相同,但偏移地址分别比SUM及CYCLE大2或小5。表达式是在汇编时计算的,而变量单元的内容在程序的运行过程中可以改变。
四、汇编语言程序汇编步骤
汇编语言程序要能在机器上运行,还必需将汇编源程序汇编成可执行程序。为此必须完成以下几个步骤。过程如图3-1所示。