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