微机原理与接口技术,期末冲刺复习资料(三)
接续上文:微机原理与接口技术,期末冲刺复习资料(二)-CSDN博客
点关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!!
持续关注我~~~主页,查看更多内容哟(希望你能在这里有所收获🤭)。点关注,不迷路,哈哈哈!~~~
主页:一位搞嵌入式的 genius-CSDN博客
目录
点关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!!
4. 汇编语言程序设计
4.1 汇编语言源程序
4.1.1 汇编语言源程序的结构
4.1.2 汇编语言语句类型及格式
4.2 伪指令
4.2.1 数据定义伪指令
4.2.2 符号定义伪指令
4.2.3 段定义伪指令
4.2.4 结束伪指令
4.2.5 过程定义伪指令
4.2.6 宏命令伪指令
4.2.7 调整偏移量伪指令
4.2.8 设定段寄存器伪指令
4.2.9 汇编语言源程序结构
4.3 系统功能调用
4.3.1 DOS调用和BIOS调用的基本步骤
4.4 汇编语言程序设计
4.5 重点考点题型
4. 汇编语言程序设计
主要需要掌握内容如下:
-
汇编语言源程序的结构
-
汇编语言语句格式
-
伪指令
-
功能调用
-
汇编语言程序设计
4.1 汇编语言源程序
了解:
-
汇编语言源程序的结构
-
汇编语言语句类型及格式
4.1.1 汇编语言源程序的结构
首先我们需要区分:汇编语言源程序和汇编程序
-
汇编语言源程序:助记符编写
-
汇编程序:源程序的编译程序
汇编语言程序设计与执行过程:
输入汇编源程序 | 产生:ASM文件 |
---|---|
汇编 | 产生:目标文件.OBJ |
链接 | 产生:可执行文件.EXE |
调试 | 最终程序 |
4.1.2 汇编语言语句类型及格式
-
汇编语言语句类型:
-
指令性:CPU执行,生成目标代码
-
指示性:CPU不执行,由汇编程序执行,不生成目标代码
-
-
格式:
-
注意:
-
标号后面有冒号,名字后面没有
-
二者均在指示性语句前
-
-
操作数:
-
寄存器
-
存储器单元
-
常量:数字常量;字符串常量(单引号引起的)
-
变量或标号
-
变量:
代表内存中的数据区,程序中视为存储器操作数。
-
标号:
-
-
表达式:
-
算术运算
-
逻辑运算
-
关系运算
-
取值运算和属性运算:
示例:
MOV AX,SEG DATA MOV DS,AX MOV BX,OFFSET DATA
其中:OFFSET DATA等价于LEA BX,DATA
-
其它运算
方括号: [ ] → 方括号中内容为操作数的偏移地址
段重设符 段寄存器名:[ ] → 用于修改默认的段基地址
-
-
4.2 伪指令
掌握:伪指令的格式、操作及应用
-
由汇编程序执行的“指令系统”
-
作用:
-
定义变量;
-
分配存储区
-
定义逻辑段;
-
指示程序开始和结束;
-
定义过程等。
-
-
常用伪指令:
-
数据定义伪指令
-
符号定义伪指令
-
段定义伪指令
-
结束伪指令
-
过程定义伪指令
-
宏命令伪指令
-
4.2.1 数据定义伪指令
-
用处:定义数据区中的变量大小和类型
-
格式:
注意:变量的类型及其操作数的个数决定了该变量所在内存空间的大小
-
数据定义伪指令助记符
-
DB 定义的变量为字节型
-
DW 定义的变量为字类型(双字节)
-
DD 定义的变量为双字型(4字节)
-
DQ 定义的变量为4字型(8字节)
-
DT 定义的变量为10字节型
举例:
DATA1 DB 11H,22H,33H,44H DATA2 DW 11H,22H,3344H DATA3 DD 11H*2,22H,33445566H
以上事例在内存中的分布:
-
-
说明:
-
伪指令的性质决定了变量的类型
-
定义字符串不需要DB伪指令
-
-
重复操作符:
-
作用: 为一个数据区的各单元设置相同的初值
-
目的: 常用于声明一个数据区
-
格式: [变量名] 伪指令助记符 n DUP(初值,…)
n是重复次数
-
-
?的作用
表示随机值,用于预留存储空间
随机数占1个字节单元
4.2.2 符号定义伪指令
将表达式的值赋给一个名字。当源程序中需多次引用某一表达式时,可以利用EQU伪指令,用一个符号代替表达式,以便于程序维护。
格式: 符号名 EQU 表达式 操作: 用符号名取代后边的表达式,不可重新定义 例: CONSTANT EQU 100 VAR EQU 30H+99H
注意:
EQU说明的表达式不占用内存空间
4.2.3 段定义伪指令
说明逻辑段的起始和结束; 说明不同程序模块中同类逻辑段之间的联系形态
定位类型:
PARA: 段的起点从节边界开始 (16个字节为1节) PAGE: 段的起点从页边界开始 (256个字节为1页) BYTE: 段的起点从存储器任何地址开始 WORD:段的起点从偶地址开始
组合类型:
与其它模块中的同名段在满足定位类型的前提 下具有的组合方式: NONE: 不组合 PUBLIC: 依次连接(顺序由LINK程序确定) COMMON: 覆盖连接 STACK: 堆栈段的依次连接 AT 表达式:段定义在表达式值为段基的节边界 MEMORY: 相应段在同名段的最高地址处。
4.2.4 结束伪指令
表示源程序结束 格式: END [标号]
4.2.5 过程定义伪指令
用于定义一个过程体 格式: 过程名 PROC [ NEAR / FAR ] ┇ RET 过程名 ENDP
过程名:过程入口的符号地址
4.2.6 宏命令伪指令
当 源程序中需要多次使用同一个程序段时,可以将该程序段定义为一个宏 格式: 宏命令名 MACRO <形式参数> ┇ ┇(宏体) ENDM
示例:
4.2.7 调整偏移量伪指令
用处:规定程序或变量在逻辑段中的起始地址
默认情况下:偏移地址为0
利用ORG指令,可以改变起始偏移地址
-
格式: ORG 表达式(非负常数)
-
例:
DATA SEGMENT
ORG 1200H
BUFF DB 1,2 DATA ENDS
以上代码表示的是:变量BUFF的偏 移地址=1200H
4.2.8 设定段寄存器伪指令
说明所定义逻辑段的性质 格式: ASSUME 段寄存器名:段名[,段寄存器名:段名,…]
4.2.9 汇编语言源程序结构
4.3 系统功能调用
DOS中断包括: 设备管理,目录管理,文件管理,其它 在某些情况下,同样的功能既可选择DOS中断,也可选择BIOS中断
4.3.1 DOS调用和BIOS调用的基本步骤
-
将功能号装入AH;
-
将调用参数装入指定的寄存器;
-
按中断类型号调用DOS或BIOS中断(DOS:21H, BIOS:10H/13H/16H) ;
-
检查返回参数是否正确。
一、DOS功能调用
说明:
-
DOS中断是包含多个子功能的功能包;
-
各子功能用功能号区分;
-
用软中断指令调用,中断类型码固定为21H。
调用格式: MOV AH,功能号 <置相应参数> INT 21
-
键盘输入-单字符输入(1号)
通过调用字符输入子功能,可接收从键盘上输入的字符,并以对应的ASCII码形式存放。 调用方法: MOV AH,01 INT 21H 输入的字符存放在AL中
-
键盘输入-字符串输入(10号)
调用格式:
用户自定义缓冲区格式:
-
显示输出-单字符(2号)
-
输出显示-字符串(9号)
注意点:
-
被显示的字符串必须以‘$’结束;
-
所显示的内容不应出现非可见的ASCII码;
-
若考虑输出格式需要,在定义字符串后,加上回车符和换行符。
-
-
返回操作系统(DOS)功能
功能号: 4CH 调用格式: MOV AH,4CH INT 21H 功能: 程序执行完该2条语句后能正常返回OS 常位于程序结尾处。
二、BIOS功能调用
通过中断指令调用相应的BIOS中断服务程序 BIOS中断服务程序实际上是一些对端口的输入输出操作,是微机系统中软件与硬件之间的一个可编程接口。
三、总结
均通过中断指令调用。1个中断类型码对应1个功能程序包; 每个程序包中的子功能通过功能号区分,调用时功能号须送AH; 部分功能既可用DOS中断也可以用BIOS中断; 注意不同子功能的入口/出口参数要求; DOS和BIOS中断均可能影响AX。
4.4 汇编语言程序设计
设计步骤: 根据实际问题抽象出数学模型 确定算法 画程序流程图 分配内存工作单元和寄存器 程序编码 调试
汇编语言程序控制结构的设计
4.5 重点考点题型
一、汇编语言源程序(结构、语句、执行流程)
重点知识:
-
区分汇编语言源程序与汇编程序;
-
熟悉汇编程序从
.ASM
到.EXE
的编译链接调试全过程; -
掌握指令语句格式,如
MOV AX, BX
; -
区分汇编语句类型:指令、伪指令、注释。
常见题型:
-
选择题/判断题:汇编语言源程序经过哪些处理步骤才能执行?
-
填空题:源程序编译后会生成哪个中间文件(答案:
.OBJ
)。 -
简答题:汇编语言的三类语句及其作用是什么?
二、伪指令(重点考点)
伪指令是考试高频点,理解其不生成机器代码但指导编译器工作的本质,是答题关键。
考试高频伪指令及考法:
-
数据定义类(如
DB
,DW
,DD
)-
题型:填空/选择/编程题中使用初始化变量或数组。
-
示例题:
DATA DB 10H, 20H
定义了几个字节?(答案:2)
-
-
符号定义(EQU)
-
题型:填空/选择题;理解
EQU
不占内存。 -
示例题:
VAR EQU 30H+10H
,VAR 值是多少?是否占内存?(答案:40H;不占内存)
-
-
段定义伪指令(SEGMENT/ENDS)
-
题型:解释段的结构或编写段定义。
-
要求明确段的组合方式(PUBLIC、COMMON)及定位方式(PARA、PAGE、BYTE)
-
-
ORG(偏移调整)
-
题型:编程题考你定义特定偏移位置的变量。
-
示例:
ORG 100H
表示从哪儿开始布局变量?
-
-
ASSUME(段寄存器设定)
-
题型:选择/填空题;要求写出正确的段寄存器与段名对应关系。
-
示例题:为何程序执行前要使用
ASSUME CS:CODE, DS:DATA
?
-
-
过程定义与调用(PROC/ENDP)
-
题型:编程题;判断
CALL
使用的是NEAR
还是FAR
调用。 -
示例:写一个带过程调用的完整汇编程序。
-
-
宏定义(MACRO/ENDM)
-
题型:简答题或程序重构题,考查宏命令重复使用逻辑。
-
要求你将一段重复程序段改写成宏。
-
三、系统功能调用(DOS与BIOS中断)
这一部分是汇编与系统编程的交汇点,也是考试中常出简答题、填空题和编程题的核心内容。
考点汇总:
-
DOS中断 INT 21H 调用流程
-
设置功能号到 AH
-
根据功能号设置参数
-
使用
INT 21H
调用
-
-
常见 DOS 功能号
-
AH=01H:输入一个字符
-
AH=02H:输出一个字符(DL 中)
-
AH=09H:显示字符串,以
$
结尾 -
AH=4CH:程序正常返回
-
-
BIOS 中断(如 INT 10H)
-
操作显示器、键盘等硬件。
-
常用于字符/光标控制。
-
常见题型:
-
选择题:
INT 21H
实现哪个功能时需设置AH=4CH
?(答案:程序返回) -
填空题:
AH=09H
功能需要将字符串以哪种符号结尾?(答案:$
) -
编程题:编写程序输出一串字符并等待按键退出。
四、汇编程序设计思路与结构控制
重点内容:
-
设计流程:需求→算法→流程图→内存与寄存器分配→编码调试;
-
程序控制结构:条件判断(
CMP
,JZ
,JNZ
)、循环(LOOP
,DEC/JNZ
)、过程调用; -
数据结构:数组、变量定义;
-
寄存器使用:AX/BX/CX/DX、SP、BP 以及段寄存器。
常见题型:
-
简答题:简述汇编程序的设计流程。
-
程序分析题:给一段含
CMP
,JZ
,LOOP
的程序,问其执行逻辑。 -
程序设计题:如:
-
编写程序比较两个数的大小;
-
输出一个字符串;
-
实现循环累加功能;
-
使用
INT 21H
实现用户交互。
-
五、考题类型分布预测
题型 | 占比 | 典型内容 |
---|---|---|
判断/选择题 | 30% | 概念识别、指令功能、伪指令用途、DOS功能号、指令结构 |
填空题 | 20% | 段定义/偏移、寄存器对应、参数设置 |
简答题 | 20% | 设计流程、伪指令解释、BIOS与DOS中断区别 |
程序阅读题 | 10% | 分析代码逻辑、寄存器变化、内存地址使用情况 |
程序设计/编程题 | 20% | 基于伪指令、调用过程、中断编写简易功能程序(如字符输出、数组求和、条件判断等) |
总结与备考建议
-
牢固理解伪指令的语义和用法,这是填空与编程题的基础;
-
熟记 DOS 常用功能号与中断号调用方式;
-
多做程序设计题,熟悉 AX、BX、CX 等寄存器用途和中断输入输出规则;
-
掌握段与偏移、堆栈、过程调用的配套关系;
-
最后强化调试思维:理解从
.ASM
到.EXE
的全过程,掌握调试思路如单步执行、观察寄存器变化等。