📜  8086程序查找n个数的平均值

📅  最后修改于: 2021-06-29 21:01:23             🧑  作者: Mango

问题–在8086微处理器中编写汇编语言程序,以求n个平均8位数字。

例子 –

算法 –

  1. 在SI中分配值500在DI中分配值600
  2. 在CL中移动[SI]的内容
  3. 在AX中移动0000
  4. 将CL的内容移至BL
  5. 将SI的值增加1
  6. 添加AL和[SI]的内容
  7. 在前一次进位时将AH加00
  8. 将SI的值增加1
  9. 将CL的值减1
  10. 如果未设置零标志(ZF),则转到步骤6,否则转到步骤11
  11. 将AX的内容除以BL
  12. 在[DI]中移动AX的内容
  13. 暂停程序

程序 –

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

解释 –

  1. MOV SI,500用于将偏移量500移动到起始索引(SI)。
  2. MOV DI,600用于将偏移量600移动到目标索引(DI)。
  3. MOV AX,0000用于将数据0000移动到AX。
  4. MOV CL,[SI]用于将[SI]的内容移动到BL。
  5. MOV BL,CL用于将CL的内容复制到BL。
  6. INC SI用于将SI的内容加1。
  7. 添加AL,[SI]用于将[SI]的内容添加到AL。
  8. ADC AH,00与AH的先前cy一起用于00。
  9. INC SI用于将SI的内容加1。
  10. DEC CL用于将CL的内容减1。
  11. 如果ZF的值为0,则JNZ 40E用于跳转到偏移40E。
  12. DIV BL用于将AX的内容乘以BL。
  13. MOV [DI],AX用于将AX的内容移动到[DI]。
  14. HLT停止执行程序,并停止任何进一步的执行。