问题–在8086中编写汇编语言程序以打印输入整数表。
假设–假设输入的数字位于存储位置500,并且表格将从起始位置600到609以十六进制打印。
例子 –
算法 –
- 将输入的数字地址加载到SI中,也将要输出的地址加载到DI中。
- 将00存储在CH寄存器中。
- 将CH的值增加1,然后将[SI]的内容移到AH寄存器中。
- 将AL和CH的内容相乘并存储在AX中,然后将AL的内容移到[DI]中,然后将DI的值加1。
- 比较CH和0A的值,如果不相等,则转到第3步,否则暂停程序。
程序 –
ADDRESS | MNEMONICS | COMMENTS |
---|---|---|
400 | MOV SI, 500 | SI<-500 |
403 | MOV DI, 600 | DI<-600 |
406 | MOV CH, 00 | CH<-00 |
408 | INC CH | CH<-CH+1 |
409 | MOV AL, [SI] | AL<-[SI] |
40B | MUL CH | AX<-AL*CH |
40D | MOV [DI], AL | [DI]<-AL |
40F | INC DI | DI<-DI+1 |
410 | CMP CH, 0A | CH-0A |
413 | JNZ 408 | jump to address 408 if zero flag is 0 |
415 | HLT | Terminates the program |
解释 –
- MOV SI,500:在SI中加载500。
- MOV DI,600:在DI中加载600。
- MOV CH,00:将00数据加载到CH寄存器中。
- INC CH:将CH寄存器中的值加1。
- MOV AL,SI:将SI的内容移到AL寄存器中。
- MUL CH:将AL和CH寄存器的内容相乘并存储在AX寄存器中。
- MOV [DI],AL:将AL寄存器的内容移至[DI]。
- INC DI:将DI的值增加1。
- CMP CH,0A:将CH寄存器和0A内的数据相减。
- JNZ 408:如果零标志为0,则跳转到地址408。
- HLT:终止程序。