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 程序集中立即数与方括号的基本使用