section .data array dd 64, 25, 12, 22, 11 ; 待排序的数组 array_size equ ($ - array) / 4 ; 数组的大小(以双字节为单位)section .text global _start_start: ; 冒泡排序算法 mov ecx, array_size ; ecx 存储数组长度 dec ecx ; 减1以便与索引匹配outer_loop: mov ebx, 0 ; ebx 用于内部循环计数,每次迭代后重置为0 mov edx, ecx ; edx 用于内部循环中的比较计数,初始值为数组长度inner_loop: mov eax, [array + ebx * 4] ; 加载当前元素到 eax cmp eax, [array + ebx * 4 + 4] ; 比较当前元素和下一个元素 jg swap_if_greater ; 如果当前元素大于下一个元素,则交换它们continue_inner_loop: inc ebx ; 增加内部循环计数器 dec edx ; 减少比较计数器 cmp edx, 0 ; 检查是否到达数组末尾 jne inner_loop ; 如果没有,继续内部循环 dec ecx ; 减少外部循环计数器 cmp ecx, 0 ; 检查是否完成排序 jne outer_loop ; 如果没有,继续外部循环 ; 输出排序后的数组 mov ecx, array_size mov ebx, 0print_loop: mov eax, [array + ebx * 4] call print_integer inc ebx loop print_loop ; 退出程序 mov eax, 1 xor ebx, ebx int 0x80swap_if_greater: mov edx, [array + ebx * 4] ; 交换当前元素和下一个元素 xchg edx, [array + ebx * 4 + 4] mov [array + ebx * 4], edx jmp continue_inner_loopprint_integer: ; 输出整数 push eax call print_nl pop eax mov eax, 4 mov ebx, 1 mov ecx, eax int 0x80 retprint_nl: ; 输出新行 mov eax, 4 mov ebx, 1 mov ecx, nl mov edx, nl_len int 0x80 retsection .bss nl resb 1 nl_len equ $ - nl