組合語言 氣泡排序

2021-08-21 18:43:08 字數 1168 閱讀 9574

在資料區,給出了學生人數及組合語言課程的成績,請將成績排序並儲存在原資料區。

assume cs:cseg, ds:dseg, ss:sseg

sseg segment stack

dw 10h dup (?)

sseg ends

dseg segment

dw 123,5,9,11,33,6,9,76,100,3

dseg ends

cseg segment

start: mov ax, dseg

mov ds, ax

mov cx, 9 ;外層迴圈9趟

sort: push cx ;儲存外層迴圈次數

;注意到外層第1次迴圈,內迴圈執行9次,外層第2次迴圈,內迴圈執行8次,...控制外迴圈的cx值恰就是內層迴圈次數

mov si, 0 ;相當於內層迴圈時j=0

inner: mov ax, [si] ;(ax)即a[j]

cmp ax, [si+2] ;a[j]與a[j+1]比較

jbe noswap ;a[j]<=a[j+1]時不交換,等同於a[j]>a[j+1]時交換

xchg ax, [si+2] ;交換

mov [si], ax ;最終效果是a[j]與a[j+1]交換了

noswap: add si, 2 ;要到下乙個數了,相當於j++

loop inner ;內層迴圈

pop cx ;恢復外層迴圈的cx

loop sort ;外層迴圈

mov ax, 4c00h

int 21h

cseg ends

endstart

下面對照c語言來看:

#include 

#define n 10

int main( )

; for (i=0; i1; i++)

for(j=0; j1; j++)

if (a[j]1])

for(i=0;iprintf("%d ",a[i]);

return

0;}

組合語言氣泡排序法

dat equ 50h 排序資料首位址 n data 10 資料個數 mppx mov r4,n 第一輪冒泡操作中的比較次數 srt1 clr f0 在第一輪冒泡操作前,初始化交換標誌 dec r4 mov a,r4 取上一輪冒泡操作中比較次數 mov r2,a 控制本輪次數 jz srt4 比較次...

組合語言 冒泡法排序

開啟doxbos 更改masm檔案為123 任意 在資料夾中建立檔案123.asm。在doxbos程式中 輸入mount c d 123 輸入c 開啟123.asm編寫程式 data segment buf dw 30,44,82,57,19,123,60,86,97,100 n buf 2 dat...

組合語言實現氣泡排序

氣泡排序 author jrh 2011.7.10 assume ds data data segment a dw 1,4,2,5,7,9,6,3 data ends code segment start mov ax,data mov ds,ax mov cx,8 dec cx lop1 pus...