问题–在8085微处理器中编写汇编语言程序,以查找最大和最小10个数字。
例子 –
Minimum: 01H, Maximum: FFH
在CMP指令中:
如果累加器>寄存器,则进位和零标志被重置
如果累加器=寄存器,则置零标志
如果累加器<寄存器,则进位标志置位
假设–从2050H到2059H的数字列表,并在2060H和2061H输出。
算法 –
- 最大数量存储在B寄存器中,最小数量存储在C寄存器中
- D寄存器中的加载计数器
- 加载累加器中的启动元素,B和C寄存器
- 比较累加器和B寄存器
- 如果未设置进位标志,则将累加器的内容传输到B。否则,将累加器与C寄存器进行比较;如果设置了进位标志,则将累加器的内容传输到C
- 递减D寄存器
- 如果D> 0,则取累加器中的下一个元素,然后转到点4
- 如果D = 0,则将B和C寄存器存储在内存中
- 程序结束
程序-
Address | Label | Instruction | Comment |
---|---|---|---|
2000H | LXI H, 2050H | Load starting address of list | |
2003H | MOV B, M | Store maximum | |
2004H | MOV C, M | Store minimum | |
2005H | MVI D, 0AH | Counter for 10 elements | |
2007H | LOOP | MOV A, M | Retrieve list element in Accumulator |
2008H | CMP B | Compare element with maximum number | |
2009H | JC MIN | Jump to MIN if not maximum | |
200CH | MOV B, A | Transfer contents of A to B as A > B | |
200DH | MIN | CMP C | Compare element with minimum number |
200EH | JNC SKIP | Jump to SKIP if not minimum | |
2011H | MOV C, A | Transfer contents of A to C if A < minimum | |
2012H | SKIP | INX H | Increment memory |
2013H | DCR D | Decrement counter | |
2014H | JNZ LOOP | Jump to LOOP if D > 0 | |
2017H | LXI H, 2060H | Load address to store maximum | |
201AH | MOV M, B | Move maximum to 2060H | |
201BH | INX H | Increment memory | |
201CH | MOV M, C | Move minimum to 2061H | |
201DH | HLT | Halt |
解释 –
- 将所有元素一一与B和C寄存器进行比较。
- 将元素与最大值进行比较,如果元素大于最大值,则将其存储在B寄存器中。否则,将其与最小值进行比较,如果小于最小值,则将其存储在C regiter中。
- 循环执行10次。
- 在10次迭代结束时,最大值和最小值分别存储在2060H和2061H中。