📜  8086程序用于选择排序

📅  最后修改于: 2021-05-07 01:14:34             🧑  作者: Mango

问题–在8086微处理器中编写汇编语言程序,以使用选择排序对给定的n个数字数组进行排序。

假设–数组中元素的数量存储在偏移量500处。数组从偏移量501开始。

例子 –

算法 –

  1. 我们首先找到数组中最小的数字。
  2. 从数组的第一个元素交换最小的数字。
  3. 继续重复该过程,直到遍历所有元素。

程序 –

Offset Mnemonics Comment
400 MOV DI, 501 DI < – 501
403 MOV SI, 500 SI < – 500
406 MOV CL, [SI] CL < – [SI]
408 XOR CH, CH CH < – CH ^(XOR) CH
40A INC SI SI < – SI+0001
40B DEC CX CX < – CX-0001
40C MOV BX, SI BX < – SI
40E MOV AH, CL AH < – CL
410 INC AH AH < – AH+01
412 MOV AL, [SI] AL < – [SI]
414 INC SI SI < – SI+0001
415 DEC AH AH < – AH-01
417 CMP AL, [SI] AL-[SI]
419 JC 41F If Carry Flag = 1, goto offset 41F
41B MOV AL, [SI] AL < – [SI]
41D MOV BX, SI BX < – SI
41F INC SI SI < – SI+0001
420 DEC AH AH < – AH-01
422 JNZ 417 If Zero Flag = 0, goto offset 417
424 MOV DL, [BX] DL < – [BX]
426 XCHG DL, [DI] DL < – > [DI]
428 XCHG DL, [BX] DL < – > [BX]
42A INC DI DI < – DI+0001
42B MOV SI, DI SI < – DI
42D LOOP 40C CX < – CX-0001; If Zero Flag = 0, goto offset 40C.
42F HLT End of program.

说明–寄存器AH,AL,BX,CX,DL,SI,DI用于一般用途:

AL - Stored the smallest number
AH - Stores the counter for the inner loop
BX - Stores the offset of the smallest 
     number of each iteration of the outer loop
CX - Stores the counter for the outer loop
DL - Helps in swapping the elements
SI - Pointer
DI - Pointer 
  1. MOV SI,500:在SI中存储0500。
  2. MOV CL,[SI]:将内容存储在CL中的偏移量SI处。
  3. XOR CH,CH:将逻辑运算XOR b / w CH和CH的结果存储在CH中。
  4. INC SI:将SI的值增加1。
  5. DEC CX:将CX的值减小1。
  6. MOV AH,CL:将CL的内容存储在AH中。
  7. CMP AL,[SI]:将AL的内容与偏移SI的内容进行比较。如果AL <[SI] –设置进位标志(即,进位标志= 1)。
  8. JC 41F:如果进位标志被设置(1),则跳至偏移量041F。
  9. JNZ 417:如果重置零标志(0),则跳至偏移量0417。
  10. XCHG DL,[BX]:将DL的内容与偏移量BX处的内容交换。
  11. 回路40C:将CX的值减1,然后检查是否置零标志(1)。如果将零标志复位(0),则它会跳转到偏移量040C。
  12. HLT:终止程序。