问题–编写汇编语言程序以添加存储在连续存储器或数组中的十六进制数字。
假设–假设数组的大小存储在内存位置2050,数组的基地址为2051。总和将存储在内存位置3050,进位将存储在位置3051。
例子 –
算法 –
- 将数组的基地址加载到HL寄存器对中。
- 使用数组的大小作为计数器。
- 将累加器初始化为00。
- 将累加器的内容与存储在HL对中给定存储位置中的内容相加。
- 减少每次添加的计数器。
程序 –
Address | Mnemonics | Comments |
---|---|---|
2000 | LDA 2050 | A <- [2050] |
2003 | MOV B, A | B <- A |
2004 | LXI H, 2051 | H <- 20 and L <- 51 |
2007 | MVI A, 00 | A <- 00 |
2009 | MVI C, 00 | C <- 00 |
200B | ADD M | A <- A+M |
200C | INR L | M <- M+1 |
200D | JNC 2011 | |
2010 | INR C | C <- C+1 |
2011 | DCR B | B <- B-1 |
2012 | JNZ 200B | |
2015 | STA 3050 | 3050 <- A |
2018 | MOV A, C | A <- C |
2019 | STA 3051 | 3051 <- A |
201C | HLT | Terminates the program |
解释 –
- LDA 2050:内容为2050的负载累加器
- MOV B,A:将累加器的内容复制到寄存器B
- LXI H 2051:将20存储到H寄存器并将51存储到L寄存器
- MVI A 00:将00存储到累加器
- MVI C,00:将00存储到寄存器C
- ADD M:添加累加器,并在HL寄存器对中给出存储位置的内容
- INR L:地址增加1
- JNC 2011:如果不携带,则跳至位置2011,否则跳至PC中给定的位置
- INR C:将寄存器C的内容增加1
- DCR B:将寄存器B的内容减1
- JNZ 200B:如果不为零,则跳转到位置200B,否则跳转到PC中给定的位置
- STA 3050:将累加器的内容存储到内存位置3050
- MOV A,C:将寄存器C的内容复制到累加器
- STA 3051:将累加器的内容存储到内存位置3051
- HLT:终止程序