;冒泡排序
ASSUME CS:code1,SS:stack1,DS:data1
data1 SEGMENT
array DW 1,8,9,2,5,4,7,6,3,10
data1 ENDS
;
stack1 SEGMENT STACK
DB 256 DUP(?)
stack1 ENDS
;
code1 SEGMENT
start: MOV AX,data1
MOV DS,AX
;
MOV CH,9
loop2: MOV CL,CH ;CH记录外循环次数,CL记录内循环次数
LEA BX,array
SUB BX,2
loop1: ADD BX,2
MOV DI,BX ;BX记录前一个数的地址,DI记录后一个数的地址
ADD DI,2
MOV AX,[DI] ;AX作临时变量
;如果用字变量,这里就不能用用AX,应该用AL
;must be index or base register,这里不能用DX
CMP [BX],AX
JNA next1
;use stack to exchange 2 variables
;SP一次只能移动2或4个字节,不能操作一个字
PUSH [BX]
PUSH [DI]
POP [BX]
POP [DI]
next1: DEC CL
JNZ loop1
DEC CH
JNZ loop2
RET
code1 ENDS
END start