问题–在8085微处理器中编写汇编语言程序以访问标志寄存器,并与寄存器B交换标志寄存器F的内容。
例子 –
假设–标志寄存器,寄存器B和堆栈指针的初始值分别为00、3F和3FFF。
PSW代表PROGRAM STATUS WORD(程序状态字) 。 PSW将累加器A和标志寄存器F组合在一起。
算法 –
- 通过PUSH指令将PSW的值压入存储器堆栈
- 弹出标志寄存器的值,并借助POP指令将其存储在寄存器H中
- 将寄存器H的值移到寄存器C中
- 将寄存器B的值移到寄存器H中
- 将寄存器C的值移到寄存器B中
- 通过PUSH指令将寄存器H的值压入存储器堆栈
- 使用POP指令从存储器堆栈中弹出PSW的值
程序 –
MEMORY ADDRESS | MNEMONICS | COMMENT | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2000 | PUSH PSW | Push value of accumulator and flag in stack | ||||||||||||
2001 | POP H | Pop value from TOP of memory stack in H | ||||||||||||
2002 | MOV C, H | C <- H | ||||||||||||
2003 | MOV H, B | H <- B
2004 |
MOV B, C |
B <- C |
2005 |
PUSH H |
Push the value of register H |
2006 |
POP PSW |
Pop value of flag register and Accumulator |
2007 |
HLT |
END |
|
说明–使用的寄存器A,B,C,H,F
- PUSH PSW指令执行以下任务:
SP <- SP - 1 M[SP] <- A SP <- SP - 1 M[SP] <- F
- POP H指令执行以下任务:
H <- M[SP] SP <- SP + 1
- MOV C,H –将H的值移动到寄存器C中
- MOV H,B –将B的值移动到寄存器H中,因此H被更新
- MOV B,C –移动寄存器B中C的值,因此B被更新
- PUSH H执行以下任务:
SP <- SP - 1 M[SP] <- H
- POP PSW执行以下任务:
F <- M[SP] SP <- SP + 1 A <- M[SP] SP <- SP + 1
- HLT –停止执行程序,并停止任何进一步的执行