汇编语言输入10个十进制有符号数,用冒泡法排序,下面这个程序只能在屏幕上显示拍好序的十个数,
怎么修改才能把原来未排序的十个数也显示的屏幕上?比如:
输入的十个数是-1,20,2,4,8,0,3,9,77;
要求输出是
“-1,20,2,4,8,0,3,9,77
-1,0,2,3,4,8,9,20,77"
下面这个程序就显示了“-1,0,2,3,4,8,9,20,77”,
DATA SEGMENT ;data 就是声明变量
DAT DB 20,-10,80,-5,-70,-9,95,-15,0,40
COUNT DB 10,10
dat2 db 10 dup(0) ; 声明一个数组
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV BL,1
LP1: CMP BL,0
JE LP4 ;相等质指令
XOR BL,BL ;将bl清零
MOV CL,COUNT
DEC CL ;减一
PUSH CX ;
LEA DI,DAT ;
LP2:MOV AL,[DI]
CMP AL,[DI+1] ; compare 比较指令
JLE LP3 ;小于等于就跳转指令
XCHG [DI+1],AL ;交换指令
MOV [DI],AL
MOV BL,1
LP3:INC DI
LOOP LP2 ;将cx中的值减1 ,然后判断ecx 是否等于0,不为0 则跳转到目的地址
POP CX
MOV COUNT,CL
JMP LP1
LP4:MOV CL,10
LEA DI,DAT
SC:MOV AX,0
MOV BH,2
MOV AL,[DI]
CMP AL,0
JGE NEXT ; 大于等于指令
NEG AL ;取反指令
PUSH AX
MOV AH,02H
MOV DL,'-'
INT 21H ; dos 中断调用
POP AX
NEXT:XOR AH,AH
DIV COUNT+1
MOV DH,AH
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
MOV AL,DH
XOR AH,AH
ADD AX,3030H
MOV DL,AL
OUTP: MOV AH,2
INT 21H
DEC BH
JZ XT ;判断是否为0,等于0 的时候转移
MOV DL,BL
JMP OUTP ;无条件跳转
XT: DEC CL
JZ DONE
INC DI
JMP SC
DONE: MOV AH,4CH
INT 21H
CODE ENDS
END START
求各位好心人解答,万分感谢!
答案://以下是10个数的冒泡排序程序 SSEG SEGMENT STACK STK DB 20 DUP(?) ;DATA中存放10个有符号数, DB -11,-67,9,56,44 DSEG ENDS CSEG
其他:试试看:
DATA SEGMENT ;data 就是声明变量
DAT DB 20, -10, 80, -5, -70, -9, 95, -15, 0, 40
COUNT DB 10, 10
dat2 DB 10 dup(0) ; 声明一个数组
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, ES:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV ES, AX
;---------------把后面的显示程序,复制到下面了:
LP40:
MOV CL, 10
LEA DI, DAT
SC0:
MOV AX, 0
MOV BH, 2
MOV AL, [DI]
CMP AL, 0
JGE NEXT0 ;大于等于指令
NEG AL ;
PUSH AX
MOV AH, 02H
MOV DL, '-'
INT 21H ;dos 中断调用
POP AX
NEXT0:
XOR AH, AH
DIV COUNT+1
MOV DH, AH
ADD AL, 30H
MOV DL, AL
MOV AH, 02H
INT 21H
MOV AL, DH
XOR AH, AH
ADD AX, 3030H
MOV DL, AL
OUTP0:
MOV AH, 2
INT 21H
DEC BH
JZ XT0 ;判断是否为0,等于0 的时候转移
MOV DL, BL
JMP OUTP0 ;无条件跳转
XT0:
DEC CL
JZ DONE0
INC DI
JMP SC0
DONE0:
MOV DL, 10 ;换行
MOV AH, 2
INT 21H
MOV DL, 13 ;回车
MOV AH, 2
INT 21H
;-----------------------------
MOV BL, 1
LP1:
CMP BL, 0
JE LP4 ;相等质指令
XOR BL, BL ;将bl清零
MOV CL, COUNT
DEC CL ;减一
PUSH CX ;
LEA DI, DAT ;
LP2:MOV AL, [DI]
CMP AL, [DI+1] ;compare 比较指令
JLE LP3 ;小于等于就跳转指令
XCHG [DI+1], AL ;交换指令
MOV [DI], AL
MOV BL, 1
LP3:INC DI
LOOP LP2 ;将cx中的值减1,然后判断ecx 是否等于0,不为0 则跳转到目的地址
POP CX
MOV COUNT, CL
JMP LP1
LP4:
MOV CL, 10
LEA DI, DAT
SC:
MOV AX, 0
MOV BH, 2
MOV AL, [DI]
CMP AL, 0
JGE NEXT ;大于等于指令
NEG AL ;
PUSH AX
MOV AH, 02H
MOV DL, '-'
INT 21H ;dos 中断调用
POP AX
NEXT:
XOR AH, AH
DIV COUNT+1
MOV DH, AH
ADD AL, 30H
MOV DL, AL
MOV AH, 02H
INT 21H
MOV AL, DH
XOR AH, AH
ADD AX, 3030H
MOV DL, AL
OUTP:
MOV AH, 2
INT 21H
DEC BH
JZ XT ;判断是否为0,等于0 的时候转移
MOV DL, BL
JMP OUTP ;无条件跳转
XT:
DEC CL
JZ DONE
INC DI
JMP SC
DONE:
MOV AH, 4CH
INT 21H
CODE ENDS
END START
;--------------------------------- 怎么修改才能把原来未排序的十个数也显示的屏幕上?比如:输入的十个数是-//以下是10个数的冒泡排序程序 SSEG;DATA中存放10个有符号数, DB
上一个:求一个在C语言里面嵌套汇编语言的程序!(悬赏分可以再加,只有给得好)
下一个:汇编语言编程,大神进来看看这个程序怎么不对了?