8086汇编,实现冒泡排序并做到100以内的数打印

8086汇编,实现冒泡排序并做到100以内的数打印

assume cs:code, ds:data, ss:stack

data segment
    arr db 2, 4, 9, 1, 7, 10, 12, 35
    len dw $ - arr
data ends

stack segment
    db 10 dup(0)
stack ends

code segment
start:
	;; 初始化
    mov ax, data
    mov ds, ax
    mov ax, stack
    mov ss, ax
    mov bp, 0
    mov sp, 10

    call bubble_sort
    call println

    mov ah, 4ch
    int 21h

bubble_sort:
    mov ax, len
    dec ax
    mov cx, ax
    
;; 外循环
fori:  
    push cx
    mov si, 0
    
;; 内循环    
forj: 

    ;; if arr[si] > arr[si + 1]
    mov ah, arr[si]
    cmp ah, arr[si + 1]
    jle j1

    ;; swap arr[si], arr[si + 1]
    mov al, arr[si + 1]
    mov arr[si], al 
    mov arr[si + 1], ah

j1:
    ;; end loop, update si
    inc si
    loop forj  

    pop cx
    loop fori

    ;; return 
    ret


println:
    mov cx, len
    mov si, 0

j2: 
    mov al, arr[si]
    mov ah, 00h
    mov bl, 10
    div bl
    cmp al, 0
    je j3
    
    add al, 30h
    mov dl, al
    push ax
    mov ah, 02h
    int 21h
    pop ax

j3:
    add ah, 30h
    mov dl, ah
    mov ah, 02h
    int 21h

    ;; print ' '
    mov dl, 0
    int 21h
    
    inc si

    loop j2
    
    ;; print '\n'
    mov dx, 0ah
    int 21h

    ret

code ends
end start
在MASM汇编语言中,实现冒泡排序并处理Windows命令行输入的操作可以分为以下几个步骤: 1. **接收用户输入**: 使用`INVOKE`指令从标准输入读取10个无符号整。因为是命令行输入,每个字后跟一个换行符。例如: ```assembly mov eax, 3 ; system call for read mov ebx, 0 ; standard input (stdin) lea ecx, [input] ; buffer to store numbers mov edx, 40 ; assume maximum of 40 characters per number int 0x80 ; invoke the kernel function ``` 2. **解析输入**: 将接收到的据存储到组中,这里假设`[input]`是一个组,然后用`ASCII`字符处理,找到逗号分隔的字。 3. **冒泡排序算法**: 使用循环结构(如`DO ... LOOP`或`WHILE`)实现冒泡排序。遍历组,比较相邻元素并交换如果它们的顺序错误。此过程需要多次迭代,直到整个序列有序。 4. **处理排序后的结果**: 冒泡排序结束后,将排好序的值连接成字符串,使用逗号或空格分隔。 5. **输出到命令行**: 最后,使用`OUT`系统调用将排序后的字符串写回标准输出,也就是命令行界面。 6. **示例代码框架**: ``` .data input times 40 db 0 ; input buffer sortedStr db ' ',0 ; temporary string for sorting results .code ... ; 接收输入 ... ; 冒泡排序 bubbleSort proc ... bubbleSort endp ; 输出结果 printSorted proc push edi mov edi, offset sortedStr ; 根据排序结果构建字符串 ... ; 输出字符串到命令行 INVOKE WriteConsole, ..., sortedStr, ... pop edi printSorted endp ; 主程序入口点 main proc ... bubbleSort printSorted exit main endp ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值