汇编排序知识之冒泡排序
生活随笔
收集整理的這篇文章主要介紹了
汇编排序知识之冒泡排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這里簡單介紹匯編中是如何進行冒泡排序的,首先先回顧C語言中的冒泡排序知識及算法,再講解匯編實現的過程,更好的鞏固和聯系了編程的思想。
一.?C語言——冒泡排序
冒泡排序的基本概念: 依次比較相鄰的兩個數,將小數放在前面,大數放在后面。每完成一遍查找都會找到一個最大數,直至排序結束.
?
由上表可見每輪排序都能確定一個最大數,直至排序結束,它相對應的C語言代碼如下:其中j參數設置為N-i-1簡化了排序的復雜度,也可以是N-1.
二.匯編——冒泡排序
相對應的匯編冒泡排序如下圖所示:
DATAS SEGMENTA DW 0,15,70,30,32,89,12,12,34,4,38,23,45,13,43,24,54,24,54,1Count EQU ($-A)/2 ;數組中元素的個數(字節) DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS START:MOV AX,DATASMOV DS,AX ;------------------------------------------------------------------------- ;冒泡排序核心算法 A排序 MOV CX,Count-1 ;外層循環執行n-1次 I10:XOR SI,SI ;異或清零XOR DI,DI I20:MOV AX,A[SI]MOV BX,A[SI+2]CMP AX,BX;比較AX和BX大小:AX<BX(小于轉移)跳轉I30,否則交換兩數JL I30MOV A[SI],BXMOV A[SI+2],AX ;交換位置I30:ADD SI,2 ;SI加2:移動一個數字位置INC DI ;DI加1CMP DI,CX ;比較CX和DI大小:DI<CX轉移,CX為外層循環總數n-1JB I20Loop I10 ;循環調至I10,Loop循環CX執行一次減1 ;------------------------------------------------------------------------- MOV AH,4CHINT 21H CODES ENDSEND START其中先在數據段中定義一個數組A并存儲20個數,而Count=($-A)/2存儲數組中元素的個數,其中$表示當前位置,即數組A中最后一個數位置減去A的起始位置,由于A是DW(2字節),所以除以2轉換為數組個數:20.
依次比較A中相鄰兩個數,存儲至AX=A[SI]和BX=A[SI+2]中,比較成立即交換否則跳轉至SI加2,繼續比較下一個相鄰兩數。
同時CX中記錄外層循環次數Count-1.利用Loop循環,Loop每循環依次默認的CX寄存器會減1,直至為0,循環停止。DI中記錄排序好的個數,每次加1與CX比較,直至排序結束。
輸出如下圖結果,這里就省略了輸出函數。只是想講講冒泡排序的過程,見諒!!!
希望能幫助大家更好的理解C語言與匯編中的冒泡排序的聯系與思想,謝謝!不足之處望讀者諒解。By:Eastmount
總結
以上是生活随笔為你收集整理的汇编排序知识之冒泡排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汇编基础知识之输入输出
- 下一篇: 汇编中断知识之INT 1CH