将给定数据段中BUF1的数据按从大到小的顺序进行排序,并将排序结果存放到BUF2中。 DATA SEGMENT BUF1 DW-56,24,54,-1,89,-8 BUF2 DW 6 DUP (0) DATA ENDS
时间: 2024-05-19 08:11:12 浏览: 70
汇编语言实现三个数按从大到小次序重新存放
5星 · 资源好评率100%
MOV AX, @DATA
MOV DS, AX
LEA SI, BUF1
LEA DI, BUF2
MOV CX, 6 ; 6个数据
; 冒泡排序
AGAIN:
MOV BX, SI
ADD BX, 2 ; BX指向下一个数据
MOV DX, [SI] ; 当前数据
CMP DX, [BX] ; 如果当前数据比下一个数据小
JGE SKIP ; 跳过交换
MOV AX, [BX] ; 交换
MOV [SI], AX
MOV [BX], DX
SKIP:
ADD SI, 2 ; 下一个数据
LOOP AGAIN
MOV SI, BUF1
MOV DI, BUF2
MOV CX, 6 ; 6个数据
MOV BX, 0 ; 排序后的数据个数为0
; 从大到小将数据存放到BUF2中
AGAIN2:
MOV DX, [SI]
CMP DX, 0 ; 如果当前数据为0,说明已经存放了所有排序后的数据
JE FINISH
MOV AX, DX
MOV BX, DI
ADD BX, 2 ; BX指向下一个数据
MOV CX, BX
WHILE:
MOV BX, [BX] ; 取出已排序的数据
CMP BX, 0 ; 如果已经取完所有排序后的数据
JE STORE ; 存放当前数据
CMP AX, BX ; 如果当前数据比已排序的数据小
JLE STORE ; 存放当前数据
ADD CX, 2 ; 下一个已排序的数据
JMP WHILE
STORE:
MOV [DI], DX ; 存放当前数据到BUF2中
ADD DI, 2 ; 下一个空位
INC BX ; 排序后的数据个数+1
ADD SI, 2 ; 下一个数据
JMP AGAIN2
FINISH:
; 排序后的数据已存放到BUF2中,BX中存放排序后的数据个数
; 可以根据需要进行后续操作
MOV AH, 4CH
INT 21H
END
阅读全文