** 在emu8086除錯過
assume cs:code,ds:data
data segment
array dw 49,38,65,97,76,13,27 ;要排序的數
count dw ($-array)/2 ;獲取排序數目
data ends
code segment
start:mov ax,data
mov es,ax
mov ds,ax
retry:cmp count,1 ;是否迴圈排序過count-1次
je exit
dec count
mov cx,count
mov si,offset array
cldnext1:lodsw
cmp ax,[si]
jle next2
xchg ax,[si]
xchg ax,[si-2]
next2:loop next1
jmp short retry
exit:mov ax,4c00h :程式結束
int 21h
code ends
end start
每次排序依次找到最大的數,第二大的數。。。以此類推。程式解釋:
lodsw 將ds:[si]的字單元內容給ax,並且將si加2或減2,此程式中由於設定了cld,所以每次si都自動加2;
jle 和cmp配合使用,判斷low and equal,就是小於或等於,即運算元1小於或等於運算元2就執行跳轉,否則順序執行;
xchg 互換指令,即將ax和[si]中的內容互換,該指令不影響標誌位。
最後執行結果可以通過檢視記憶體的方式驗證,這裡就不輸出到前端了。
彙編 氣泡排序。。。
最近在學習彙編,也發現自己好長時間沒寫部落格了,就更新乙個昨天用彙編寫的氣泡排序吧 上個星期五開始學的彙編,寫的較挫,望見諒 有bug還望提出,一起討論 data segment buf db 10,4,6,55,30,90,78,88,69 n buf data ends code segment...
彙編氣泡排序
datas segment a dw 0,23h,19h,20h,32h,89h,12h,34h,38h,33h,45h,13h,43h,24h,54h,1 count equ a 2 陣列中元素的個數 位元組 datas ends stacks segment 此處輸入堆疊段 stacks end...
彙編實現氣泡排序
感覺。實現一下還是有點意義的。用的是mips指令集,不造是不是過時了。然後參考資料 實現上不敢用保留暫存器,因為用完貌似需要恢復原暫存器的值,所以全部都用臨時暫存器的值 然後遇到了幾個問題 一 變數的定義 主要是在資料段裡幹,資料段用.data標識 然後定義方式是 變數名 變數型別 初始值 eg.a...