微機實驗 子程式設計 數字排序,冒泡法

2021-10-06 12:00:00 字數 3173 閱讀 4626

——南京理工大學2019秋季學期電子資訊工程專業《微機原理與應用綜合實驗》(1學分)

程式設計軟體emu8086。

;*******************************

;氣泡排序演算法+顯示輸出

;徐延賓

;*******************************

data segment

num db 0d3h,0f7h,3eh,34h,0e5h,20h,36h,3dh,38h,0e9h,3ch,0e2h,0ffh,0d3h,0c1h,0b2h,0a1h;待比較的數字

n equ $-num

data ends

code segment

assume cs:code,ds:data ;分配段

main proc far ;主過程

push ds ;標準程式前奏

xor ax, ax ;ax清零

push ax ;ax入棧

mov ax,data ;段位址分配

mov ds,ax

mov di,offset num ;取偏移位址

mov cx,0 ;cx置0,供迴圈判斷使用

mov ax,n ;ax記錄數字總個數

push ax ;ax入棧保護

dec ax ;ax自減一

camp1:mov bx,cx

call camp2 ;執行排序

cmp ax,0 ;判斷是否結束排序

ja camp1

pop ax ;ax出棧恢復,供顯示子程式使用

and ax,00ffh

call show_screen ;執行顯示子程式

retmov ah,4ch

int 21h

main endp

;*******************************

;子程式名:camp2

;子程式功能:實現氣泡排序演算法

;*******************************

camp2 proc near

cmp cx,ax

jb ca***

dec ax

mov cx,0000h

retca***:push ax

push cx

mov al,[di+bx]

mov cl,[di+bx+1]

and ax,00ffh

and cx,00ffh

cmp ax,cx

jb do1

pop cx

pop ax

inc cx

retdo1:xchg ax,cx ;滿足條件交換已比較的兩個數

mov [di+bx],al

mov [di+bx+1],cl

pop cx

pop ax

inc cx

retcamp2 endp

;*******************************

;子程式1名:show_screen

;子程式功能:實現數字個數的迴圈

;*******************************

show_screen proc near

mov bx,0000h ;bx賦值為零,供迴圈使用

show1:call show2

inc bx

cmp bx,ax

jb show1

retshow_screen endp

;*******************************

;子程式2名:show_screen

;子程式功能:實現數字每一位顯示

;*******************************

show2 proc near

push ax

mov ax,[di+bx]

mov cx,[di+bx]

and ax,000fh

and cx,00f0h

push bx

mov bx,cx

mov cl,4

shr bx,cl

mov cx,bx

pop bx

call js1 ;顯示兩位16進製制數的高位

mov cl,al ;顯示兩位16進製制數的低位

call js1

mov dl,' ' ;顯示兩位16進製制數之間的空格

mov ah,2

int 21h

pop ax

retshow2 endp

;*********************************************

;子程式3名:show_screen

;子程式功能:實現16進製制和ascii碼的轉換並顯示

;*********************************************

js1 proc near

push ax

cmp cl,0ah ;判斷是否輸出字母(a~f)

jnb show3

add cl,30h ;判斷是否輸出數字(0~9)

由此可驗證程式的準確性。

數字排序(氣泡排序法)

將以組數字以從大到小的順序排列,也稱為氣泡排序法 比如將下面組數字從大到小排列,我們可以用二個數相比較的方法,首先將第乙個數和第二個數相比較,如果第乙個數比第二個數大則不動,如果小則交換位置 結果為 22,10,50,100,65,56,98,105,200,900,4,1 第一次排列,即i 0,j...

Python程式設計排序 氣泡排序法

氣泡排序法定義 它重複地比較要排序的所有元素列,如果順序 如從大到小 首字母從z到a 錯誤就把他們交換過來。比較元素的工作是重複地進行直到沒有相鄰元素需要交換,排序完成。氣泡排序1每次找出最大值 def bubble sort biggest a for i in range 0 len a 1 p...

Shell程式設計實驗之氣泡排序

氣泡排序 類似氣泡上湧的動作,會將資料在陣列中從小到大或者從大到小不斷的向前移動 氣泡排序的基本思想是對比相鄰的兩個元素值,如果滿足條件就交換元素值,把較小的元素移動到陣列前面,把大的元素移動到陣列後面 也就是交換兩個元素的位置 這樣較小的元素就像氣泡一樣從底部上公升到頂部。冒泡演算法由雙層迴圈實現...