VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 641|回复: 1

请各位老师看看这个排序输出程序有什么问题

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-4 11:20:01 | 显示全部楼层 |阅读模式
;从输入有符号的10进制数,将其排序并输出,可是输出结果不对,还请各位老师错在哪了?





    M_DIRECT  MACRO     STRING                                          ;定义一个宏,调用09号DOS功能在屏幕上显示一个字符串
              MOV       DX,OFFSET STRING
              MOV       AH,09
              INT       21H
              ENDM

        DATA  SEGMENT
        COUNT_NUM  DB        'The count of numbers to sort:$'           ;提示输入要排序的数据的个数
        INMSG  DB        'Please input the sorting numbers:',0dh,0ah,'$'            ;提示输入要排序的数据
        OUTMSG  DB        'The sorting result:',0dh,0ah,'$'             ;在屏幕上提示排好续的数据
        COUNT =         100
        WTEMP DW        ?
        ARRAY  DW       COUNT DUP(?)                                    ;用来保存输入的数据
        CRLF  DB        13,10,'$'                                       ;实现回车换行的功能,13→0DH,回车;10→0AH,换行
        LEN  DW         ?                                               ;保存实际输入的数据的个数
        DATA  ENDS
        CODE  SEGMENT
        MAIN  PROC      FAR
              ASSUME    CS:CODE,DS:DATA
     
     
;************************************************************************************************   
     
      START:
              PUSH      DS
              SUB       AX,AX                                           ;置AX为0
              PUSH      AX
              MOV       AX,DATA                        ;将数据段的地址送到DX中
              MOV       DS,AX

              M_DIRECT          COUNT_NUM                   ;宏调用,在屏幕上提示输入要输入的数据的个数
                                                      
              CALL      READ                      ;调用子程序P-GETNEW,输入要输入的数据的个数
              MOV       CX,AX
              MOV       LEN,AX
              LEA       BX,ARRAY
              MOV       AH,09                          ;调用09号功能,实现回车换行
              LEA       DX,CRLF                        
              INT       21H                            ;屏幕提示输入要排序的数据
              M_DIRECT          INMSG
  GETNUMBER:                                           ;输入数据保存到ARRAY中
              CALL      READ
              MOV       [BX+SI],DX
              ADD       SI ,2
              LOOP      GETNUMBER
       SORT:                                           ;调用SORT子程序排序
              CALL      data_SORT                        
              MOV       AH,09
              LEA       DX,CRLF
              INT       21H
              M_DIRECT          OUTMSG
              CALL      OUTPUT                       ;输出排好序的数据
              ;RET
        MAIN  ENDP   
   
   
;****************************************************************************************

;读入数据

;******************************************************************************************   
   
   
    READ      PROC                                     ;从键盘上输入一个数据的子程序
              PUSH BX
              PUSH CX
              PUSH DX
              XOR BX,BX
              XOR CX,CX
              MOV AH,1
              INT 21H
              CMP AL,'+'
              JZ READ1
              CMP AL,'-'
              JNZ READ2
              MOV CX,-1
    READ1:    MOV AH,1
              INT 21H
    READ2:    CMP AL,'0'
              JB READ3
              CMP AL,'9'
              JA READ3
              SUB AL,30H
              
              SHL BX,1
              SHL BX,1
              ADD BX,DX
              MOV AH,0
              ADD BX,AX
              JMP READ1
    READ3:    CMP CX,0
              JZ READ4
              NEG BX
    READ4:    MOV AX,BX
              POP DX
              POP CX
              POP BX
              RET
    READ      ENDP   
   
;*******************************************************************************************

;排序子程序

;********************************************************************************************   

data_SORT    PROC
        PUSH BX
        PUSH CX
        PUSH DX   
        MOV SI,OFFSET LEN
        MOV CX,[SI]
        mov ax,data
        mov ds,ax
        ;MOV SI,OFFSET ARRAY
        ;MOV DX,[SI]
        ;mov cx,4
        dec cx
        mov bx,0
         mov si,0
you:    mov di,cx
        mov ax,array[si]
        mov bx,si
twop:    cmp ax,array[bx+2]
        jle on1
        mov ax,array[bx+2]
        mov dx,bx
         inc dx
         inc dx
on1:    inc bx
        inc bx
        dec di
        cmp di,0
        jnz  twop
        xchg ax,array[si]
        mov bx,dx
        mov array[bx],ax
        inc si
        inc si
        loop you
       ;mov ah,4ch
        ;int 21h
              POP DX
              POP CX
              POP BX
data_SORT ENDP


;************************************************************************************

;数据输出

;**************************************************************************************
   OUTPUT     PROC                                    ;数据输出子程序
              MOV       CX,LEN
              MOV       BX,OFFSET ARRAY                        
    AGAIN:    MOV AX,[BX]
              MOV WTEMP,AX
              JMP WRITE
              ADD BX,2
              MOV AH,09H
              LEA DX,CRLF
              INT 21H
              LOOP AGAIN
    WRITE:    PUSH AX
              PUSH BX
              PUSH DX
              MOV AX,WTEMP
              TEST AX,80h;AX
              JNZ  WRITE1
              MOV DL,'0'
              MOV AH,2
              INT 21H
              JMP WRITE5
    WRITE1:   JNS WRITE2
              MOV BX,AX
              MOV DL,'-'
              MOV AH,2
              INT 21H
              MOV AX,BX
              NEG AX
    WRITE2:   MOV BX,10
              PUSH BX
    WRITE3:   CMP AX,0
              JZ WRITE4
              SUB DX,DX
              DIV BX
              ADD DL,30H
              PUSH DX
              JMP WRITE3
    WRITE4:   POP DX
              CMP DL,10
              JE WRITE5
              MOV AH,2
              INT 21H
              JMP WRITE4
    WRITE5:   POP DX
              POP BX
              POP AX                       
              RET
   OUTPUT     ENDP
;****************************************************************************



;*****************************************************************************

CODE ENDS
END START
回复

使用道具 举报

0

主题

4

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-6 12:12:02 | 显示全部楼层
自己先看数据输入完了是不是正确,如果正确在看排序有没有问题
只贴程序没有人给你调试的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表