| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 902 人关注过本帖
标题:浮点数相加的问题 输出居然是乱码 求助
只看楼主 加入收藏
gaochaobiao
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-12-25
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
浮点数相加的问题 输出居然是乱码 求助
DATA SEGMENT
    BUF1 DD 240744BAH
    BUF2 DD 8462C4C5H
       S1 DB 0
       S2 DB 0
       E1 DW 0
       E2 DW 0
    BUF3 DD ?
    DATA ENDS
    CODE SEGMENT
            ASSUME    CS:CODE,DS:DATA
       START:MOV AX,DATA
             MOV DS,AX
             MOV SI,WORD PTR BUF1
             MOV BX,WORD PTR BUF1+2
             MOV DI,WORD PTR BUF2
             MOV DX,WORD PTR BUF2+2
             ;以下分离被加数符号、阶码、尾数
             SHL SI,1
             ADC BYTE PTR S1,0
             MOV CL,8
             ROL SI,CL
             AND SI,0FFH
             SUB SI,127
             MOV E1,SI
             MOV AX,SI
             MOV SI,WORD PTR BUF1
             AND SI,07FH
             OR  SI,80H
             ;以下分离加数符号,阶码,尾数
             SHL DI,1
             ADC BYTE PTR S2,0
             MOV CL,8
             ROL DI,CL
             AND DI,0FFH
             SUB DI,127
             MOV E2,DI
             MOV CX,DI
             MOV DI,WORD PTR BUF2
             AND DI,07FH
             OR  DI,80H
                ;以下对阶,将阶码小者尾数右移至阶码相同
                CMP AX,CX
                JZ  FADD4
                JNC FADD2
                SUB CX,AX
       FADD1:SHR SI,1
             RCR BX,1
             LOOP FADD1
             JMP  FADD4
       FADD2:SUB  AX,CX
             MOV  CX,AX
       FADD3:SHR  DI,1
             RCR  DX,1
             LOOP  FADD3
             ;阶码相同情况下判断有无有一个数为0的情况
       FADD4:PUSH SI
             OR   SI,BX
             POP  SI
             JZ   FADD5
             PUSH DI
             OR   DI,DX
             POP  DI
             JAE  FADD6
             MOV  AX,WORD PTR BUF1
             MOV  BX,WORD PTR BUF1+2
             JMP  EXIT1
       FADD5:MOV AX,WORD PTR BUF2
             MOV BX,WORD PTR BUF2+2
             JMP EXIT1
       ;进行符号分析
       FADD6:MOV AL,S1
             CMP AL,S2
             JZ  FADD14
             CMP SI,DI
             JZ  FADD13
             JAE FADD10
      FADD7: SUB DI,SI
             SBB DX,BX
             MOV BX,DX
             MOV AX,WORD PTR BUF2
             AND AX,0FF80H
      FADD8:TEST DI,80H
            JNZ  FADD9
            MOV  CX,23
            SHL BX,1
            RCL  DI,1
            SUB AX,80H
            LOOP FADD8
     FADD9:AND DI,07FH
           ADD AX,DI
           JMP EXIT1
      ;被加数大时的处理
     FADD10:SUB SI,DI
           SBB BX,DX
           MOV AX,WORD PTR BUF1
           AND AX,0FF80H
     FADD11:TEST SI,80H
            JNZ  FADD12
            MOV CX,23
            SHL BX,1
            RCL SI,1
            SUB AX,80H
            LOOP FADD11
     FADD12:AND SI,7FH
            ADD AX,SI
            JMP EXIT1
     FADD13:CMP BX,DX
             JAE  FADD7
             JNZ FADD10
             MOV AX,0
             MOV BX,0
             JMP EXIT1
           ;处理符号相同的情况
     FADD14:ADD BX,DX
            ADC SI,DI
            MOV AX,WORD PTR BUF1
            AND AX,0FF80H
            TEST SI,80H
            JZ  FADD15
            SHR SI,1
            RCR BX,1
            ADD AX,80H
     FADD15:AND SI,7FH
            ADD AX,SI
     EXIT1:MOV WORD PTR BUF3,AX
           MOV WORD PTR BUF3+2,BX
           LEA DX,OFFSET WORD PTR BUF3
           MOV AH,09
           INT 21H
           MOV AH,4CH
           INT 21H
      CODE ENDS
           END START  
搜索更多相关主题的帖子: 符号 
2010-12-25 18:13
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:20 
   
    BUF1 DD 240744BAH
    BUF2 DD 8462C4C5H ;请问是表示浮点数么?
    BUF3 DD ?         ;是存放相加的和么?
    EXIT1:MOV WORD PTR BUF3,AX   
    MOV WORD PTR BUF3+2,BX      ;如果是把相加的和的结果送入BUF3
    LEA DX,OFFSET WORD PTR BUF3 ;那么你这句显示不可能对
    ->
    MOV DX,OFFSET BUF3    ;最好改成这样
    因为结果要转成字符才能显示么,比如0->30H,1->31H,A->41H,etc.
    浮点算法我没看,主要是原理不太清楚,方便的话你能把原理写下么,我也想学习一下,感谢,呵呵
    我给你改了一下,主要是最后一段显示的.
程序代码:
DATA SEGMENT
    BUF1 DD 240744BAH
    BUF2 DD 8462C4C5H
       S1 DB 0
       S2 DB 0
       E1 DW 0
       E2 DW 0
    BUF3 DD ?
    STRBUF3 DB 8 DUP(?),'$'
    DATA ENDS
    CODE SEGMENT
            ASSUME    CS:CODE,DS:DATA
       START:MOV AX,DATA
             MOV DS,AX
             MOV SI,WORD PTR BUF1
             MOV BX,WORD PTR BUF1+2
             MOV DI,WORD PTR BUF2
             MOV DX,WORD PTR BUF2+2
             ;以下分离被加数符号、阶码、尾数
             SHL SI,1
             ADC BYTE PTR S1,0
             MOV CL,8
             ROL SI,CL
             AND SI,0FFH
             SUB SI,127
             MOV E1,SI
             MOV AX,SI
             MOV SI,WORD PTR BUF1
             AND SI,07FH
             OR  SI,80H
             ;以下分离加数符号,阶码,尾数
             SHL DI,1
             ADC BYTE PTR S2,0
             MOV CL,8
             ROL DI,CL
             AND DI,0FFH
             SUB DI,127
             MOV E2,DI
             MOV CX,DI
             MOV DI,WORD PTR BUF2
             AND DI,07FH
             OR  DI,80H
                ;以下对阶,将阶码小者尾数右移至阶码相同
                CMP AX,CX
                JZ  FADD4
                JNC FADD2
                SUB CX,AX
       FADD1:SHR SI,1
             RCR BX,1
             LOOP FADD1
             JMP  FADD4
       FADD2:SUB  AX,CX
             MOV  CX,AX
       FADD3:SHR  DI,1
             RCR  DX,1
             LOOP  FADD3
             ;阶码相同情况下判断有无有一个数为0的情况
       FADD4:PUSH SI
             OR   SI,BX
             POP  SI
             JZ   FADD5
             PUSH DI
             OR   DI,DX
             POP  DI
             JAE  FADD6
             MOV  AX,WORD PTR BUF1
             MOV  BX,WORD PTR BUF1+2
             JMP  EXIT1
       FADD5:MOV AX,WORD PTR BUF2
             MOV BX,WORD PTR BUF2+2
             JMP EXIT1
       ;进行符号分析
       FADD6:MOV AL,S1
             CMP AL,S2
             JZ  FADD14
             CMP SI,DI
             JZ  FADD13
             JAE FADD10
      FADD7: SUB DI,SI
             SBB DX,BX
             MOV BX,DX
             MOV AX,WORD PTR BUF2
             AND AX,0FF80H
      FADD8:TEST DI,80H
            JNZ  FADD9
            MOV  CX,23
            SHL BX,1
            RCL  DI,1
            SUB AX,80H
            LOOP FADD8
     FADD9:AND DI,07FH
           ADD AX,DI
           JMP EXIT1
      ;被加数大时的处理
     FADD10:SUB SI,DI
           SBB BX,DX
           MOV AX,WORD PTR BUF1
           AND AX,0FF80H
     FADD11:TEST SI,80H
            JNZ  FADD12
            MOV CX,23
            SHL BX,1
            RCL SI,1
            SUB AX,80H
            LOOP FADD11
     FADD12:AND SI,7FH
            ADD AX,SI
            JMP EXIT1
     FADD13:CMP BX,DX
             JAE  FADD7
             JNZ FADD10
             MOV AX,0
             MOV BX,0
             JMP EXIT1
           ;处理符号相同的情况
     FADD14:ADD BX,DX
            ADC SI,DI
            MOV AX,WORD PTR BUF1
            AND AX,0FF80H
            TEST SI,80H
            JZ  FADD15
            SHR SI,1
            RCR BX,1
            ADD AX,80H
     FADD15:AND SI,7FH
            ADD AX,SI
     EXIT1:MOV WORD PTR BUF3,AX
           MOV WORD PTR BUF3+2,BX
          
           XOR AH,AH
           MOV BX,OFFSET BUF3
           XOR CH,CH
       MOV SI,3
       MOV DI,0FFFFH
     NEXT:

           MOV AL,BYTE PTR [BX+SI]
           MOV AH,AL
           MOV CL,4
       SHR AL,CL
     N2:   AND AL,0FH 

           INC DI
           CMP AL,09H
       JB PASS
       ADD AL,07H
     PASS:
       ADD AL,30H

           MOV STRBUF3[DI],AL
           XCHG AH,AL

           ADD CL,-2
           JNZ N2
       DEC SI
           CMP SI,0FFFFH
       JNZ NEXT
           LEA DX,STRBUF3
       MOV AH,09
           INT 21H
           MOV AH,4CH
           INT 21H
      CODE ENDS
           END START  

技术问题,请不要以短消息方式提问
2010-12-25 19:49
gaochaobiao
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-12-25
收藏
得分:0 
回复 2楼 zaixuexi
呵呵  谢谢你的帮助哦
240744BAH和8462C4C5H的确表示的是浮点数
浮点数的存储规则是
单精度浮点数存储时共有32位,最高位是浮点数的符号位,后面跟8位经偏移的阶码,偏移量是127,尾数规格化为1.XXXXXXXXX(X为0或1)的形式,再将1与点省略,尾数用23位表示,例如:十进制+178.125的二进制为10110010.0001,其阶码为十进制7(就是小数点的位置所在),加偏移量127后为134,化为二进制为10000110
            表示为   0  10000110    011001000010000  000000000
2010-12-26 13:20
快速回复:浮点数相加的问题 输出居然是乱码 求助
数据加载中...
 
   



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

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