当前位置:编程学习 > 汇编语言 >>

汇编语言输入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语言里面嵌套汇编语言的程序!(悬赏分可以再加,只有给得好)
下一个:汇编语言编程,大神进来看看这个程序怎么不对了?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,