📜  8086程序以降序对整数数组进行排序

📅  最后修改于: 2021-06-28 14:59:20             🧑  作者: Mango

问题–在8086微处理器中编写一个程序,以按n个数字的降序对数字进行排序,其中大小“ n”存储在内存地址2000:500中,而数字存储在内存地址2000:501中。

例子 –

示例说明:


  • Pass-1: 32 05 14 50 32 05 14 50 32 14 05 50 32 14 50 05 (已解决1个数字)
  • Pass-2: 32 14 50 05 32 14 50 05 32 50 14 05 (2个数字已修复)
  • Pass-3: 32 50 14 05 50 32 14 05 (已排序)

算法 –

  1. 将数据从偏移500加载到寄存器CL(用于计数)。
  2. 从起始存储位置移动到最后一个位置,如果第一个数字小于第二个数字,则比较两个数字,然后交换它们。
  3. 首遍确定最后一个号码的位置。
  4. 将计数减少1。
  5. 再次从起始存储位置移动到(last-1,借助计数),如果第一个数字小于第二个数字,则比较两个数字,然后交换它们。
  6. 第二遍确定最后两个数字的位置。
  7. 重复。

程序 –

MEMORY ADDRESS MNEMONICS COMMENT
400 MOV SI, 500 SI<-500
403 MOV CL, [SI] CL<-[SI]
405 DEC CL CL<-CL-1
407 MOV SI, 500 SI<-500
40A MOV CH, [SI] CH<-[SI]
40C DEC CH CH<-CH-1
40E INC SI SI<-SI+1
40F MOV AL, [SI] AL<-[SI]
411 INC SI SI<-SI+1
412 CMP AL, [SI] AL-[SI]
414 JNC 41C JUMP TO 41C IF CY!=1
416 XCHG AL, [SI] SWAP AL AND [SI]
418 DEC SI SI<-SI-1
419 XCHG AL, [SI] SWAP AL AND [SI]
41B INC SI SI<-SI+1
41C DEC CH CH<-CH-1
41E JNZ 40F JUMP TO 40F IF ZF=0
420 DEC CL CL<-CL-1
422 JNZ 407 JUMP TO 407 IF ZF=0
424 HLT END

解释 –

  1. MOV SI,500 :将SI的值设置为500。
  2. MOV CL,[SI] :将数据从偏移量SI加载到寄存器CL。
  3. DEC CL :寄存器CL的值减1。
  4. MOV SI,500 :将SI的值设置为500。
  5. MOV CH,[SI] :将数据从偏移量SI加载到寄存器CH。
  6. DEC CH :将寄存器CH的值减1。
  7. INC SI :SI的值增加1。
  8. MOV AL,[SI] :从偏移量SI加载到寄存器AL的值。
  9. INC SI :SI的值增加1。
  10. CMP AL,[SI] :比较寄存器AL和[SI](AL- [SI])的值。
  11. JNC 41C :如果未产生进位,则跳转到地址41C。
  12. XCHG AL,[SI] :交换寄存器AL和SI的内容。
  13. DEC SI :将SI的值减1。
  14. XCHG AL,[SI] :交换寄存器AL和SI的内容。
  15. INC SI :将SI的值增加1。
  16. DEC CH :将寄存器CH的值减1。
  17. JNZ 40F :如果归零复位,则跳转到地址40F。
  18. DEC CL :将寄存器CL的值减1。
  19. JNZ 407 :如果归零复位,则跳转到地址407。
  20. HLT :停止。