汇编语言程序设计 实验报告-1
1. 实验目的
- 掌握顺序程序设计方法
- 掌握分支程序的结构及分支程序的设计、调试方法
- 学习数据传送及算术和逻辑运算指令的用法
- 熟悉在 PC 机上建立、汇编、连接、调试和运行汇编语言程序的过程
2. 实验内容
2.1 任务一
有一字变量 BUF1 是以原码表示的有符号数,要求将其转换为反码和补码,分别存入 BUF2 和 BUF3 单元,并在屏幕上显示出来。
▶
Code
1 | |
2.2 任务二
有两个两字节无符号数分别放在存储单元 A、B 起始的缓冲器中,求其和。结果放在 A 起始的缓冲区并在屏幕上显示。相加若有进位不存入存储单元。
▶
Code
1 | |
2.3 任务三
在 BUF 和 BUF+1、BUF+2 单元分别放有一个无符号字节型数,编程序将其中最大数存入 MAX 单元,并在屏幕上显示。
▶
Code
1 | |
2.4 任务四
在 BUF 和 BUF+1、BUF+2 单元分别放有一个有符号字节型数,编程序将其中最大数存入 MAX 单元,并在屏幕上显示。
▶
Code
1 | |
2.5 任务五
将 1000H 单元开始的 10 个字节数,采用奇偶校验,将奇数在前偶数在后仍存回原数据区。本实验要求在 DEBUG 调试状态下进行,包括汇编程序、运行程序、检查结果。
▶
Code
1 | |
2.6 任务六
从键盘上接收一位十进制数 X,计算 Y 值,并以十六进制形式显示出来,Y 按下列公式计算。
$$
Y = \begin{cases}
X^2 + X & (X=3) \
X^2 - 2X & (X=4) \
X^2 & (X=5) \
\frac{X^2}{2} & (X=6)
\end{cases}
$$
▶
Code
1 | |
2.7 任务七
从键盘上接收两个一位十六进制数 X 和 Y,然后再输入一个 A-D 之间的一个字符,按下列要求计算。
- 当输入字符为 A,则计算 X+Y,并以十六进制形式显示出来
- 当输入字符为 B,则计算 X-Y,并以十六进制形式显示出来
- 当输入字符为 C,则计算 X*Y,并以十六进制形式显示出来
- 当输入字符为 D,则计算 X/Y,并以十六进制形式显示出来
▶
Code
1 | |
3. 调试步骤
- 分析题目,将程序中的原始数据和最终结果的存取方法确定好
- 画出流程图
- 写出源程序
- 对程序中的结果进行分析,并准备好上机调试与用汇编程序及汇编调试的过程
4. 分析与思考
- 常用指令
| 指令 | 指令功能 |
|---|---|
| mov reg, data | reg = data |
| add reg, data | reg = reg + data |
| sub reg, data | reg = reg - data |
| mul reg | ax = ax * reg |
| div reg | 当 reg 为 8 位, ah = ax / reg, al = ax % reg. 当 reg 为 16 位, ax = ax / reg, dx = ax % reg. |
| cmp a, b | a == b zf = 1 a != b zf = 0 a < b cf = 1 a >= b cf = 0 a > b cf = 0, zf = 0 a <= b cf = 1, zf = 1 |
| jb tag | 当 cf = 1, 跳转到 tag |
| je tag | 当 zf = 1, 跳转到 tag |
| jmp tag | 无条件跳转到 tag |
- 标志位寄存器
| 寄存器 | 功能 |
|---|---|
| sf | 符号标志位, 运算结果为负时为 1 |
| cf | 进位标志位(无符号数)当向最高位进位或借位时为 1 |
| of | 溢出标志位(有符号数)当有符号数运算发生溢出时为 1 |
- 汇编分支程序的实现
程序设计过程中,需要根据给定条件选择执行的代码片段时,需要程序实现跳转程序指针到指定代码片段的功能,8086 提供的多个跳转语句可配合程序标号一同使用。
编译时,编译器将自动把程序标号替换为对应指令的地址。因此,通过合理的设计标号,配合运算指令对寄存器的更改效果,可利用不同的跳转指令实现程序的分支选择。
附录
文件列表
- 8086-8088 汇编语言指令表.pdf
下载地址
- 蓝奏云链接:https://unrealfeathers.lanzouu.com/iHYAc2srr42b
- 蓝奏云提取密码:31va
汇编语言程序设计 实验报告-1
https://flowerdown.org/posts/20221217-141104