第六章 汇编语言与基本伪指令
1.教学目的:掌握微型汇编语言格式和程序设计方法
2.教学要求:
1 熟悉汇编语言程序的结构、语句类型和格式。
2 熟悉数据项及表达式,要求能明确区分标号和变量。
3 熟悉各类伪指令,要求掌握常用伪指令格式和应用。
4 熟悉汇编语言上机过程和DEBUG调试
3.教学重点:
①指令语句格式和伪指令语句格式
②汇编语言程序格式。
4.掌握难点:
①伪指令
②伪指令存储器分配技术
5.教学进程安排:P102133
6.教学方法:
课堂讲授
7.教学内容摘要:
6.汇编语言语句格式
6.1.1  语句种类
【例6-1先给出一个完整的汇编语言源程序,该程序的功能是完成两个字节数据相加。
DATA        SEGMENT            段定义开始(DATA段)
BUF1        DB        34H        1个加数
BUF2        DB        2AH        2个加数
SUM        DB                准备用来存放和数的单元
DATA        ENDS                段定义结束(DATA段)
CODE        SEGMENT            段定义开始(CODE段)
ASSUME    CS:CODE,DS:DATA    规定DATACODE分别为数据段和代码段
START:    MOV        AX    DATA
MOV        DS    AX    给数据段寄存器DS赋值
MOV        AL    BUF1    取第1个加数
ADD        AL    BUF2    和第2个加数相加
MOV        SUMAL    存放结果
MOV        AH    4CH   
INT        21H        返回DOS状态
CODE        ENDS                段定义结束(CODE段)
END        START    整个源程序结束
从上面这个例子可以看出,汇编语言源程序由若干个语句组成,语句分为如下2类。
1.指令语句
2.伪指令语句
6.1.2  语句格式
指令语句和伪指令语句的格式是类似的,格式如下:
[名字] 操作码  操作数 [;注释]
1.名字
⑴名字的标识符
⑵名字的定义规则
⑶名字的2种主要形式
①标号
②变量
2.操作码
3.操作数
⑴常数
⑵表达式
①算术运算符
②逻辑运算符
③关系运算符
4.注释项
6.2  伪指令与伪操作
6.2.1 定义符号的伪指令
1. 等值伪指令EQU
格式:<符号名> EQU <表达式汇编语言要什么基础>
2. 等号伪指令 =
EMP=7
EMP=EMP+1
3. 解除定义伪指令PURGE
格式:PURGE <符号1,符号2,…,符号N>
6.2.2 定义数据的伪指令
[变量]  助记符  操作数,…,操作数 [;注释]
功能:为操作数分配存储单元,并用变量与存储单元建立联系。
DBDWDDDQDT
6-2】操作数可以是常数,或者是表达式
(根据该表达式可以求得一个常数),如
DATA_BYTE    DB    10410H
DATA_WORD    DW    100100H-5                    6.1  6-2的汇编结果
DATA_DW        DD    3COFFFDH
汇编程序可以在汇编期间在存储器中存入数据,
汇编后的内存分布如图4.1所示。
6-3】操作数也可以是字符串,如:
MESSAGE        DB    ‘HELLO’
则存储器存储情况如4.2所示,而DB  ‘AB’
DW  ‘AB’的存储情况则分别如图4.2⑵和⑶
所示
    6-4操作数?可以保留存储空间,但不存入数据。
    如:ABC        DB    0,?,?,0
    DEF        DW    ?,52,?
经汇编后的存储情况如图4.3所示。
6.2  6-3的汇编结果
6-5 使用DUP实现重复定义
ARRAY1        DB    2    DUP(012,?)
ARRAY2        DB    100    DUP( ? )
汇编后的存储情况如图4.4所示。
由图可见,例4-5中的第一个语句和语句ARRAY1  DB  012,?,012,?是
等价的。
6.6-4的汇编结果                      6.4  6-5的汇编结果
6.2.3  定义程序开始和结束的伪指令
NAME        MODULE_NAME
TITLE    TEXT
END    LABEL
6.2.4  指令集选择伪指令
.8086      选择8086指令系统
.286      选择80286指令系统
.286P      选择保护方式下的80286指令系统
6.2.5  地址计数器与对准伪操作1. 地址计数器$
JNE  $+6
【例6-6$ 用法示例
ARRAY        DW    12$+434$+4
如汇编时ARRAY分配的偏移地址为0074,则汇编后的存储
区将如图4.5所示。
注意:ARRAY数组中的两个 $+4 得到的结果是不同的,这是      6.5  6-6的汇编结果
由于$的值是在不断变化的缘故。当在指令中用到$ 时,它只代表该指令的首地址,而与$本身所在的字节无关。2. ORG伪操作 ORG伪操作用来设置当前地址计数器的值,其格式为:
ORG    CONSTANT        EXPRESSION                       
3. EVEN伪操作
4. ALIGN伪操作
ALIGN伪操作为保证双字类型数组边界从4的倍数开始创造了条件,其格式为:
ALIGN    BOUNDARY
其中BOUNDARY必须是2的幂,例如:
.
DATA
ALIGN    4
ARRAY        DB        100    DUP(?)
就可保证ARRAY的值为4的倍数。当然,ALIGN    2EVEN是等价的。
6.2.6  基数控制伪指令
.RADIX    EXPRESSION
6.2.7  过程定义伪指令
可把具有独立功能的程序段定义为过程,供其它程序调用。
过程定义的语法格式为:
<过程名> PROC    NEAR/FAR
RET
<过程名> ENDP
6.3  汇编语言源程序结构
6.3.1完整段定义的程序结构
SEGMENT_NAME    SEGMENT
   
SEGMENT_NAME    ENDS
ASSUME  <段寄存器名>:段名[<段寄存器名>:段名,]
ASSUME  <段寄存器名>NOTHING
<段名>  SEGMENT  [定位类型][组合类型][使用类型][类别]
       
<段名>  ENDS
1. 定位类型(ALIGN_TYPE
PARA        指定段的起始地址必须从小段边界开始,即段起始地址最低位必须为0。这样,偏移地址可以从0开始。
BYTE        该段可以从任何地址开始。这样,起始偏移地址可能不是0
WORD        该段必须从字的边界开始,即段起始地址必须为偶数。
DWORD    该段必须从双字边界开始,即段起始地址的最低位必须为4的倍数。
PAGE    该段必须从负的边界开始,即段起始地址的最低两个十六进制数位必须为0(该地
址能被256整除)。
定位类型的默认项是PARA,即若未指定定位类型时,则汇编程序默认为PARA
2. 组合类型(COMBINE_TYPE
组合类型的默认项是PRIVATE
3. 使用类型(USE_TYPE
USE16    使用16位寻址方式。
USE32    使用32位寻址方式。
使用类型的默认项是USE16
4. 类别名(‘CLASS’)
在引号中给出连接时组成段组的类型名。类别说明并不能把相同类别的段合并起来,但在连接后形成的装入模块中,可以把它们的位置靠在一起。
6.3.2  简化段定义的程序结构
较新版本的汇编程序(MASM5.0MASM6.0)除支持“完整的段定义伪操作”中所讨论的SEGMENT伪操作外,还提供了一种新的较简单的段定义方法。
1MODEL伪操作
MODEL伪操作的格式如下:
.MODEL MEMORY_MODEL  [, MODEL  OPTIONS ]
2.简化的段定义伪操作
3.与简化段定义有关的预定义符号
4.用MODEL定义存储模型时的段默认属性
6.3.3  段组定义的程序结构
其格式如下:
GRPNAME        GROUP    SEGNAME[SEGNAME]
其中GRPNAME为段组名,SEGNAME则为段名。
6.4  汇编语言程序的上机过程
在计算机上运行汇编语言程序的步骤是:
1.用编辑程序建立ASM源文件;
2.用MASM程序把ASM文件转汇编成OBJ文件;
3.用LINK程序把OBJ文件转连接成EXE文件;
4.用DOS命令直接键入文件名就可执行该程序。
6.7  汇编语言程序的建立及汇编过程
6.4.1建立汇编语言的工作环境
为运行汇编语言程序至少要在磁盘上提供以下文件:
1.编辑程序,如EDIT.EXE

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。