assembly x86(nasm)选择排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了assembly x86(nasm)选择排序相关的知识,希望对你有一定的参考价值。

有一个首地址为NUM的N字无序无符号整数数组,编制程序采用选择排序法使该数组中的数按照从小到大的次序排序输出。

 

 

选择排序:

 

 

data segment
message        db    \'This is a program of Selection sort\',0dh,0ah,\'$\'
NUM         dw     12,78,55,4,125,96    ;0ch,4eh,37h,4h,7dh,60h
count         db     $-NUM
data ends
code segment
    assume cs:code,ds:data
start:
        mov ax,data
        mov ds,ax
        mov    dx,offset message            
        mov    ah,9                        
        int    21h    
        xor cx,cx
        mov cl,count
        shr cl,1
        dec cx                    ;比较n-1次
        mov bx,0
loop1:
        push cx                    ;cx入栈,避免内循环改变cx的值
        mov si,bx                ;si为内层循环的初始值,相当于下标
        mov ax,NUM[si]            ;ax为关键字
loop2:
        cmp ax,NUM[si+2]
        jg exchange             ;ax>NUM[si+1]则NUM[si+1]设为当前最小值,交换
        jmp done
exchange:
        xchg ax,NUM[si+2]        ;暂时存在ax中
done:
        add si,2
        loop loop2
        mov NUM[bx],ax            ;得到一个最小值, 前面的已经排好序
        add bx,2
        pop cx
        loop loop1
        xor cx,cx
        xor si,si
print:                            ;输出
        mov ax,NUM[si]
loopb:
        xor dx,dx
        inc cl
        mov bx,10
        div bx                    ;ax商,dx余
        push dx                    ;余数入栈
        cmp ax,0
        jne loopb
loopc: 
        pop dx
        or  dl,00110000b
        mov    ah,2                            
        int    21h
        loop loopc
        add si,2
        mov dl,20h
        mov ah,2h
        int 21h
        mov bx,word ptr count
        cmp si,bx
        jb print
exit:
        mov ah,4ch
        int 21h
code ends
end start

 

以上是关于assembly x86(nasm)选择排序的主要内容,如果未能解决你的问题,请参考以下文章

YASM/NASM x86 程序集中立即数与方括号的基本使用

YASM/NASM x86 程序集中立即数与方括号的基本使用

动手开发操作系统- 0x1

了解汇编、nasm、x86 中的 printf 函数。我不知道为啥这段代码没有打印出任何东西

x86 NASM 使用 printf 打包双打

x86 NASM更改未作为参数传递的地址的值