问题:编写汇编级语言程序以将HEX代码转换为其相应的ASCII代码。
假设程序的起始地址和输入存储位置分别为2000和2050。
例子:
Input: 2050 E4 (Hex data)
Output:
2051 34 (ASCII code for 4)
2052 45 (ASCII code for E)
算法:
- 将给定数据加载到累加器中并移至B寄存器
- 屏蔽累加器中十六进制十进制数的最高有效4位(上部半字节)。
- 调用子例程以获取最低有效4位的ASCII。
- 将其存储在内存中
- 将B寄存器移至累加器并屏蔽最低有效4位(低半字节)。
- 旋转上下半字节位置。
- 调用子例程以获取高位半字节的ASCII
- 将其存储在内存中
- 终止程序。
代码:
MEMORY ADDRESS | MNEMONICS | COMMENTS |
---|---|---|
2000 | LDA 2050H | Load the hex data |
2003 | MOV B, A | move content of accumulator to B |
2004 | ANI OFH | mask upper nibble |
2006 | CALL SUB1 | get ascii code for upper nibble |
2009 | STA 2051H | |
2012 | MOV A, B | move content of B to accumulator |
2013 | ANI F0H | mask lower nibble |
2015 | RLC | |
2016 | RLC | |
2017 | RLC | |
2018 | RLC | |
2019 | CALL SUB1 | get ascii code for lower nibble |
2022 | STA 2052H | |
2025 | HLT | |
SUB1 | CPI 0AH | |
JC SKIP | ||
ADI 07H | ||
SKIP | ADI 30H | |
RET |
解释:
- LDA 2050H:在累加器中加载存储单元2050H的内容。
- MOV B,A:将累加器的内容复制到寄存器B。
- ANI OFH:在累加器和0FH值之间执行AND操作。
- CALL SUB1:调用存储位置SUB1上的子例程。
- STA 2051H:将累加器的内容存储在内存位置2051H中。
- MOV A,B:将寄存器B的内容复制到累加器。
- ANI F0H:在累加器和F0H值之间执行AND操作。
- RLC:向左旋转蓄能器。
- HLT:停止执行程序,并停止任何进一步的执行。
- CPI 0AH:将累加器内容与0AH值进行比较。
- JC SKIP:如果进位设置为1,则跳转到存储位置SKIP。
- ADI 07H:将07H值添加到累加器的内容中。
- RET:无条件地从子程序返回。