對應的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
運作截圖如下:
其實還可以優化,比如循環次數可以減少或者用快排等等都可以。