问题–编写汇编级语言程序,将8位BCD编号转换为其相应的ACSII代码。
假设–
程序的起始地址:2000
输入存储器位置:2050
输出存储器位置:3050和3051
数字的ASCII码0 – 9
例子 –
算法 –
- 在累加器中输入2050的内容
- 将累加器的内容移至寄存器B
- 使用AND与0F和ADD 30分隔最低有效位到累加器
- 将累加器的内容存储到内存位置3050
- 将寄存器B的内容移至累加器
- 使用AND与F0分隔最高有效位
- 旋转累加器内容4次
- 向累加器加30
- 将累加器的内容存储到内存位置3051
程序 –
Address | Mnemonics | Comments |
---|---|---|
2000 | LDA 2050 | A <- [2050] |
2003 | MOV B, A | B <- A |
2004 | ANI 0F | A <- A & 0F |
2006 | ADI 30 | A <- A + 30 |
2008 | STA 3050 | [3050]<-A |
200B | MOV A, B | A <- B |
200C | ANI F0 | A <- A & F0 |
200E | RLC | Rotate A left |
200F | RLC | Rotate A left |
2010 | RLC | Rotate A left |
2011 | RLC | Rotate A left |
2012 | ADI 30 | A <- A + 30 |
2014 | STA 3051 | [3051]<-A |
2017 | HLT | Stop Execution |
解释 –
- LDA 2050将存储器位置2050的内容加载到累加器
- MOV B,A将累加器的内容复制到寄存器B
- ANI 0F和立即数为0F的累加器的内容
- ADI 30 ADD 30累加器
- STA 3050将累加器的内容存储到内存位置3050
- MOV A,B将寄存器B的内容复制到累加器
- ANI F0和带有立即数据F0的累加器的内容
- RLC将累加器的内容向左旋转而不带进位
- RLC将累加器的内容向左旋转而不带进位
- RLC将累加器的内容向左旋转而不带进位
- RLC将累加器的内容向左旋转而不带进位
- ADI 30 ADD 30累加器
- STA 3051将累加器的内容存储到内存位置3051
- HLT停止执行程序