问题–在8085微处理器中编写汇编语言程序,以检查8位数字的两个半字节是否相等。如果半字节相等,则将00存储在存储位置3050中,否则将FF存储在存储位置3050中。
例子 –
假设–用于检查类似半字节的数字存储在内存位置2050中。
算法 –
- 将内存位置2050的内容加载到A中。
- 在B中移动A的内容。
- 掩盖下半字节并将其存储在寄存器C中。
- 将B的内容移到A中。
- 掩盖高阶半字节并将其存储在A中。
- 通过使用RLC指令4次反转A的内容。
- 借助CMP指令比较A和C的内容。更新8085的标志。
- 现在,如果ZF = 0,则存储FF;否则,如果ZF = 1,则存储00。
- 将最终结果存储在内存位置3050中。
程序 –
MEMORY ADDRESS | MNEMONICS | COMMENT | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2000 | LDA 2050 | A <- M[2050] | ||||||||||||
2003 | MOV B, A | B <- A | ||||||||||||
2004 | ANI 0F | A <- A (AND) 0F | ||||||||||||
2006 | MOV C, A | C <- A | ||||||||||||
2007 | MOV A, B | A <- B | ||||||||||||
2008 | ANI F0 | A <- A (AND) 0F | ||||||||||||
200A | RLC | Rotate content of A left by one bit without carry | ||||||||||||
200B | RLC | Rotate content of A left by one bit without carry | ||||||||||||
200C | RLC | Rotate content of A left by one bit without carry | ||||||||||||
200D | RLC | Rotate content of A left by one bit without carry | ||||||||||||
200E | CMP C | A – C | ||||||||||||
200F | JZ 2018 | Jump if ZF = 1 | ||||||||||||
2013 | MVI A, FF | A <- FF
2015 |
JMP 201A |
Jump to memory location 201A |
2018 |
MVI A, 00 |
A <- 00 |
201A |
STA 3050 |
M[3050] <- A |
201D |
HLT |
END |
|
说明–寄存器A,B,C用于一般用途。
- LDA 2050:将存储位置2050的内容加载到累加器A中。
- MOV B,A:将A的内容移到寄存器B中。
- ANI 0F:对A和0F的内容执行AND运算。将结果存储在A中。
- MOV C,A:将A的内容移动到寄存器C中。
- MOV A,B:在A中移动B的内容。
- ANI F0:对A和F0的内容执行AND运算。将结果存储在A中。
- RLC:将A的内容左移一位而无需进位。使用说明四次以反转数字。
- CMP C:比较A和C的内容。相应地更新8085的标志。
- JZ 2018:如果设置了零标志,则跳转到内存位置2018。
- MVI A,FF:将FF分配给A。
- JMP 201A:跳转到内存位置201A。
- MVI A,00:将00分配给A。
- STA 3050:将A的内容存储在存储器位置3050中。
- HLT:停止执行程序,并停止任何进一步的执行。