8085微处理器中添加两个多字节数的程序
在本节中,我们将看到一个Intel 8085微处理器程序。该程序主要用于添加多字节数。
问题陈述−
编写一个8085汇编语言程序来添加两个多字节数。
讨论−
我们使用4字节数。这些数字存储在内存位置8501H和8505H中。一个额外的信息存储在位置8500H。在这里,我们存储字节计数。结果存储在位置85F0H。
HL对存储第一个操作数字节的地址,DE存储第二个操作数字节的地址。C保存字节计数。我们使用堆栈来存储结果的中间字节。完成加法运算后,我们从堆栈中弹出并存储到目标位置。
输入
地址 | 数据 |
---|---|
… | … |
8500 | 04 |
8501 | 19 |
8502 | 68 |
8503 | 12 |
8504 | 85 |
8505 | 88 |
8506 | 25 |
8507 | 17 |
8508 | 20 |
… | … |
流程图
程序
地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
---|---|---|---|---|
F000 | 31, 00, 20 | LXI SP,2000H | 初始化堆栈指针 | |
F003 | 21, 00, 85 | LXI H,8500H | 加载内存地址以获取字节计数 | |
F006 | 4E | MOV C,M | 将内存内容加载到C寄存器 | |
F007 | 06, 00 | MVI B,00H | 清除B寄存器 | |
F009 | 21, 01, 85 | LXI H, 8501H | 加载第一个参数地址 | |
F00C | 11, 05, 85 | LXI D, 8505H | 加载第二个参数地址 | |
F00F | 1A | LOOP | LDAX D | 使用第二个操作数地址加载DE |
F010 | 8E | ADC M | 将内存内容和进位与累加器相加 | |
F011 | F5 | PUSH PSW | 将累加器内容存储到堆栈中 | |
F012 | 04 | INR B | 推入堆栈后增加b | |
F013 | 23 | INX H | 增加HL对以指向下一个地址 | |
F014 | 13 | INX D | 增加DE对以指向下一个地址 | |
F015 | 0D | DCR C | 减少c,直到所有字节都未耗尽 | |
F016 | C2, 0F, F0 | JNZ LOOP | 当字节未被考虑时,再次循环 | |
F019 | D2, 20, F0 | JNC SKIP | 当进位=0时,跳转到存储 | |
F01C | 3E, 01 | MVI A,01H | 当进位=1时,将其推入堆栈 | |
F01E | F5 | PUSH PSW | 将累加器内容存储到堆栈中 | |
F01F | 04 | INR B | 推入堆栈后增加b | |
F020 | 21, F0, 85 | SKIP | LXI H,85F0H | 加载目标指针 |
F023 | F1 | L1 | POP PSW | 弹出AF以从堆栈中取回字节 |
F024 | 77 | MOV M,A | 将Acc数据存储在HL指向的内存位置 | |
F025 | 23 | INX H | 增加HL对以指向下一个地址 | |
F026 | 05 | DCR B | 减少B | |
F027 | C2, 23, F0 | JNZ L1 | 转到L1以存储堆栈内容 | |
F02A | 76 | HLT | 终止程序 |
输出
地址 | 数据 |
---|---|
… | … |
85F0 | 00 |
85F1 | A5 |
85F2 | 29 |
85F3 | 8D |
85F4 | A1 |
… | … |
广告