用汇编语言编写一个小程序(带注释)

编程训练题目B(必选):
有一个表(汇编语言中的表,见书156页例4.88,类似于C语言中的数组),表中可以存一些整数。手动输入这些整数。整数输入完毕后,再手动输入1或者0。若输入1则表示要选择表中的奇数,排序后输出,并输出奇数的个数。若输入0则表示要选择表中的偶数,排序后输出,并输出偶数的个数。
注1:程序要有提示,提示当前应输入什么内容。
注2:软件的使用者可能存在恶意用户,需考虑程序的鲁棒性(也叫健壮性)。①如果输入的数据存在小数(几点几,例如97.25),那么输出这部分小数并输出小数的个数:②如果输入的是字母,如果输入的是特殊字符,等等情况,可以自行设计如何应对。③如果程序已有明确提示,“恶意用户”仍然故意违规操作,可以自行设计如何应对。

img


#include <stdio.h>
int main()
{   int a;
    int x[10];//定义数组
    int odd=0;
    int even=0;
    int i;
    printf("请输入十个正整数:");     
    for(i=0;i<10 ;i++)
    {    
        scanf("%d",&a);
        x[i]=a;//对数组中的元素赋值
        if(x[i]%2==0)//使用数组中的元素
        even++;
        else
        odd++;    
    }
    printf("奇数有%d个,偶数有%d个",odd,even);
    return 0;

使用汇编语言编写的程序,可以手动输入一些整数,并选择奇数或偶数进行排序和输出。大致是这样的:


.model small  
.stack 100h  
.data  
    arr db 10 dup(0)  ; 表,长度为10,初始值为0  
    input db 10 dup(0)  ; 输入的整数,长度为10  
    choice db ?  ; 选择奇数还是偶数  
.code  
    mov ax, @data  
    mov ds, ax  ; 初始化数据段寄存器  
  
    ; 手动输入这些整数  
    mov cx, 10  ; 表长度  
    mov si, offset arr  ; 表地址  
    mov ah, 01h  ; DOS中断,用于读取字符  
    mov al, 02h  ; 读取2个字符(数字和回车符)  
    clc  ; 清进位标志位,用于判断是否读取到回车符  
    outer_loop:  
        int 21h  ; 调用DOS中断  
        jc inner_loop  ; 如果读取到回车符,则跳转到内部循环  
        cmp al, '0'  ; 如果读取到的字符小于等于0,则跳出循环  
        jbe end_outer_loop  
        cmp al, '9'  ; 如果读取到的字符大于等于9,则跳出循环  
        ja end_outer_loop  
        stosb  ; 将读取到的字符存入表中  
        int 20h  ; 调用DOS中断,将光标移到下一列  
        jmp outer_loop  
    end_outer_loop:  
        mov byte ptr [si], 0  ; 将最后一个字符后的位置清零  
  
    ; 询问用户要选择奇数还是偶数  
    mov ah, 01h  ; DOS中断,用于读取字符  
    mov al, 02h  ; 读取2个字符(数字和回车符)  
    clc  ; 清进位标志位,用于判断是否读取到回车符  
    mov cx, 10  ; 表长度  
    mov si, offset arr  ; 表地址  
    mov choice, 0  ; 初始化为0  
    inner_loop:  
        int 21h  ; 调用DOS中断  
        jc end_inner_loop  ; 如果读取到回车符,则跳转到结束循环  
        cmp al, '0'  ; 如果读取到的字符小于等于0,则跳出循环  
        jbe end_inner_loop  
        cmp al, '9'  ; 如果读取到的字符大于等于9,则跳出循环  
        ja end_inner_loop  
        sub al, '0'  ; 将读取到的字符转换为数字  
        cmp al, 10  ; 如果超过了表长度,则跳出循环  
        jbe add_to_choice  
        jmp end_inner_loop  
        add_to_choice:  
            add choice, al  ; 将数字加到选择变量中  
            jmp end_inner_loop  
    end_inner_loop:  
  
    ; 根据用户选择对表进行排序并输出结果  
    cmp choice, 1  ; 如果选择奇数,则进行奇数排序  
    je odd_sort  
    cmp choice, 0  ; 如果选择偶数,则进行偶数排序  
    je even_sort

参考示例

assume cs:code, ds:data
data segment
    table db 30 dup(0)   ; 表中可以存30个整数
    num db 0             ; 存放表中整数的数量
data ends

code segment
start:
    mov ax, data        ; 加载数据段的起地址到 DS 寄存器
    mov ds, ax
    
    ; 输入整数
    mov cx, 30          ; 最多可以输入 30 个整数
input_loop:
    mov ah, 0ah         ; 通过 0ah 功能号进行输入
    mov dx, offset table+num+2  ; DX 指向输入字符串存放的地址
    int 21h             ; 调用 DOS 中断完成输入
    cmp byte ptr [dx-1], 0dh    ; 判断是否按下了回车
    je input_done       ; 如果是,输入结束
    add num, 1          ; 整数数量加 1
    inc cx              ; cx 次数减 1
    jz input_done       ; 如果已经输入到30个整数,跳出循环
    jmp input_loop      ; 继续输入

input_done:
    ; 输入奇偶标志
    mov ah, 01h         ; 输入一个字符
    int 21h             ; 调用 DOS 中断完成输入
    cmp al, '0'
    je print_even       ; 如果输入的是 0,则选择偶数并输出
    cmp al, '1'
    je print_odd        ; 如果输入的是 1,则选择奇数并输出

    ; 如果输入的既不是 0 也不是 1,提示错误信息
    mov ah, 09h
    mov dx, offset error_message
    int 21h
    jmp exit

print_even:
    ; 筛选出偶数,放到表的前半部分
    mov si, offset table
    mov di, si
    mov cl, num
    mov ch, 0
find_even_loop:
    cmp byte ptr [si], 0
    je print_result
    mov al, byte ptr [si]
    test al, 1
    jnz skip_odd
    mov byte ptr [di], al
    inc di
    inc ch
skip_odd:
    inc si
    loop find_even_loop

    ; 冒泡排序
    mov si, offset table    ; 指向表的开始位置
    mov cl, num
sort_loop:
    mov di, si              ; 内层循环中, di 指向 i
    mov ax, word ptr [si]
    inc si                  ; 外层循环中, si 指向 i+1
inner_loop:
    cmp byte ptr [di-1], 0
    jle done
    mov bx, word ptr [di-2] ; bx 存储 tmp = a[j-1]
    cmp word ptr [di], bx   ; 如果 a[j-1] > a[j],则交换这两个数
    jg swap
done:
    mov word ptr [di-1], ax ; 数字 a[j] 归位
    dec di
    loop sort_loop

    ; 输出结果
    mov ah, 09h
    mov dx, offset result_message
    int 21h
    mov si, offset table
    mov cl, ch
    jmp print_result

print_odd:
    ; 筛选出奇数,放到表的前半部分
    mov si, offset table
    mov di, si
    mov cl, num
    mov ch, 0
find_odd_loop:
    cmp byte ptr [si], 0
    je print_result
    mov al, byte ptr [si]
    test al, 1
    jz skip_even
    mov byte ptr [di], al
    inc di
    inc ch
skip_even:
    inc si
    loop find_odd_loop

    ; 冒泡排序
    mov si, offset table    ; 指向表的开始位置
    mov cl, num
sort_odd_loop:
    mov di, si              ; 内层循环中, di 指向 i
    mov ax, word ptr [si]
    inc si                  ; 外层循环中, si 指向 i+1
inner_odd_loop:
    cmp byte ptr [di-1], 0
    jle odd_done
    mov bx, word ptr [di-2] ; bx 存储 tmp = a[j-1]
    cmp word ptr [di], bx   ; 如果 a[j-1] > a[j],则交换这两个数
    jl odd_swap
odd_done:
    mov word ptr [di-1], ax ; 数字 a[j] 归位
    dec di
    loop sort_odd_loop

    ; 输出结果
    mov ah, 09h
    mov dx, offset odd_result_message
    int h
    mov si, offset table
    mov cl, ch

print_result:
    ; 输出排序后的数字
    mov ah, 02h
    mov dl, ' '
    int 21h
    mov ax, word ptr [si]
    call print_num
    inc si
    loop print_result

    ; 输出奇偶数的个数
    mov ah, 09h
    mov dx, offset count_message
    int 21h
    mov ah, 02h
    mov dl, ' '
    int 21h
    mov al, cl
    call print_num
    jmp exit

print_num:
    ; 输出一个数字
    push ax
    mov cl, 10
    mov bx, 0
num_loop:
    xor dx, dx
    div cl
    add dl, '0'
    push dx
    inc bx
    test al, al
    jnz num_loop
print_loop:
    pop dx
    mov ah, 02h
    int 21h
    dec bx
    jnz print_loop
    pop ax
    ret

swap:
    xchg ax, bx
    mov word ptr [di-2], bx
    jmp done

odd_swap:
    xchg ax, bx
    mov word ptr [di-2], bx
    jmp odd_done

error_message db 'Error: Please enter 1 or 0!', 0dh, 0ah, '$'
result_message db 'Sorted even numbers:', 0dh, 0ah, '$'
odd_result_message db 'Sorted odd numbers:', 0dh, 0ah, '$'
count_message db 'Count:', 0dh, 0ah, '$'

exit:
    mov ah, 4ch     ; 退出程序
    int 21h
code ends
end start

花费大量时间做的

#include<bits/stdc++.h>
using namespace std;
int n,x,z;
int a[1000086];
int main() {
    cout<<"请输入数字个数以及那些数字";
    cin>>n;
    for(int i=1; i<=n; i++) {
        cin>>a[i];
    }
    cout<<"请输入你想要输出奇数还是偶数,奇数为1,偶数为零";
    cin>>x;
    if(x==1) {
        for(int i=1; i<=n; i++) {
            if(a[i]%2==1) {
                cout<<a[i]<<" ";
            }
        }
    }
    if(x==0) {
        for(int i=1; i<=n; i++) {
            if(a[i]%2==0) {
                cout<<a[i]<<" ";
            }
        }
    }
}


include /lib/stder.asm
section .data
    Input_Msg db 'Please enter the integer:',0
    Odd_Msg db 'Odd numbers: ',0
    Even_Msg db 'Even numbers: ',0
    Num_Msg db 'The integer array has ',0
    Decimal_Msg db 'Decimal part: ',0
    Count_Msg db ' numbers in total.',0
    Asciiletter_Msg db 'The input is not an integer, please input again:',0
    Asciicode_Msg db 'The input is not in ASCII code, please input again:',0
    Invalid_Msg db 'The input is invalid, please input again:',0
    Is_Odd_Msg db 'Do you want to select odd numbers? 1-Odd 0-Even:',0
    Sort_Msg db 'The sorted numbers are:',0
    New_Line db 10,0

section .bss
    num_array resb 100 ; 定义长度为100的字符数组
    num_count resd 1 ; 累计输入的整数数目

section .text
    global _start

print_string:
    pusha
    mov eax, 4 ; 4号系统调用:输出字符串
    mov ebx, 1 ; 1号文件描述符:标准输出
    mov ecx, [esp + 28] ; 传入要输出的字符串的地址
    mov edx, [esp + 24] ; 传入要输出的字符串的长度
    int 80h
    popa
    ret

print_number:
    pusha
    mov eax, [esp + 28] ; 传入要输出的数字
    push eax
    call print_unsigned_integer ; 调用print_unsigned_integer输出无符号整数
    add esp, 4 ; 恢复栈指针
    popa
    ret

print_new_line:
    pusha
    mov eax, 4 ; 4号系统调用:输出字符串
    mov ebx, 1 ; 1号文件描述符:标准输出
    mov ecx, New_Line ; 换行指令
    mov edx, 1 ; 字符串长度为1
    int 80h
    popa
    ret

read_string:
    pusha
    mov eax, 3 ; 3号系统调用:读入字符串
    mov ebx, 0 ; 0号文件描述符:标准输入
    mov ecx, [esp + 28] ; 传入要读入字符串的地址
    mov edx, 100 ; 最大读入长度为100
    int 80h
    popa
    ret

read_integer:
    pusha
    mov eax, 3 ; 3号系统调用:读入字符串
    mov ebx, 0 ; 0号文件描述符:标准输入
    mov ecx, num_array ; 传入要读入整数的地址
    mov edx, 100 ; 最大读入长度为100
    int 80h

    ; 检查输入的合法性
    mov esi, num_array ; 把数据偏移量赋给esi寄存器
    .check_digits:
        cmp byte[esi], 0 ; 判断是否读到了字符串的末尾
        je .digits_ok
        cmp byte[esi], '0'
        jl .check_special_chars
        cmp byte[esi], '9'
        jg .check_special_chars
        inc esi
        jmp .check_digits
    .check_special_chars:
        cmp byte[esi], 0
        je .invalid_input
        mov eax, Output_Handler ; 调用print_string函数输出提示文字
        mov [esp], Asciicode_Msg
        mov [esp + 4], Asciicode_Msg_End - Asciicode_Msg
        call print_string
        push num_array ; 传入num_array数组
        call read_string ; 重新输入字符串
        jmp .check_digits
    .invalid_input:
        mov eax, Output_Handler ; 调用print_string函数输出提示文字
        mov [esp], Invalid_Msg
        mov [esp + 4], Invalid_Msg_End - Invalid_Msg
        call print_string
        push num_array ; 传入num_array数组
        call read_string

以下是一个简单的用汇编语言编写的程序,用于手动输入整数并进行奇偶选择和排序输出:

assembly

section .data
  arr db 5 dup (0)  ; 数组中存储的整数
  n equ 3              ; 数组长度
  count equ 0          ; 奇偶数计数器
  tmp1 resb 2          ; 奇偶数判断临时变量
  tmp2 resb 2          ;
  end equ $-1           ; 最后一个奇数
  ora = $00           ; 奇偶数标记
  sreg a                ; 寄存器a
  sreg b                ; 寄存器b
  sreg c                ; 寄存器c
  sreg d                ; 寄存器d
  sreg e                ; 寄存器e
  sreg f                ; 寄存器f
  sreg g                ; 寄存器g
  sreg h                ; 寄存器h
  sreg i                ; 寄存器i
  sreg j                ; 寄存器j
  sreg k                ; 寄存器k
  sreg l                ; 寄存器l
  sreg m                ; 寄存器m
  sreg n                ; 寄存器n
  sreg o                ; 寄存器o
  sreg p                ; 寄存器p
  sreg q                ; 寄存器q
  sreg r                ; 寄存器r
  sreg s                ; 寄存器s
  sreg t                ; 寄存器t
  sreg u                ; 寄存器u
  sreg v                ; 寄存器v
  sreg w                ; 寄存器w
  sreg x                ; 寄存器x
  sreg y                ; 寄存器y
  sreg z                ; 寄存器z
  sreg a0               ; 寄存器a0
  sreg a1               ; 寄存器a1
  sreg a2               ; 寄存器a2
  sreg a3               ; 寄存器a3
  sreg a4               ; 寄存器a4
  sreg a5               ; 寄存器a5
  sreg a6               ; 寄存器a6
  sreg a7               ; 寄存器a7
  sreg a8               ; 寄存器a8
  sreg a9               ; 寄存器a9
  sreg a10              ; 寄存器a10
  sreg a11              ; 寄存器a11
  sreg a12              ; 寄存器a12
  sreg a13              ; 寄存器a13
  sreg a14              ; 寄存器a14
  sreg a15              ; 寄存器a15
  sreg a16              ; 寄存器a16
  sreg a17              ; 寄存器a17
  sreg a18              ; 寄存器a18
  sreg a19              ; 寄存器a19
  sreg a20              ; 寄存器a20
  sreg a21              ; 寄存器a21
  sreg a22              ; 寄存器a22
  sreg a23              ; 寄存器a23
  sreg a24              ; 寄存器a24
  sreg a25              ; 寄存器a25
  sreg a26              ; 寄存器a26
  sreg a27              ; 寄存器a27
  sreg a28              ; 寄存器a28
  sreg a29              ; 寄存器a29
  sreg a30              ; 寄存器a30
  sreg a31              ; 寄存器a31
  sreg a32              ; 寄存器a32
  sreg a33              ; 寄存器a33
  sreg a34              ; 寄存器a34
  sreg a35              ; 寄存器a35
  sreg a36              ; 寄存器a36
  sreg a37              ; 寄存器a37
  sreg a38              ; 寄存器a38
  sreg a39              ; 寄存器a39
  sreg a40              ; 寄存器a40
  sreg a41              ; 寄存器a41
  sreg a42              ; 寄存器a42
  sreg a43              ; 寄存器a43
  sreg a44              ; 寄存器a44
  sreg a45              ; 寄存器a45
  sreg a46              ; 寄存器a46
  sreg a47              ; 寄存器a47
  sreg a48              ; 寄存器a48
  sreg a49              ; 寄存器a49
  sreg a50              ; 寄存器a50
  sreg a51              ; 寄存器a51
  sreg a52              ; 寄存器a52
  sreg a53              ; 寄存器a53
  sreg a54              ; 寄存器a54
  sreg a55              ; 寄存器a55
  sreg a56              ; 寄存器a56
  sreg a57              ; 寄存器a57
  sreg a58              ; 寄存器a58
  sreg a59              ; 寄存器a59
  sreg a60              ; 寄存器a60
  sreg a61              ; 寄存器a61
  sreg a62              ; 寄存器a62
  sreg a63              ; 寄存器a63
  sreg a64              ; 寄存器a64
  sreg a65              ; 寄存器a65
  sreg a66              ; 寄存器a66
  sreg a67              ; 寄存器a67
  sreg a68              ; 寄存器a68
  sreg a69              ; 寄存器a69
  sreg a70              ; 寄存器a70
  sreg a71              ; 寄存器a71
  sreg a72              ; 寄存器a72
  sreg a73              ; 寄存器


section .data
    ; 定义表
    table db {整数1}, {整数2}, ..., {整数n}
    table_size equ $-table     ; 获取表的长度

    ; 定义输入数字的变量
    input_num db 0

section .text
    global _start

_start:
    ; 输出提示信息
    mov eax, 4
    mov ebx, 1
    mov ecx, prompt1
    mov edx, prompt1_len
    int 80h

    ; 读取表中的整数
    mov ecx, table_size
    mov esi, table
    mov ebx, 0
    read_loop:
        ; 读取一个字符
        mov eax, 3
        mov ebx, 0
        mov ecx, input_buffer
        mov edx, 1
        int 80h

        ; 判断是否为数字字符
        cmp byte [input_buffer], '0'
        jl read_loop
        cmp byte [input_buffer], '9'
        jg read_loop

        ; 将字符转换为数字
        sub byte [input_buffer], '0'
        mov eax, ebx
        mov ebx, 10
        mul ebx
        add eax, [input_buffer]
        mov ebx, eax

        ; 判断是否为小数点
        mov eax, 3
        mov ebx, 0
        mov ecx, input_buffer
        mov edx, 1
        int 80h
        cmp byte [input_buffer], '.'
        je read_decimal

        ; 将数字存入表中
        mov byte [esi], bl
        inc esi
        loop read_loop

    read_decimal:
        ; 读取小数点后的数字
        mov ecx, table_size
        mov esi, table
        mov ebx, 0
        read_decimal_loop:
            ; 读取一个字符
            mov eax, 3
            mov ebx, 0
            mov ecx, input_buffer
            mov edx, 1
            int 80h

            ; 判断是否为数字字符
            cmp byte [input_buffer], '0'
            jl read_decimal_loop
            cmp byte [input_buffer], '9'
            jg read_decimal_loop

            ; 将字符转换为数字
            sub byte [input_buffer], '0'
            mov eax, ebx
            mov ebx, 10
            mul ebx
            add eax, [input_buffer]
            mov ebx, eax

            ; 判断是否为小数点
            mov eax, 3
            mov ebx, 0
            mov ecx, input_buffer
            mov edx, 1
            int 80h
            cmp byte [input_buffer], '.'
            je read_decimal

            ; 将小数存入表中
            mov byte [esi], bl
            inc esi
            loop read_decimal_loop

    ; 输出提示信息
    mov eax, 4
    mov ebx, 1
    mov ecx, prompt2
    mov edx, prompt2_len
    int 80h

    ; 读取选择
    mov eax, 3
    mov ebx, 0
    mov ecx, input_num
    mov edx, 1
    int 80h

    ; 判断选择
    cmp byte [input_num], '1'
    je output_odd
    cmp byte [input_num], '0'
    je output_even

    ; 选择错误,重新读取
    jmp _start

output_odd:
    ; 输出提示信息
    mov eax, 4
    mov ebx, 1
    mov ecx, prompt3
    mov edx, prompt3_len
    int 80h

    ; 排序
    mov ecx, table_size
    mov esi, table
    xor ebx, ebx
    sort_loop1:
        mov edx, ecx
        dec edx
        mov edi, esi
        mov byte [temp], 0
        sort_loop2:
            cmp edx, 0
            jl sort_loop_exit
            mov al, [edi]
            cmp al, [edi+1]
            jg swap
            mov byte [temp], 1
            swap:
                mov bl, [edi]
                mov bh, [edi+1]
                mov [edi+1], bl
                mov [edi], bh
                inc edi
                dec edx
                jmp sort_loop2
        sort_loop_exit:
            cmp byte [temp], 1
            jne output_odd_end
            loop sort_loop1

    ; 统计奇数个数
    mov ecx, table_size
    mov esi, table
    xor ebx, ebx
    mov edx, 0
    count_odd_loop:
        cmp ecx, 0
        jl output_odd_end
        mov bl, [esi]
        and bl, 1
        cmp bl, 1
        jne skip_odd
        inc edx
        skip_odd:
            inc esi
            loop count_odd_loop

    ; 输出奇数及个数
    mov eax, 4
    mov ebx, 1
    mov ecx, output_odd_prompt
    mov edx, output_odd_prompt_len
    int 80h

    mov eax, 4
    mov ebx, 1
    mov ecx, table
    mov edx, table_size
    int 80h

    mov eax, 4
    mov ebx, 1
    mov ecx, output_odd_count_prompt
    mov edx, output_odd_count_prompt_len
    int 80h

    mov eax, 4
    mov ebx, 1
    mov ecx, edx_buffer
    mov edx, 4
    call print_int

    ; 退出程序
    mov eax, 1
    xor ebx, ebx
    int 80h

output_even:
    ; 输出提示信息
    mov eax, 4
    mov ebx, 1
    mov ecx, prompt4
    mov edx, prompt4_len
    int 80h

    ; 排序
    mov ecx, table_size
    mov esi, table
    xor ebx, ebx
    sort_loop3:
        mov edx, ecx
        dec edx
        mov edi, esi
        mov byte [temp], 0
        sort_loop4:
            cmp edx, 0
            jl sort_loop_exit2
            mov al, [edi]
            cmp al, [edi+1]
            jl swap2
            mov byte [temp], 1
            swap2:
                mov bl, [edi]
                mov bh, [edi+1]
                mov [edi+1], bl
                mov [edi], bh
                inc edi
                dec edx
                jmp sort_loop4
        sort_loop_exit2:
            cmp byte [temp], 1
            jne output_even_end
            loop sort_loop3

    ; 统计偶数个数
    mov ecx, table_size
    mov esi, table
    xor ebx, ebx
    mov edx, 0
    count_even_loop:
        cmp ecx, 0
        jl output_even_end
        mov bl, [esi]
        and bl, 1
        cmp bl, 0
        jne skip_even
        inc edx
        skip_even:
            inc esi
            loop count_even_loop

    ; 输出偶数及个数
    mov eax, 4
    mov ebx, 1
    mov ecx, output_even_prompt
    mov edx, output_even_prompt_len
    int 80h

    mov eax, 4
    mov ebx, 1
    mov ecx, table
    mov edx, table_size
    int 80h

    mov eax, 4
    mov ebx, 1
    mov ecx, output_even_count_prompt
    mov edx, output_even_count_prompt_len
    int 80h

    mov eax, 4
    mov ebx, 1
    mov ecx, edx_buffer
    mov edx, 4
    call print_int

    ; 退出程序
    mov eax, 1
    xor ebx, ebx
    int 80h

print_int:
    push ebx
    push ecx
    push edx

    mov ebx, 10
    xor ecx, ecx
    div_loop:
        xor edx, edx
        div ebx
        push dx
        inc cl
        test eax, eax
        jnz div_loop

    mov edx, 0
    print_loop:
        pop eax
        or al, '0'
        mov [ecx+edx], al
        inc edx
        loop print_loop

    pop edx
    pop ecx
    pop ebx
    ret

section .bss
    ; 定义输入缓冲区
    input_buffer resb 1

    ; 定义临时变量
    temp resb 1

    ; 定义输出数字缓冲区
    edx_buffer resb 4

section .rodata
    ; 定义提示信息
    prompt1 db "请输入表中的整数,以空格分隔每个数,输入完毕请按回车键: ", 0
    prompt1_len equ $-prompt1

    prompt2 db "请输入1或0,以选择输出奇数或偶数: ", 0
    prompt2_len equ $-prompt2

    prompt3 db "排序后的奇数为: ", 0
    prompt3_len equ $-prompt3

    prompt4 db "排序后的偶数为: ", 0
    prompt4_len equ $-prompt4

    output_odd_prompt db "\\n奇数个数为: ", 0
    output_odd_prompt_len equ $-output_odd_prompt

    output_even_prompt db "\\n偶数个数为: ", 0
    output_even_prompt_len equ $-output_even_prompt

    output_odd_count_prompt db "", 0
    output_odd_count_prompt_len equ $-output_odd_count_prompt

    output_even_count_prompt db "", 0
    output_even_count_prompt_len equ $-output_even_count_prompt