在資料區,給出了學生人數及組合語言課程的成績,請將成績排序並儲存在原資料區。
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...