对应的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 SEGMENTBUF DB 12,3,2,5,6,7 ;定义字节数据区
DATA ENDSSTACK SEGMENT STACK ;定义堆栈DB 32 DUP (0)
STACK ENDSCODE 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 OVERMOV DS:[SI],AH ;交换相邻两数MOV DS:[SI+1],AL
OVER:INC SILOOP LOOP2 ;内层循环POP CXLOOP LOOP1 ;外层循环MOV AX,4C00H ;返回dosINT 21H ;系统中断
CODE ENDS
END START
运行截图如下:
其实还可以优化,比如循环次数可以减少或者用快排等等都可以。