DATAS SEGMENT
A DW 0,23H,19H,20H,32H,89H,12H,34H,38H,33H,45H,13H,43H,24H,54H,1
COUNT EQU ($-A)/2;数组中元素的个数(字节)
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV CX,COUNT-1 ;外层循环数组元素个数减一
XOR DX,DX
LOPLEV1:
XOR SI,SI
PUSH CX ;CX入栈
INC DX ;外循环一次DX加1
MOV CX,COUNT ;重新赋值CX进行下一轮循环
SUB CX,DX ;内层循环次数减外层循环次数,相当于C语言中j-i-1
LOPLEV2:
MOV AX,A[SI]
MOV BX,A[SI+2]
CMP AX,BX ;比较大小
JL I10 ;AX大于BX执行下面交换,否则跳转到I10
MOV A[SI],BX
MOV A[SI+2],AX
I10:
ADD SI,2
Loop LOPLEV2
POP CX
LOOP LOPLEV1
INT 21H
CODES ENDS
END START
A DW 0,23H,19H,20H,32H,89H,12H,34H,38H,33H,45H,13H,43H,24H,54H,1
COUNT EQU ($-A)/2;数组中元素的个数(字节)
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV CX,COUNT-1 ;外层循环数组元素个数减一
XOR DX,DX
LOPLEV1:
XOR SI,SI
PUSH CX ;CX入栈
INC DX ;外循环一次DX加1
MOV CX,COUNT ;重新赋值CX进行下一轮循环
SUB CX,DX ;内层循环次数减外层循环次数,相当于C语言中j-i-1
LOPLEV2:
MOV AX,A[SI]
MOV BX,A[SI+2]
CMP AX,BX ;比较大小
JL I10 ;AX大于BX执行下面交换,否则跳转到I10
MOV A[SI],BX
MOV A[SI+2],AX
I10:
ADD SI,2
Loop LOPLEV2
POP CX
LOOP LOPLEV1
;--------------输出按位输出---------------------
MOV SI, 0
MOV CX, COUNT
LP:
OR AX, AX
MOV DX,A[SI]
ADD DX,30H
MOV AH,2
INT 21H
ADD SI,2
LOOP LP
INT 21H
CODES ENDS
END START