| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 673 人关注过本帖
标题:找错找错,求大侠帮忙找错!!!!
只看楼主 加入收藏
睡睡
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-6-9
结帖率:100%
收藏
已结贴  问题点数:0 回复次数:6 
找错找错,求大侠帮忙找错!!!!
计算比赛成绩
基本功能:
   (1) 有9名评委,每个评委给分范围为0~10(整数):由键盘输入;
   (2) 9名评委给分中,去掉一个最高分和一个最低分,剩余7名评委的平均分即为参赛者的得分(精确到小数点后二位,不考虑四舍五入);
   (3) 将最后得分在光标位置处显示出来。

以下是我写的汇编程序,程序可以运行,从理论上讲也应该是可以实现功能,但是在最后输入数据后却不能正确显示结果,求大侠帮忙找出到底在哪弄错了

DATA SEGMENT
    BIN DB 9 DUP(0)
    BIN1 DB '  JUDGE '
    BIN2 DB 31h,':','$'
    BIN3 DB '  RSULT:','$'   
        S DB ?
DATA ENDS

CODE SEGMENT
        ASSUME CS:CODE,DS:DATA
   
        BININ:   MOV AX,DATA
             MOV DS,AX
             XOR SI, SI       ; xor (异或)在这里相当于清零
             MOV CX,9
;--------------------------------------------------------------------   
           INPUT:LEA  DX, BIN1
             MOV AH, 9H       ;实现DOS调用中的09号功能,屏幕上显示字符窜
             INT 21H

;-------------从键盘上输入数据-----------------------------------------            

                 MOV AH,01H      
             INT 21H
            
                 MOV BIN[SI], AL
             INC SI
             INC BIN2

;-------------实现回车换行功能------------------------------------------            

                 MOV AH, 02H
             MOV DL,0AH
             INT 21H
             MOV DL , 0DH
             INT 21H
;----------------------------------------------------------------------            
                 LOOP INPUT

    CALL PAIXU            ;调用子程序实现数据排序(采用了气泡排序方法)
   
            
                 LEA DX,BIN3
             MOV AH,9
             INT 21H
            
        CALL SUM               ;调用子程序实现求和功能(去掉最小和最大值)

;--------------实现除法运算----------------------------------------------

             MOV AL, S
             XOR AH, AH
             MOV BL, 7
             DIV BL
             MOV  S, AL
;输出整数-------------------------------------------------------------            
                PUSH AX
            MOV DL,S
            MOV AH,02h
            INT 21H
;输出小数点--------------------------------------------------------------            
                MOV DL,'.'
            MOV AH ,02h
            INT 21H
;输出小数位--------------------------------------------------------------
            POP AX
            MOV AL,AH
            MOV CL,10
            MUL CL
            MOV BL,7
            DIV BL
            MOV DL,AL
            XOR DL,30H
            MOV AH,2
            INT 21H
            MOV AL,AH
                MOV CL,10
            MUL CL
            MOV BL,7
            DIV BL
            MOV DL,AL
                XOR DL,30H
                MOV AH,2
            INT 21H
            MOV AH,4CH
            INT 21H
;气泡排序子程序算法实现-----------------------------------------------
   
         PAIXU PROC NEAR
                PUSH AX
                PUSH BX
                PUSH CX
                MOV CX,9
                DEC CX
          LOOP1:MOV DI,CX
                MOV BX,0
          LOOP2:MOV AL,BIN[BX]
                CMP AL,BIN[BX+1]
                JGE CONTINUE
                XCHG AL,BIN[BX+1]
                MOV BIN[BX],AL
       CONTINUE:ADD BX,1
                LOOP LOOP2
                MOV CX,DI
                LOOP LOOP1
                POP CX
                POP BX
                POP AX
                RET
        PAIXU ENDP
;求和子程序算法实现----------------------------------------------------------

         SUM PROC NEAR
            PUSH AX
            XOR SI,SI
            MOV CX,6
            MOV AL, BIN[SI+1]
       DOUN:INC SI
            ADD AL , BIN[SI+1]
            LOOP DOUN
            MOV S, AL
            POP AX
            RET
            SUM ENDP
;-----------------------------------------------------------

      CODE ENDS
    END BININ
搜索更多相关主题的帖子: 小数点 键盘 
2011-06-09 20:47
qiu1123
Rank: 1
来 自:福建
等 级:新手上路
帖 子:8
专家分:7
注 册:2011-6-10
收藏
得分:0 
看不懂、、、
2011-06-10 00:24
kabbin
Rank: 2
等 级:论坛游民
帖 子:6
专家分:50
注 册:2008-7-31
收藏
得分:10 
通过中断输入的数据是ASCII码,减去30h后才是正确的数值,这样后面的求和及除法的结果才是正确的。这样,输出结果时,应先将数字结果转换成ASCII字符编码,其输出才是正确的。
收到的鲜花
  • 睡睡2011-06-10 13:04 送鲜花  3朵  
2011-06-10 10:36
睡睡
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-6-9
收藏
得分:0 
回复 3楼 kabbin
O(∩_∩)O哈哈~弄好了,谢谢提醒哦,我一时糊涂把这给忘了  !!  
2011-06-10 13:03
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
收藏
得分:0 
3 楼说的对,不过还有
楼主在输出 S 的时候,还得加回 30h
并且在输出小数位的地方

            POP AX
            MOV AL,AH
            MOV CL,10
            MUL CL
            MOV BL,7
            DIV BL
            MOV DL,AL
            XOR DL,30H
            MOV AH,2                            ;这个地方已经把 ah 中的值覆盖了,但是后边要用到 ah 中的余数,所以加上 (mov cl,ah)
            INT 21H
            MOV AL,AH                            ;这里 ah 是 2 …… 我说最后的小数老输出 2 呢……改成 (mov al,cl),然后就行了,输出是正确的
                MOV CL,10
            MUL CL
            MOV BL,7
            DIV BL
            MOV DL,AL
                XOR DL,30H
                MOV AH,2
            INT 21H
            MOV AH,4CH
            INT 21H

收到的鲜花
  • 睡睡2011-06-12 11:29 送鲜花  3朵  
2011-06-10 13:18
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
收藏
得分:0 
晕……以为又可以拿点分了,谁知在我回答前十多分钟已经结贴了……悔不该不刷新悔不该不刷新
2011-06-10 13:23
睡睡
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-6-9
收藏
得分:0 
回复 6楼 obstratiker
那个我后来调试的时候也改过来了,不过谢谢了!!
2011-06-12 11:29
快速回复:找错找错,求大侠帮忙找错!!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030515 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved