问题–在8085微处理器中编写汇编语言程序,以对10个数字序列中小于0A的元素数进行计数。
例子 –
假设–从起始存储位置2050存储10个数字序列。计数值存储在存储位置3050
算法 –
- 用20初始化寄存器H,用4F初始化寄存器L,以便间接存储器指向存储器单元204F。
- 用00初始化寄存器C,用0A初始化寄存器D。
- 将间接内存增加01。
- 将M的内容移动到累加器A中。
- 在CPI指令的帮助下,将A的内容与0A进行比较。该指令将更新8085的标志。
- 检查是否设置了进位标志,如果为true,则将C的内容加01。
- D的内容减01。
- 检查是否重置了零标志,如果为true,则跳至步骤3。
- 将C的内容移到A。
- 将A的内容存储到内存位置3050。
程序 –
MEMORY ADDRESS | MNEMONICS | COMMENT |
---|---|---|
2000 | LXI H 204F | H <- 20, L <- 4F |
2003 | MVI C, 00 | C <- 00 |
2005 | MVI D, 0A | D <- 0A |
2007 | INX H | M <- M + 01 |
2008 | MOV A, M | A <- M |
2009 | CPI 0A | A – 0A |
200B | JNC 200F | Jump if CY = 0 |
200E | INR C | C <- C + 01 |
200F | DCR D | D <- D – 01 |
2010 | JNZ 2007 | Jump if ZF = 0 |
2013 | MOV A, C | A <- C |
2014 | STA 3050 | M[3050] <- A |
2017 | HLT | END |
说明–寄存器A,C,D,H,L用于通用。
- LXI H 204F:将20分配给寄存器H,将4F分配给寄存器L
- MVI C,00:将00分配给寄存器C
- MVI D,0A:将0A分配给寄存器D
- INX H:将间接存储位置增加01
- MOV A,M:将间接存储器位置M的内容移动到累加器A
- CPI 0A:从A的内容中减去0A并更新8085的标志
- JNC 200F:如果CY = 0则跳转到存储位置200F
- INR C:将C的内容增加01
- DCR D:将D的内容减01
- JNZ 2007:如果ZF = 0则跳转到内存位置2007
- MOV A,C:将C的内容移至A
- STA 3050:将A的内容存储在内存位置3050中
- HLT:停止执行程序并停止任何进一步的执行