8085程序:求两个给定字节的最大公约数(HCF)
在这个程序中,我们将学习如何使用8085查找两个数字的最大公约数(HCF)或最大公因数(GCD)。
问题陈述
编写8085汇编语言程序,查找存储在内存位置8000H和8001H的两个数字的最大公约数(HCF)。
讨论
这个问题通过欧几里得算法来求解HCF。这个算法非常简单。算法步骤如下:
如果第一个数字和第二个数字相同,则
- 跳转到步骤3。
否则,如果第一个数字 < 第二个数字,则
- 交换第一个数字和第二个数字。
第一个数字 <- 第一个数字 – 第二个数字;跳转到步骤1
显示第一个数字作为结果
值存储在8000H和8001H位置,结果将存储在8050H位置。
输入
第一个输入
地址 | 数据 |
---|---|
... | ... |
8000 | 8000H |
8001 | 69 |
... | ... |
8050 | 0DH |
... | ... |
第二个输入
地址 | 数据 |
---|---|
... | ... |
8000 | 25 |
8001 | 35 |
... | ... |
8050 | 01 |
... | ... |
流程图
程序
地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
---|---|---|---|---|
F000H | 21, 00, 80 | LXI H,8000H | 指向第一个数字 | |
F003H | 7E | MOV A, M | 将第一个数字加载到累加器(Acc) | |
F004H | 23 | INX H | 指向下一个位置 | |
F005H | 46 | MOV B, M | 加载第二个数字 | |
F006H | B8 | LOOP: | CMP B | 比较B和A |
F007H | CA 17 F0 | JZ STORE | 当A和B相同时,存储结果 | |
F00AH | DA 11 F0 | JC EXG | 如果B > A,则交换B和A | |
F00DH | 90 | SUB B | 如果B < A,则从A中减去B | |
F00EH | C3 06 F0 | JMP LOOP | 跳转到LOOP | |
F011H | 48 | EXG: | MOV C,B | 将B加载到C |
F012H | 47 | MOV B, A | 将A移动到B | |
F013H | 79 | MOV A, C | 将C移动到A | |
F014H | C3 06 F0 | JMP LOOP | 跳转到LOOP | |
F017H | 32, 50, 80 | STORE: | STA 8050H | 将值存储到内存中 |
F01AH | 76 | HLT | 终止程序 |
输出
第一个输出
地址 | 数据 |
---|---|
... | ... |
8050 | 0DH |
... | ... |
第二个输出
地址 | 数据 |
---|---|
... | ... |
8050 | 01 |
... | ... |
广告