📌  相关文章
📜  8086程序,用于查找给定数组中的最小值

📅  最后修改于: 2021-06-28 16:22:23             🧑  作者: Mango

问题–编写程序以在装配8086微处理器中的给定数组中查找最小值

例子 –

假设–输入数组的起始地址为0500,并将结果存储在地址0600中

算法 –

  1. 在SI中分配值500在DI中分配值600
  2. 在CL中移动[SI]的内容,并将SI递增1
  3. 将值00 H分配给CH
  4. 在AL中移动[SI]的内容
  5. 将CX的值减1
  6. 将SI的值增加1
  7. 在BL中移动[SI]的内容
  8. 比较BL与AL的值
  9. 如果设置了进位标志,则跳至步骤11
  10. 在AL中移动BL的内容
  11. 跳至第6步,直到CX的值变为0,然后将CX减小1
  12. 在[DI]中移动AL的内容
  13. 暂停程序

程序 –

MEMORY ADDRESS MNEMONICS COMMENTS
0400 MOV SI, 500 SI <- 500
0403 MOV DI, 600 DI <- 600
0406 MOV CL, [SI] CL <- [SI]
0408 MOV CH, 00 CH <- 00
040A INC SI SI <- SI+1
040B MOV AL, [SI] AL <- [SI]
040D DEC CX CX <- CX-1
040E INC SI SI <- SI+1
040F MOV BL, [SI] BL <- [SI]
0411 CMP AL, BL AL-BL
0413 JC 0417 Jump if carry is 1
0415 MOV AL, BL AL <- BL
0417 LOOP 040E Jump if CX not equal to 0
0419 MOV [DI], AL [DI] <- AL
041B HLT End of the program

解释 –

  1. MOV SI,500将500分配给SI
  2. MOV DI,600将600分配给DI
  3. MOV CL,[SI]将[SI]的内容移至CL寄存器
  4. MOV CH,00将00分配给CH寄存器
  5. INC SI将SI的值增加1
  6. MOV AL,[SI]将[SI]的内容移至AL寄存器
  7. DEC CX将CX寄存器的内容减1
  8. INC SI将SI的值增加1
  9. MOV BL,[SI]将[SI]的内容移至BL寄存器
  10. CMP AL,BL从AL中减去BL寄存器的值,并修改标志寄存器
  11. 如果设置了进位标志,则JC 0417跳转到0417地址
  12. MOV AL,BL将BL寄存器的内容移至AL寄存器
  13. LOOP 040E循环运行,直到CX不等于零并将CX的值减小1
  14. MOV [DI],AL将AL的内容移至[DI]
  15. HLT停止执行程序