搜索

汇编语言ARC的冒泡排序,急等!

发布网友 发布时间:2022-04-22 01:30

我来回答

1个回答

热心网友 时间:2023-06-24 04:24

DATA SEGMENT
A DW 12CH,0FAH,118H,0F0H,104H;此处进行数据的初始化(包含要进行显示的各种提示性语言)
N EQU 4
AVG DW ?
M DW 10D
P DW 3D
D DW 2
BUF1 DB 'YUAN SHI SHU JU:','$'
BUF2 DB 0DH,0AH,'PAI XU HOU SHU JU:','$'
BUF3 DB 0DH,0AH,'ZUI DA ZHI:','$'
BUF4 DB 0DH,0AH,'ZUI XIAO ZHI:','$'
BUF5 DB 0DH,0AH,'PING JUN ZHI:','$'
BUF6 DB 0DH,0AH,'ER JI ZHI PING JUN ZHI:','$'
DATA ENDS
STACK SEGMENT
DW 100 DUP (?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
GO: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET BUF1 ;显示未排序的提示符
MOV AH,09H
INT 21H
MOV CX,N+1
LEA SI,A
LOOP1: CALL ZH ;进行未排序的数据显示
LOOP LOOP1 ;循环5次,因为有5个数
;开始排序
CLD
MOV CX,N
LOOP2: PUSH CX
LEA SI,A ;取数据区的第一个数的偏移量
LODSW ;取第1个数存入AX
LP1: MOV BX,AX ;开始内部排序第5-CX次
LODSW ;取第6-CX个数
CMP BX,AX ;比较两个数大小
JL L1 ;前面数小的话符合要求跳转,大的话换位
MOV [SI-2],BX ;大的数到后面
MOV [SI-4],AX ;小的数到前面
MOV AX,[SI-2] ;改变AX的值
L1: LOOP LP1 ;小循环CX减1
POP CX ;弹出外部循环计数
LOOP LOOP2
;输出排序后的结果
MOV DX,OFFSET BUF2
MOV AH,09H
INT 21H
MOV CX,N+1 ;因为有五个数,所以计数寄存器CX置5
LEA SI,A
LOOP3: CALL ZH ;排序后结果显示
LOOP LOOP3
;输出最大值
MOV DX,OFFSET BUF3
MOV AH,09H
INT 21H
LEA SI,A
ADD SI,8H ;最大值现在排在最后,所以SI要进行加8处理
CALL ZH
;输出最小值
MOV DX,OFFSET BUF4
MOV AH,09H
INT 21H
LEA SI,A
CALL ZH
;输出去掉最大最小值的平均值
MOV DX,OFFSET BUF5
MOV AH,09H
INT 21H
MOV AX,[SI] ;因为前一个调用已经将SI指向了第二个数据
MOV BX,[SI+2] ;取第二个数据
ADD AX,BX
MOV BX,[SI+4] ;取第三个数据(这样相加相当于去掉了最大最小值)
ADD AX,BX
CWD
DIV P ;把相加和除以三来求得平均值
LEA SI,AVG
MOV [SI],AX ;把求得的平均值存入AVG
CALL ZH
;输出2进制的平均数
MOV DX,OFFSET BUF6
MOV AH,09H
INT 21H
MOV CX,16D
LEA SI,AVG
MOV AX,[SI]
LP2: CWD
IDIV D ;采用不断除以二并压入栈的方式得到数据的二进制表示方式
PUSH DX
LOOP LP2
MOV CX,16D
LP3: POP DX
ADD DL,30H ;将数据弹出站并且加30H进行ASCII的转换
MOV AH,2
INT 21H
LOOP LP3
MOV AH,4CH
INT 21H
ZH PROC ;转换子程序(SI指针由外部提供,方便选择要显示的东西)
LODSW
MOV BX,3 ;数据在十进制时的是三位数所以计数部分BX置三
ZL1: CWD
DIV M ;采用除以10的方法不断得到每一位数
PUSH DX ;将每一位压入栈
DEC BX
JNZ ZL1
MOV BX,3
ZL2: POP DX ;压完一个数后立即出栈进行显示
ADD DL,30H
DEC BX
MOV AH,2
INT 21H
JNZ ZL2
MOV DL,20H ;每个数据间由空格隔开
MOV AH,2
INT 21H
RET ;子程序结束
ZH ENDP
CODE ENDS
END G追问感谢你的代码,但是这不是ARC的指令啊。我再等等吧,实在没有就采纳你的了

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
Top