作业帮 > 综合 > 作业

【跪求】【汇编】使用冒泡程序将:97,78,-1,0,32,14,21,27,-20,99,从小到大的进行排序…………

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/05 14:11:01
【跪求】【汇编】使用冒泡程序将:97,78,-1,0,32,14,21,27,-20,99,从小到大的进行排序…………
【跪求】使用冒泡程序将:97,78,-1,0,32,14,21,27,-20,99,从小到大的进行排序,然后逐位加5并输出显示.要求:
1.未排序的各寄存器中的数
2.排序后的各寄存器中的数
3.逐位加5的各寄存器的书
用汇编语言
DATA SEGMENT
TABLE DB 97,78,-1,0,32,14,21,27,-20,99
LEN EQU $-TABLE
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV CH,LEN
DEC CH
LOP0:MOV SI,OFFSET TABLE
MOV CL,CH
XOR BL,BL
LOP1:MOV AL,[SI]
CMP AL,[SI+1]
JLE NEXT
XCHG AL,[SI+1]
MOV [SI],AL
OR BL,01H
NEXT:INC SI
DEC CL
JNZ LOP1
AND BL,BL
JZ STOP
DEC CH
JNZ LOP0
STOP:MOV AH,4CH
INT 21H
CODE ENDS
END START
上面是标准的冒泡程序,只要在上面的基础上再逐位加五即可
DATAS SEGMENT
;此处输入数据段代码
NUM DW 97,78,-1,0,32,14,21,27,-20,99 ;带符号数据
COUNT EQU ($-NUM)/2 ;N个数
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
DW 40H DUP )
TOP LABEL WORD
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC FAR
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
MOV AX,STACKS
MOV SS,AX
LEA SP,TOP
;此处输入代码段代码
;输出未排序的各寄存器中的数
MOV CX,COUNT
LEA SI,NUM
CLD
L1:
CALL OUTPUT ;输出一个十进制数
MOV DL,' '
MOV AH,6
INT 21H ;输出分隔符
LOOP L1
MOV CX,COUNT
DEC CX
LEA SI,NUM
CLD
L2:
CALL SORT ;冒泡排序,按从小到大排序
LOOP L2
;输出回车换行
MOV AH,2
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
;输出排序后的各寄存器中的数
MOV CX,COUNT
LEA SI,NUM
CLD
L3:
CALL OUTPUT ;输出一个十进制数
MOV DL,' '
MOV AH,6
INT 21H ;输出分隔符
LOOP L3
;逐个加5
MOV CX,COUNT
LEA SI,NUM
LEA DI,NUM
CLD
L4:
LODSW ;取出数字
ADD AX,5 ;加5
STOSW ;存储数字
LOOP L4
;输出回车换行
MOV AH,2
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
;输出逐位加5的各寄存器的书
MOV CX,COUNT
LEA SI,NUM
CLD
L6:
CALL OUTPUT ;输出一个十进制数
MOV DL,' '
MOV AH,6
INT 21H ;输出分隔符
LOOP L6
MOV AH,4CH
INT 21H
MAIN ENDP
;传入参数:CX,比较次数;SI,数组起始位置;数组
;返回值:数组
;功能:将最大的数移到数组末尾
SORT PROC NEAR
PUSH CX
PUSH SI
L7:
LODSW
CMP AX,[SI]
JNG L8 ;注意是带符号数的比较
XCHG AX,[SI]
MOV [SI-2],AX
L8:
LOOP L7
POP SI
POP CX
RET
SORT ENDP
;传入参数:SI,数字存储位置
;返回值:数组
;功能:从存储位置上取出一个数,以十进制数输出
OUTPUT PROC NEAR
PUSH CX
LODSW
MOV BX,AX
CMP BX,0
JGE L9
MOV AH,2
MOV DL,'-'
INT 21H
DEC BX
NOT BX
L9:
;十进制位逐个存储入栈
MOV AX,BX
MOV BX,10 ;进制位
XOR CX,CX ;十进制数位数
L10:
XOR DX,DX
DIV BX
PUSH DX
INC CX ;位数自增,至少为1
CMP AX,0
JNE L10
;输出数字所在位置
MOV AH,2
L11:
POP DX
ADD DL,30H ;数字转换为字符
INT 21H
LOOP L11
POP CX
RET
OUTPUT ENDP
CODES ENDS
END START