导图社区 4.汇编语言程序设计
这是一篇关于4.汇编语言程序设计的思维导图
编辑于2022-02-27 17:17:53汇编语言程序设计
汇编语言语句的分类
指令性语句
能产生目标代码,由CPU执行的特定功能的语句
指示性语句
不产生目标代码,仅在汇编过程中告诉汇编程序如何完成数据的定义,符号定义,段定义,过程定义等
宏指令语句
可以把多次使用的程序段定义为一条宏指令,调用时用宏指令代替
汇编语句的格式
格式:[名字项] 助记符 操作数 [;注释]
名字项
标号
主要用于表示一条指令的位置
标号具有三个属性,段地址,偏移地址,类型
类型有 NEAR(-1近程)表示标号供段内使用,FAR(-2远程)表示标号可供段间使用
变量名
用于保存程序中要用到的可变的量
具有5个属性:段地址,偏移地址,类型,长度,大小
属性操作符
sge 取段地址
offset 取偏移地址
type 类型
length 长度 dup的系数
size 所占的字节数
PTR操作符
可以暂时改变变量或标号的类型
格式:类型 PTR 表达式
助记符
包括指令助记符和伪指令助记符
操作数
操作数可以是寄存器,变量,常量,也可以是表达式
注释
对指令加以说明,便于理解、
汇编语言伪指令
符号定义伪指令
符号定义伪指令是给一个符号重新命名
赋值语句 EQU
格式:符号名 EQU 表达式
将表达式的值赋给符号名,经EQU定义的符号名只能定义一次,不占用内存单元
等号语句 =
格式:符号名 = 表达式
与EQU具有相同的功能,但可以被重新定义,不占用内存单元
数据定义伪指令
格式:变量名 伪操作助记符 操作数
DB
定义变量为字节类型,其后的每个操作数都占一个字节
DW
定义变量为字类型,其后的每个操作数都占两个字节
DD
定义变量为双字类型,其后的每个操作数都占两个字,即四个字节
DQ
定义变量为四字类型,其后的每个操作数都占四个字,即八个字节
DT
定义变量为十个字节,其后的每个操作数都占十个字节
重复数据操作符DUP
格式: 变量名 伪操作助记符 个数 DUP(内容)
定义重复数据,内容可以为 ' ? '
段定义伪指令
segment/ends段定义伪指令
格式:段名 sgement ......(内容)..... 段名 ends
assume伪指令
格式: assume 段寄存器:段名,段寄存器:段名
assume伪指令说明段名和段基址寄存器之间的关系,但不能给段寄存器赋值,段寄存器的值需要在代码段中由指令性语句赋值
子程序定义伪指令
格式:子程序名 PROC [属性] ......(过程体)..... RET 子程序名 ENDP
其中过程名是子程序的入口地址,属性可以是NEAR(段内调用)或FAR(段间调用),默认为FAR
地址定位伪指令ORG
格式:ORG 表达式
功能:指定后面的指令或数据从表达式指出的地址(偏移地址)开始存放
汇编指针计数器 $
它表示当前伪指令的偏移地址
开始与结束伪指令name,end
name
格式:name 程序名字
end
格式:end 表达式
表达式是该程序第一条可执行语句的标号,end语句表示源程序的结束
21h DOS功能调用
DOS系统功能调用的方法
1.根据所需的功能设置入口参数
2.把功能调用号送AH寄存器
3.发送中断指令 INT 21h
4.根据功能调用的说明取得出口参数
常用的DOS功能调用
输入单个字符
1,7,8号功能。1号功能接收键盘输入的字符并保存在AL中,同时显示在屏幕上,7,8号功能接受键盘输入的字符保存在AL中但不显示
入口参数:无
格式: mov ah,1 int 21h
功能:从键盘输入字符的ascll码送入寄存器AL中,并送显示器显示
输入字符串
0Ah号功能调用,从键盘输入字符串到指定的内存区域
入口参数:DS:DX 为输入字符存放的区域,区域的第一个字节为允许输入最大字符个数(包括回车符),第二个字节存放实际输入的字符个数,从第三个字节开始存放输入的字符串
格式: BUFF db (允许输入最大个数),(实际存放个数),(存储字符) mov dx,offset BUFF mov ah,0ah int 21h
显示单个字符
2号功能:显示单个字符
入口参数:DL,将待显示字符的ASCII码送入DL寄存器
格式: mov DL, 带显示字符的ASCII码 mov AH, 02h INT 21H
显示字符串
9号功能:将字符串显示在屏幕上
入口参数: DS:DX,字符串必须以‘$’结尾
格式:LEA DX,待显示字符串的首偏移地址 mov ah,09h int 21h
返回操作系统
4cH号功能:使程序正常结束并返回操作系统
格式: MOV AH,4CH INT 21H
运算符
算术运算符
+,-,*,/,MOD(取余),SHL(左移),SHR(右移)
逻辑运算符
AND,OR,NOT,XOR
关系运算符
EQ(等于),NE (不等) ,LT (小于),GT (大于),LE (小于等于),GE (大于等于)
分析运算符
SEG 运算符
取段地址运算符,该运算符返回变量或标号所在段地址
格式 : SEG 变量名或标号名
OFFSET 运算符
取段内偏移量符,该运算返回变量或标号所在段的段内偏移量
格式:OFFSET 变量名或标号
TYPE 运算符
取类型属性运算符,该运算返回变量或标号的类型属性
格式:TYPE 变量名或标号名
若运算类型是标号,则返回标号的距离属性,标号NEAR和FAR的类型值TYPE分别为-1和-2,若运算对象是变量,则返回变量类型所占字节数
LENGTH 运算符
LENGTH运算符是用来回送分配给该变量的单元数。当变量是用重复 数据操作符 DUP定义的,则返回 DUP前面的数值,如果没有DUP说明,则返回值总是 1
格式:LENGTH 变量
SIZE 运算符
该运算符返回变量所占的总字节数
格式:SIZE 变量
合成运算符
: 运算符
格式:段超越前缀:变量或地址表达式
用来给变量,标号或地址表达式临时指定一个段属性
PTR 运算符
格式:类型 PTR 表达式
PTR 运算符赋予变量或地址表达式一个指定的‘类型’属性
THIS 运算符
格式:THIS 类型
EQU与THIS连用,给指定变量,标号定义新的类型或距离属性,与它下一个数据定义语句的段地址和偏移地址相同
程序的结构
顺序结构程序
是一种最简单的程序结构,按照指令的书写顺序一个语句紧跟一个语句执行
分支结构程序
条件的判断是先由执行指令CMP,TEST后产生状态标志位,再由条件转移指令Jcc根据标志位的各种情况进行转移,以确定不同的处理过程。
单分支结构
只有一个分支有语句执行,另一个分支没有语句执行
双分支结构
两个分支都有语句执行,条件成立执行第2个分支语句,否则执行第一个分支语句体
多分支结构
有多种条件的情况采用多分支结构,每一个条件对应各自的分支语句体,即从多个分支选择一个分支执行
循环程序结构
凡是重复执行的操作均可用循环程序来实现
初始化部分
为循环体做准备工作,即进行初始状态的设置
循环体
每次都要重复执行的程序段,用于完成各种操作。
修改部分
为循环的正确执行,对参数进行修改
控制部分
需要选择一个恰当的循环条件保证程序按预定的循环次数或某种条件正常循环或结束
子程序结构
一个完整的独立的程序段,它可以多次被其他程序调用,并在这个程序执行完毕后返回到原调用的程序处
主程序调用子程序需要用CALL指令,子程序返回子程序需要用RET指令
汇编语言程序设计基本步骤
建立数学模型
确定算法
画出流程图
编写汇编源程序
上机调试
进行汇编语言程序设计的步骤
编辑源文件,形成 .asm源文件
用汇编程序把 .asm源文件汇编成目标文件 .obj
用连接程序 把 .obj文件转换成 .exe文件
运行 .exe 文件
若有错,用debug调试