问题–编写汇编语言程序以计算寄存器B的内容中的个数并将结果存储在内存位置3050中。
例子 –
算法 –
- 将累加器中的十进制数转换为其等效的二进制数
- 向右旋转二进制数字的位数,不带进位
- 施加循环直到计数不为零以更改D寄存器和计数的值
- 将D寄存器的值复制到累加器并存储结果
程序 –
MEMORY ADDRESS | MNEMONICS | COMMENTS |
---|---|---|
2000 | MVI B 75 | B ← 75 |
2002 | MVI C 08 | C ← 75 |
2004 | MVI D 00 | D ← 00 |
2006 | MOV A, B | A ← B |
2007 | RRC | Rotate right without carry |
2008 | JNC 200C | Jump if Not Carry |
200B | INR D | D ← D+1 |
200C | DCR C | C ← C-1 |
200D | JNZ 2007 | Jump if Not Zero |
2010 | MOV A, D | A ← D |
2011 | STA 3050 | A → 3050 |
2014 | HLT | Stops execution |
解释 –
- MVI B 75将75十进制数移入B寄存器
- MVI C 08将十进制数字08移到C寄存器中,因为该数字为8位,因此被用作计数器
- MVI D 00将00号移入d寄存器
- MOV A,B将B寄存器的内容移到A(累加器)寄存器中
- RRC右移A的内容(它是75,二进制等效值为01110101)
- 如果进位标志不为零,JNC 200C跳转到200C地址并执行在此写的指令
- INR D通过将其内容加1来增加D寄存器的值
- DCR C通过从其内容中减去1来减少C寄存器的值
- 如果零标志不为零,JNZ 2007会跳转到2007地址并执行在此处写的指令
- MOV A,D将B寄存器的内容移至A寄存器
- STA 3050将A的内容存储在3050存储位置
- HLT停止执行