;******************************************
TITLE 汇编语言的冒泡排序的使用
;******************************************
;******************************************
;程序平台说明
.386
.MODEL FLAT,STDCALL
OPTION CASEMAP:NONE
;******************************************
;******************************************
;文件包含
INCLUDE Irvine32.inc
;******************************************
;******************************************
;数据段的定义
.DATA
arrayTmp byte 10,12,45,12,45,01,12,78,0
strEnter byte 0dh,0ah,0
;******************************************
;******************************************
;代码段的定义
.CODE
main proc
;外部循环次数设定
MOV ECX,SIZEOF arrayTmp
;外部循环索引设定
XOR ESI,ESI
L1:
PUSH ECX;
;内部循环索引的起始值
MOV EDI,ESI
;内存循环的次数设定
MOV ECX,SIZEOF arrayTmp
SUB ECX,EDI
;开始内部循环
L2:
XOR EAX,EAX
MOV AL,arrayTmp[esi]
CMP al,arrayTmp[edi]
JB L3;
;进行交换操作
XCHG AL,arrayTmp[EDI]
MOV arrayTmp[esi],AL
L3:
;内部循环索引自增
inc edi
loopd L2;
pop ecx
;外部循环索引自增
inc esi
loopd L1;
;开始查看结果,循环输出
mov ecx,sizeof arrayTmp
xor esi,esi
L4:
movzx eax,arrayTmp[esi]
call WriteInt
;输出换行
mov edx,offset strEnter
call WriteString
inc esi
loopd L4;
exit
main endp
end main
;******************************************
PS:这是冒泡排序的实现,各步骤已经很明显了;
然后对应的C++实现的过程是
for(int i=0;i<9;i++)
for(int j=i;j<9;j++)
{
if(arrayTmp[i]>arrayTmp[j])
{
byte tmp=arrayTmp[i];
arrayTmp[i]=arrayTmo[j];
arrayTmp[j]=tmp;
}
}