程序–在8085微处理器中编写汇编语言程序,以对10个数字序列中的偶数进行计数。
例子 –
假设–从起始存储位置2050存储了10个8位数字。计数值存储在存储位置3050中。
算法 –
- 用20初始化寄存器H,用4F初始化寄存器L,以便间接存储器指向存储器单元204F。
- 用00初始化寄存器C,用0A初始化寄存器D。
- 间接内存增加1。
- 将M的值存储在累加器A中。
- 通过对01进行A的AND运算,检查A中的内容是偶数还是奇数。
- 如果AND运算后A的内容为00,则扫描的数字为偶数;如果是,则将C的数字递增01;否则,如果AND运算后A的内容为01,则扫描的数字为奇数;如果是,则D的数值减01。
- 检查是否未设置零标志,即ZF = 0,然后跳至步骤3,否则将C的值存储在内存位置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 | ANI 01 | A <- A (AND) 01
200B |
JNZ 200F |
Jump if ZF = 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,B,C,D,H,L用于通用。
- LXI H 204F:将20分配给H,将4F分配给L.
- MVI C,00:将00分配给C。
- MVI D,0A:为D分配0A。
- INX H:将间接存储器位置M递增01。
- MOV A,M:将M的内容移动到A。
- ANI 01:对01执行A的AND运算,并将结果存储在A中。
- JNZ 200F:如果ZF = 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:停止执行程序,并停止任何进一步的执行。