冒泡排序汇编代码实现
时间: 2024-05-29 14:07:11 浏览: 55
汇编冒泡排序实验报告.docx
冒泡排序是一种简单的排序算法,其思想是比较相邻的元素。如果第一个比第二个大(升序),就交换它们。对于每个相邻的元素对,都进行同样的操作,从开始的第一对到结尾的最后一对。这样在一趟排序后,最大(或最小)的元素就被交换到了数组的最后一个位置。然后再从头开始进行同样的操作,直到没有需要交换的元素为止。下面是冒泡排序的汇编代码实现:
```
.model small
.stack 100h
.data
array db 5, 4, 3, 2, 1 ; 待排序数组
len equ $ - array ; 数组长度
.code
main proc
mov ax, @data
mov ds, ax ; 初始化数据段寄存器
; 排序前输出数组
mov si, offset array
mov cx, len
call print_array
; 冒泡排序
mov bx, len
dec bx
outer_loop:
xor si, si ; 初始化偏移量为0
inner_loop:
mov al, [si + offset array]
cmp al, [si + 1 + offset array]
jng not_swap ; 如果不需要交换就跳过
xchg al, [si + 1 + offset array]
mov [si + offset array], al ; 交换两个元素
not_swap:
inc si
loop inner_loop ; 内层循环
dec bx
jnz outer_loop ; 外层循环
; 排序后输出数组
mov si, offset array
mov cx, len
call print_array
mov ah, 4ch ; 退出程序
int 21h
main endp
print_array proc
push cx ; 保存 cx 寄存器的值
loop_start:
mov dl, [si]
add dl, 30h ; 转换为 ASCII 码
mov ah, 02h ; 输出一个字符
int 21h
inc si ; 指向下一个元素
loop loop_start
pop cx ; 恢复 cx 寄存器的值
ret
print_array endp
end main
```
上述代码中,`array` 存放待排序的数组,`len` 存放数组长度。程序先输出原始数组,然后进行冒泡排序,最后输出排序后的数组。内层循环比较相邻的两个元素是否需要交换位置,如果需要则交换。外层循环控制需要比较的次数,每次比较都会把当前最大(或最小)的元素交换到数组末尾。
阅读全文