基于X内容对两个数字进行运算的8085程序
现在让我们来看一个Intel 8085微处理器的程序。在这个程序中,我们将看到如何根据选择执行不同的操作。
问题陈述:
编写8085汇编语言程序,根据选择对两个8位二进制数执行一些运算。
讨论:
在这个程序中,我们进行选择。选择值存储在内存位置8000H(命名为X)。数字存储在位置8001H和8002H。我们将结果存储在位置8050H和8051H。
如果选择是00H,则执行加法;如果是01H,则执行减法;如果是02H,则执行乘法运算。
输入:
第一个输入
| 地址 | 数据 |
|---|---|
| . . . | . . . |
| 8000 | 00 |
| 8001 | 97 |
| 8002 | 88 |
| . . . | . . . |
第二个输入
| 地址 | 数据 |
|---|---|
| . . . | . . . |
| 8000 | 01 |
| 8001 | 97 |
| 8002 | 88 |
| . . . | . . . |
第三个输入
| 地址 | 数据 |
|---|---|
| . . . | . . . |
| 8000 | 02 |
| 8001 | 05 |
| 8002 | 04 |
| . . . | . . . |
流程图:


程序:
| 地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
|---|---|---|---|---|
| F000 | 21, 00, 80 | LXI H,8000H | 指向获取选择 | |
| F003 | 7E | MOV A,M | 将选择加载到A | |
| F004 | FE, 00 | CPI 00H | 比较加法 | |
| F006 | CA,14, F0 | JZ ADD | 跳转到加法 | |
| F009 | FE, 01 | CPI 01H | 比较减法 | |
| F00B | CA,26, F0 | JZ SUB | 跳转到减法 | |
| F00E | FE, 02 | CPI 02H | 比较乘法 | |
| F010 | CA, 38, F0 | JZ MUL | 跳转到乘法 | |
| F013 | 76 | HLT | 终止程序 | |
| F014 | 23 | ADD | INX H | 指向第一个操作数 |
| F015 | 7E | MOV A,M | 将操作数加载到A | |
| F016 | 23 | INX H | 指向下一个操作数 | |
| F017 | 86 | ADD M | 将M与A相加 | |
| F018 | 6F | MOV L,A | 将A存储到L | |
| F019 | D2, 21, F0 | JNC SKP1 | 如果CY = 0,则跳转到SKP1 | |
| F01C | 26, 01 | MVI H,01H | 将H加载为01H | |
| F01E | C3, 49, F0 | JMP STORE | 存储结果 | |
| F021 | 26, 00 | SKP1 | MVI H,00H | 清除HL |
| F023 | C3, 49, F0 | JMP STORE | 将HL存储为结果 | |
| F026 | 23 | SUB | INX H | 指向第一个操作数 |
| F027 | 7E | MOV A,M | 将操作数加载到A | |
| F028 | 23 | INX H | 指向下一个操作数 | |
| F029 | 96 | SUB M | 从A中减去第二个操作数 | |
| F02A | 6F | MOV L,A | 将A存储到L | |
| F02B | D2, 33, F0 | JNC SKP2 | 如果CY = 0,则跳转到SKP2 | |
| F02E | 26, FF | MVI H,FFH | 将H加载为FFH | |
| F030 | C3, 49, F0 | JMP STORE | 存储结果 | |
| F033 | 26, 00 | SKP2 | MVI H,00H | 清除HL |
| F035 | C3, 49, F0 | JMP STORE | 将HL存储为结果 | |
| F038 | 23 | MUL | INX H | 指向第一个操作数 |
| F039 | 5E | MOV E,M | 将操作数加载到E | |
| F03A | 16, 00 | MVI D,00H | 清除D寄存器 | |
| F03C | 23 | INX H | 指向下一个操作数 | |
| F03D | 4E | MOV C,M | 加载第二个操作数 | |
| F03E | 21, 00, 00 | LXI H,0000H | 清除HL对 | |
| F041 | 19 | LOOP | DAD D | 将第一个操作数添加到HL |
| F042 | 0D | DCR C | 递减C | |
| F043 | C2, 41, F0 | JNZ LOOP | 如果Z = 0,则跳转到LOOP | |
| F046 | C3, 49, F0 | JMP STORE | 存储结果 | |
| F049 | 22, 50, 80 | STORE | SHLD 8050H | 从HL存储结果 |
| F04C | 76 | HLT | 终止程序 |
输出:
第一个输出
| 地址 | 数据 |
|---|---|
| . . . | . . . |
| 8050 | 1F |
| 8051 | 01 |
| . . . | . . . |
第二个输出
| 地址 | 数据 |
|---|---|
| . . . | . . . |
| 8050 | 0F |
| 8051 | 00 |
| . . . | . . . |
第三个输出
| 地址 | 数据 |
|---|---|
| . . . | . . . |
| 8050 | 14 |
| 8051 | 00 |
| . . . | . . . |
广告
数据结构
网络
关系型数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP