汇编语言 - 选择排序
选择排序是一种简单的排序算法,它的主要思想是将数组分成已排序和未排序两部分,每次从未排序的部分中找到最小的元素,并将其交换到已排序的结尾。通过不断重复这个过程,最后就可以得到一个有序的数组。
下面是使用汇编语言实现选择排序的代码示例:
.DATA
array DWORD 6, 3, 8, 2, 9, 1
n DWORD 6
.CODE
main PROC
mov esi, 0 ; esi 指向未排序的第一个元素
mov ecx, n ; ecx 计数器,用于记录未排序的元素个数
outer_loop:
cmp ecx, 0 ; 如果未排序的元素个数为 0,结束循环
je done
mov ebx, esi ; ebx 指向当前未排序部分的第一个元素
mov edx, dword ptr[array + esi * 4] ; edx 记录当前未排序部分的最小值
inner_loop:
cmp ebx, n - 1 ; 如果已经比较到未排序部分的最后一个元素,跳出循环
je swap
mov eax, dword ptr[array + ebx * 4] ; eax 记录当前未排序部分的元素值
cmp edx, eax ; 比较 edx 和 eax,将最小值记录在 edx 中
jle next
mov edx, eax
mov esi, ebx
next:
inc ebx ; 指向下一个未排序的元素
jmp inner_loop ; 再次比较
swap:
; 交换 edx 和 array[esi] 两个元素的值
mov eax, edx
mov edx, dword ptr[array + esi * 4]
mov dword ptr[array + esi * 4], eax
mov dword ptr[array + ebx * 4], edx
; 更新 esi 和 ecx 的值
inc esi
dec ecx
jmp outer_loop ; 接着找下一个未排序的元素
done:
; 输出结果
mov ecx, n
mov esi, 0
print_loop:
cmp ecx, 0
je exit
push dword ptr