问题–写一个程序减去两个16位数字,起始地址为2000 ,数字位于3000和3002存储器地址,然后将结果存储到3004和3006存储器地址。
例子 –
算法 –
- 将0000H加载到CX寄存器中(供借用)
- 从内存3000将数据加载到AX(累加器)
- 从存储器3002将数据加载到BX寄存器中
- 用累加器AX减去BX
- 如果没有借钱就跳
- CX递增1
- 将数据从AX(累加器)移至内存3004
- 将数据从CX寄存器移至内存3006
- 停止
程序 –
Memory | Mnemonics | Operands | Comment |
---|---|---|---|
2000 | MOV | CX, 0000 | [CX] <- 0000 |
2003 | MOV | AX, [3000] | [AX] <- [3000] |
2007 | MOV | BX, [3002] | [BX] <- [3002] |
200B | SUB | AX, BX | [AX] <- [AX] – [BX] |
200D | JNC | 2010 | Jump if no borrow |
200F | INC | CX | [CX] <- [CX] + 1 |
2010 | MOV | [3004], AX | [3004] <- [AX] |
2014 | MOV | [3006], CX | [3006] <- [CX] |
2018 | HLT | Stop |
解释 –
- MOV用于加载和存储数据。
- SUB用于减去两个数字,其中一个数字是否在累加器中。
- JNC是一个2位命令,用于检查借位是否从累加器生成。
- INC用于将寄存器加1。
- HLT用于停止程序。
- AX是一个累加器,用于加载和存储数据。
- BX,CX是通用寄存器,其中BX用于存储第二个数字,CX用于存储借位。