第4章汇编语言程序设计汇总.docx
- 文档编号:25857841
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:19
- 大小:19.29KB
第4章汇编语言程序设计汇总.docx
《第4章汇编语言程序设计汇总.docx》由会员分享,可在线阅读,更多相关《第4章汇编语言程序设计汇总.docx(19页珍藏版)》请在冰豆网上搜索。
第4章汇编语言程序设计汇总
第4章汇编语言程序设计
主要内容
汇编语言源程序的结构
汇编语言语句格式
伪指令
功能调用
汇编语言程序设计
§4.1汇编语言源程序
了解:
汇编语言源程序的结构
汇编语言语句类型及格式
一、汇编语言源程序结构
1.汇编语言源程序与汇编程序
汇编语言源程序用助记符编写
汇编程序源程序的编译程序
汇编语言源程序汇编程序机器语言目标程序
2.汇编语言程序设计与执行过程
输入汇编语言源程序(EDIT)源文件.ASM
汇编(MASM)目标文件.OBJ
链接(LINK)可执行文件.EXE
调试(TD)最终程序
二、汇编语言语句类型及格式
1.汇编语言语句类型
指令性语句
CPU执行的语句,能够生成目标代码
指示性语句
CPU不执行,而由汇编程序执行的语句,不生成目标代码
2.汇编语言语句格式
指令性语句:
[标号:
][前缀]助记符[操作数],[操作数][;注释]
指令的符号地址
标号后要有冒号操作码注释前加分号
指示性语句格式
[名字]伪指令助记符操作数[,操作数,…][;注释]
变量的符号地址指示性语句中至
其后不加冒号有一个操作数
3.标号、名字
标号后有冒号,在指令性语句前;名字后不加冒号,在指示性语句前。
英文字母、数字及专用字符组成,最大长度不能超过31个,且不能由数字打头,不能用
保留字(如寄存器名,指令助记符,伪指令)。
4.操作数
寄存器
存储器单元
常量
变量或标号
表达式
常量
数字常量
字符串常量用单引号引起的字符或字符串
例:
‘A’
MOVAL,’A’
例:
’ABCD’
汇编时被译成对应的ASCII
码41H,42H,43H,44H
用单引号引起的字符或字符串
变量
代表内存中的数据区,程序中视为存储器操作数
变量的属性:
段值变量所在段的段地址
偏移量变量单元地址与段首地址之
间的位移量。
类型字节型、字型和双字型
表达式
算术运算
逻辑运算
*关系运算
取值运算和属性运算
其它运算
算术运算和逻辑运算符
算术运算符
+,-,*,/,MOD
逻辑运算符
AND,OR,NOT,XOR
例:
MOVAL,8AND4
MOVAL,8+4-1
取值运算符
用于分析存储器操作数的属性
获取变量的属性值
OFFSET取得其后变量或标号的偏移地址
SEG取得其后变量或标号的段地址
TYPE取变量的类型
LENGTH取所定义存储区的长度
SIZE取所定义存储区的字节数
取值运算符例
MOVAX,SEGDATA
MOVDS,AX
MOVBX,OFFSETDATA
LEABX,DATA
取值运算符例
若BUFFER存储区用如下伪指令定义:
BUFFERDW200DUP(0)
则:
TYPEBUFFER等于2
LENGTHBUFFER等于200
SIZEBUFFER等于400
属性运算符
用于指定其后存储器操作数的类型
运算符:
PTR
例:
MOVBYTRPTR[BX],12H
其它运算符
方括号:
[]方括号中内容为操作数的偏移地址
段重设符
段寄存器名:
[]用于修改默认的段基地址
§4.2伪指令
掌握:
伪指令的格式及实现的操作
伪指令的应用
伪指令
由汇编程序执行的“指令系统”
作用:
定义变量;
分配存储区
定义逻辑段;
指示程序开始和结束;
定义过程等。
常用伪指令
数据定义伪指令
符号定义伪指令
段定义伪指令
结束伪指令
过程定义伪指令
宏命令伪指令
一、数据定义伪指令
用于定义数据区中变量的类型及大小
格式:
[变量名]伪指令助记符操作数,…;[注释]
符号地址
定义变量类型
定义变量值及区域大小
1.数据定义伪指令助记符
DB定义的变量为字节型
DW定义的变量为字类型(双字节)
DD定义的变量为双字型(4字节)
DQ定义的变量为4字型(8字节)
DT定义的变量为10字节型
数据定义伪指令例
DATA1DB11H,22H,33H,44H
DATA2DW11H,22H,3344H
DATA3DD11H*2,22H,33445566H
数据定义伪指令例_变量在内存中的分布
DATA111DATA322
220
330
440
DATA21122
000
220
000
44XX
3366
55
44
33
数据定义伪指令的几点说明
伪指令的性质决定所定义变量的类型;
定义字符串必须用DB伪指令
例:
DATA1DB‘ABCD’,66H
41H‘A’
42H‘B’
43HC’
44H‘D’
66H
2.重复操作符
作用:
为一个数据区的各单元设置相同的初值
目的:
常用于声明一个数据区
格式:
[变量名]伪指令助记符nDUP(初值,…)
例:
BW20DUP(0)
M1DB10DUP(0)
3.“?
”的作用
表示随机值,用于预留存储空间
MEM1DB34H,’A’,?
随机数
占1个字节单元
DW20DUP(?
)
预留40个字节单元,每单元为随机值
数据定义伪指令例
M1DB‘Howareyou?
’
M2DW3DUP(11H),3344H
DB4DUP(?
)
M3DB3DUP(22H,11H,?
)
变量在内存中的分区
数据定义伪指令例
M1M211HM322H
00H11H
11HXX
00H22H
11H11H
00HXX
44H22H
33H11H
XXXX
XX
XX
XX
二、符号定义伪指令
格式:
符号名EQU表达式
操作:
用符号名取代后边的表达式,不可重新定义
例:
CONSTANTEQU100
VAREQU30H+99H
EQU说明的表达式不占用内存空间
三、段定义伪指令
说明逻辑段的起始和结束;
说明不同程序模块中同类逻辑段之间的联系形
态
段定义伪指令格式
段名SEGMENT[定位类型][组合类型][’类别’]
┇
段名ENDS
说明逻辑段的起点
说明不同模块中同名
段的组和连接方式
定位类型
PARA:
段的起点从节边界开始
(16个字节为1节)
BYTE:
段的起点从存储器任何地址开始
WORD:
段的起点从偶地址开始
PAGE:
段的起点从页边界开始
组合类型
与其它模块中的同名段在满足定位类型的前提
下具有的组合方式:
NONE:
不组合
PUBLIC:
依次连接(顺序由LINK程序确定)
COMMON:
覆盖连接
STACK:
堆栈段的依次连接
AT表达式:
段定义在表达式值为段基的节边界
MEMORY:
相应段在同名段的最高地址处。
类别
不同模块连接时将相同类别的段放在连续的内存区域中
段定义伪指令例
DATASEGMENT
变量在逻辑段中的位置MEM1DB11H,22H
就代表了它的偏移地址MEM2DB‘Hello!
’
MEM3DW2DUP(?
)
DATAENDS
表示变量所在逻辑段的段地址
表示变量的类型
四、设定段寄存器伪指令
说明所定义逻辑段的性质
格式:
ASSUME段寄存器名:
段名[,段寄存器名:
段名,…]
五、结束伪指令
表示源程序结束
格式:
END[标号]
汇编语言源程序结构
数据段名SEGMENT堆栈段名SEGMENT
……
数据段名ENDS堆栈段名ENDS
附加段名SEGMENT代码段名SEGMENT
……
附加段名ENDS
代码段名ENDS
END
一个完整源程序结构例
DSEGSEGMENT
DATA1DB1,2,3DUP(?
)
DATA2DW1234H
DSEGENDS
ESEGSEGMENT
DB20DUP(?
)
ESEGENDS
SSEGSEGMENTSTACK‘STACK’
DB200DUP(?
)
SSEGENDS
一个完整源程序结构例
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG,
ES:
ESEG,SS:
SSEG
START:
MOVAX,DSEG
MOVDS,AX段寄存器初始化
MOVAX,ESEG——将段地址送
MOVES,AX相应的段寄存
MOVAX,SSEG
MOVSS,AX
┇源程序代码
CSEGENDS
ENDSTART
六、过程定义伪指令
用于定义一个过程体
格式:
过程入口的符号地址
过程名PROC[NEAR/FAR]
┇
RET
过程名ENDP
过程定义及调用例
定义延时子程序调用延时子程序:
DELAYPROCCALLDELAY
PUSHBX
PUSHCX
MOVBL,2
NEXT:
MOVCX,4167
W10M:
LOOPW10M
DECBL
JNZNEXT
POPCX
POPBX
RET
DELAYENDP
七、宏命令伪指令
宏源程序中由汇编程序识别的具有独
立功能的一段程序代码
格式:
宏命令名MACRO<形式参数>
┇
┇
ENDM
八、其它伪指令
ORG段内程序代码或变量的起始偏移地址
格式:
ORG表达式
例:
计算值为非负常数
ORG2000H
其它伪指令
NAME-------为目标程序设定一个名字
格式:
NAME模块名
TITLE-------为程序清单指定打印标题
格式:
TITLE标题名
§4.3功能调用
DOS功能调用
BIOS功能调用
DOS功能调用
包含多个子功能的功能包;
用软中断指令调用,中断类型码固定为21H;
各子功能采用功能号来区分。
DOS功能调用
设备管理
目录管理
文件管理
其它
DOS功能调用
调用格式:
MOVAH,功能号
<置相应参数>
INT21H
一、单字符输入
调用方法:
MOVAH,01
INT21H
输入的字符在AL中
单字符输入例
GET_KEY:
MOVAH,1
INT21H
CMPAL,’Y’
JZYES
CMPAL,’N’
JZNO
JMPGET_KEY
YES:
┇
NO:
┇
交互式应
答程序
注意问题:
调用格式
字符输入缓冲区的定义
1.调用格式
AH功能号OAH
DS:
DX字符串在内存中的存放地址
INT21H
2.定义字符缓冲区
用户自定义缓冲区格式:
存放字符个数:
≤255
N1N20DH
存放键入的字符
整个缓冲区
实际键入字符数
最大可键入字符数
输入字符串程序段
DAT1DB20,?
,20DUP(?
)
┇在数据段中定义
LEADX,DAT1
MOVAH,0AH
INT21H
输入缓冲区
定义后的输入缓冲区初始状态:
14H
?
20个字节
三、单字符显示输出
AH功能号O2H
DL待输出字符
INT21H
单字符显示输出例
MOVAH,02
MOVDL,41H
INT21H
执行结果:
屏幕显示A
四、字符串输出显示
AH功能号O9H
DS:
DX待输出字符串的偏移地址
INT21H
字符串输出显示
被显示的字符串必须以‘$’结束,且所显示的
内容不应出现非可见的ASCII码
字符串输出显示例
DATASEGMENT
MESS1DB‘InputString:
’,0DH,0AH,’$’
DATAENDS
CODESEGMENT
┇
MOVAH,09
MOVDX,OFFSETMESS1
INT21H
┇
§4.4汇编语言程序设计
设计步骤:
根据实际问题抽象出数学模型
确定算法
画程序流程图
分配内存工作单元和寄存器
程序编码
调试
程序流程图符号
起始:
功能:
判断:
子过程:
汇编语言程序结构
顺序结构
循环结构
先判定型
后判定型
分枝结构
单分枝
多分枝
子程序结构
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第4章 汇编语言程序设计汇总 汇编语言 程序设计 汇总