天天看點

用彙編實作冒泡排序

對應的C語言代碼如下:

int number[6]={12,3,2,5,6,7};
for(int i=0;i<6;i++)
{
    for(int j=0;j<6;j++)  
    {
        if(a[i]<a[j])    
        {
            int temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
    }
}
           
彙編代碼(從大到小排列):
DATA SEGMENT
	BUF DB 12,3,2,5,6,7     ;定義位元組資料區
DATA ENDS

STACK SEGMENT STACK       ;定義堆棧
	DB 32 DUP (0)
STACK ENDS

CODE SEGMENT                ;代碼段開始
   ASSUME CS:CODE,DS:DATA,SS:STACK    ;假定目前的段寄存器
START:
MOV AX,DATA
MOV DS,AX      ;資料段首位址送DS
MOV AX,STACK    
MOV SS,AX      ;棧首位址送給	SS
MOV SP,32
MOV CX,6    ;控制外層循環次數為6次
LOOP1:
	MOV SI,0    ;SI清零
	PUSH CX     ;CX進棧,儲存外層CX值
	MOV CX,6    ;内層循環次數
LOOP2:
	MOV AL,DS:[SI]
	MOV AH,DS:[SI+1]
	CMP AL,AH       ;比較相鄰兩數的大小,AL>AH跳轉,否則交換
	JNC OVER
	MOV DS:[SI],AH    ;交換相鄰兩數
	MOV DS:[SI+1],AL
OVER:
	INC SI
	LOOP LOOP2        ;内層循環
	POP CX
	LOOP LOOP1        ;外層循環

	MOV AX,4C00H     ;傳回dos
	INT 21H         ;系統中斷
CODE ENDS
END START
           

運作截圖如下:

用彙編實作冒泡排序

其實還可以優化,比如循環次數可以減少或者用快排等等都可以。