问题–在8086微处理器中编写汇编语言程序,以求n个平均8位数字。
例子 –
算法 –
- 在SI中分配值500在DI中分配值600
- 在CL中移动[SI]的内容
- 在AX中移动0000
- 将CL的内容移至BL
- 将SI的值增加1
- 添加AL和[SI]的内容
- 在前一次进位时将AH加00
- 将SI的值增加1
- 将CL的值减1
- 如果未设置零标志(ZF),则转到步骤6,否则转到步骤11
- 将AX的内容除以BL
- 在[DI]中移动AX的内容
- 暂停程序
程序 –
OFFSET | MNEMONICS | COMMENT | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
400 | MOV SI, 500 | SI <- 500 | |||||||||||||||||||||||||||||||||
403 | MOV DI, 600 | DI <- 600 | |||||||||||||||||||||||||||||||||
406 | MOV AX, 0000 | AX = 0000 | 409 | MOV CL, [SI] | CL <- [SI] | 40B | MOV BL, CL | BL <- CL | 40D | INC SI | SI = SI + 1 | 40E | ADD AL, [SI] | AL = AL + [SI] | 410 | ADC AH, 00 | AH = AH + 00 + cy | 412 | INC SI | SI = SI + 1 | 413 | DEC CL | CL = CL – 1 | 415 | JNZ 40E | JUMP if ZF = 0 | 417 | DIV BL | AX = AX / BL | 419 | MOV [DI], AX | [DI] <- AX | 41B | HLT | Stop |
解释 –
- MOV SI,500用于将偏移量500移动到起始索引(SI)。
- MOV DI,600用于将偏移量600移动到目标索引(DI)。
- MOV AX,0000用于将数据0000移动到AX。
- MOV CL,[SI]用于将[SI]的内容移动到BL。
- MOV BL,CL用于将CL的内容复制到BL。
- INC SI用于将SI的内容加1。
- 添加AL,[SI]用于将[SI]的内容添加到AL。
- ADC AH,00与AH的先前cy一起用于00。
- INC SI用于将SI的内容加1。
- DEC CL用于将CL的内容减1。
- 如果ZF的值为0,则JNZ 40E用于跳转到偏移40E。
- DIV BL用于将AX的内容乘以BL。
- MOV [DI],AX用于将AX的内容移动到[DI]。
- HLT停止执行程序,并停止任何进一步的执行。