### 微机原理与接口技术之汇编程序流程控制设计 #### 实验概述 本次实验主要涉及微机原理与接口技术课程中的汇编语言编程,具体聚焦于汇编语言的基础流程控制,包括顺序结构、分支结构和循环结构的程序设计。实验在MASM (Microsoft Macro Assembler) 和 LINK (Linker) 环境下进行。 #### 实验目标 - 进一步熟悉汇编语言的汇编工具及编译、执行过程; - 掌握顺序结构的程序设计; - 掌握转移指令和分支程序的设计; - 掌握循环指令和循环程序的设计。 #### 实验内容 ##### 1. 顺序程序设计 **实验题目**: 内存单元 `argx` 中存放一字数据 `x`,计算以下表达式的值:\[ y = \frac{(10x + 23) * 3}{5} \] 其中,假定结果 `y` 为字数据,并存放于 `result` 单元。 **实验要求**: - `x` 的取值为学号的后两位; - 编写流程图; - 编写源程序并加适当注释; - 将 `x`、`y` 单元的值通过 DEBUG 中的 `d` 指令显示,并记录在实验报告中。 **实验代码**: ```asm DATASEGMENT argxDB24 ; x取值为24 resultDB? ; 结果未知 DATAENDS CODESEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV AX, 10 MOV BX, argx MUL BX ; AX = 10 * x ADD AX, 23 ; AX = 10 * x + 23 MOV BX, 3 MUL BX ; AX = (10 * x + 23) * 3 MOV BX, 5 DIV BX ; AX = (10 * x + 23) * 3 / 5 MOV result, AL ; 只保留低8位作为结果 ; 结束程序 MOV AX, 4C00H INT 21H CODEENDS END START ``` ##### 2. 分支程序设计 **实验题目**: 编写程序计算如下分段函数的值: \[ y = \begin{cases} \frac{(2x + 3)}{4}, & -1 < x \leq 10 \\ 5x - 2, & 10 < x < 20 \\ 3|x|, & \text{其他} \end{cases} \] 其中 `x` 为单字节带符号数,并存于 `argx` 单元。结果存于 `result` 单元。 **实验要求**: - 画流程图; - 编写源程序并加适当注释; - 程序测试:在三个区间分别选一个值测试。将 `x`、`y` 单元的值通过 DEBUG 中的 `d` 指令显示,并记录在实验报告中。 **实验代码**: ```asm DATASEGMENT argxDB-7 ; x取值为-7 resultDW? ; 结果未知 DATAENDS CODESEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX ; 分支判断 MOV AX, argx CMP AX, -1 JLE AA ; 如果 x <= -1 跳转到 AA CMP AX, 10 JLE BB ; 如果 -1 < x <= 10 跳转到 BB CMP AX, 20 JL CC ; 如果 10 < x < 20 跳转到 CC JMP DD ; 否则跳转到 DD AA: ; 计算 3|x| MOV BX, argx CALL ABS ; 求绝对值 MOV AX, 3 MUL BX JMP EE BB: ; 计算 (2x + 3) / 4 MOV AX, argx MOVBX, 2 MUL BX ADD AX, 3 MOVCX, 4 DIV CX JMP EE CC: ; 计算 5x - 2 MOV AX, argx MOVBX, 5 MUL BX SUB AX, 2 JMP EE DD: ; 错误处理 JMP EE EE: ; 存储结果 MOV result, AX ; 结束程序 MOV AX, 4C00H INT 21H ; 绝对值子程序 ABS: JNS POSITIVE NEG AX POSITIVE: RET CODEENDS END START ``` ##### 3. 循环程序设计 **实验题目**: 计算表达式 \(\sum_{i=0}^{n} (x_i + y)\),已知 \(x_i\) 存在于 `argx` 开始的单元,\(y\) 存放于 `argy` 单元。结果存于 `result` 单元。 **实验要求**: - 画流程图; - 编写源程序并加适当注释。 **实验代码示例**(简化版): ```asm DATASEGMENT argx DB 1, 2, 3, 4, 5 ; x的多个值 argy DB 10 ; y的值 result DW? ; 结果未知 DATAENDS CODESEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX MOV CX, 5 ; 设置循环次数 MOV BX, 0 ; 初始化累加器 LOOP_START: ADD BL, [argx + SI] ; 加上当前xi ADD BL, argy ; 加上y ADD BX, BL ; 累加结果 INC SI ; 移动到下一个xi LOOP LOOP_START MOV result, BX ; 存储结果 ; 结束程序 MOV AX, 4C00H INT 21H CODEENDS END START ``` #### 总结 本次实验涵盖了汇编语言编程的基本流程控制结构,通过具体实例加深了对汇编语言的理解。通过编写和调试这些简单的程序,不仅熟悉了MASM和LINK工具的使用方法,还掌握了汇编语言中的基本控制结构。这对于后续深入学习微机原理与接口技术有着重要的意义。
剩余8页未读,继续阅读
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助