问题–写一个程序,计算给定的8位数字,使用寄存器B显示起始地址为2000且数字存储在3000存储地址中并将结果存储到3001存储地址中的计数。
例子 –
算法 –
- 立即将00移到寄存器B进行计数
- 立即将08移至寄存器C以进行移位
- 将存储器[3000]的数据加载到累加器中
- 向右旋转“ A”并随身携带
- 如果没有进位则跳转到步骤7
- 否则将寄存器B增加1
- 将寄存器C减1
- 如果不为零,则跳至第4步
- 将寄存器B的内容移入累加器
- 将累加器的内容存储到内存[3001](计数)
- 停止
程序 –
Memory | Mnemonics | Operands | Comment |
---|---|---|---|
2000 | MVI | B, 00 | [B] <- 00 |
2002 | MVI | C, 08 | [C] <- 08 |
2004 | LDA | [3000] | [A] <- [3000] |
2007 | RAR | rotate ‘A’ right with carry | |
2008 | JNC | 200C | jump if no carry |
200B | INR | B | [B] <- [B] + 1 |
200C | DCR | C | [C] <- [C] – 1 |
200D | JNZ | 2007 | jump if not zero |
2010 | MOV | A, B | [A] <- [B] |
2011 | STA | [3001] | number of ones |
2014 | HLT | Stop |
说明–寄存器A,B和C用于一般用途。
- MVI用于立即加载8位给定寄存器(2字节指令)
- LDA用于通过16位地址(3字节指令)直接加载累加器
- MOV用于将数据从累加器传输到寄存器(任意)或将寄存器(任何)传输到累加器(1字节)
- RAR用于带进位的“ A”右移(1字节指令)
- STA用于使用16位地址(3字节指令)将数据从累加器直接存储到存储器中
- INR用于将给定寄存器增加1(1字节指令)
- 如果没有进位(3字节指令),则使用JNC跳转到给定的步骤
- 如果JNZ不为零,则使用JNZ跳至给定步骤(3字节指令)
- DCR用于将给定寄存器减1(1字节指令)
- HLT用于暂停程序