| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3208 人关注过本帖
标题:;从键盘输入一个3位的十进制无符号整数,请分别用二进制、八进制和十六进制 ...
只看楼主 加入收藏
keep_on
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2012-10-31
收藏
 问题点数:0 回复次数:7 
;从键盘输入一个3位的十进制无符号整数,请分别用二进制、八进制和十六进制形式输出。
   这个程序为什么输不出16进制的形式?请大家帮忙看看哪出了问题。。。



     ;从键盘输入一个3位的十进制无符号整数,请分别用二进制、八进制和十六进制形式输出。         

         TITLE  INT I/O
  DATA   SEGMENT
         X      DB 'X=','$'
         CRLF   DB 0AH,0DH,'$'
         STR10  DB 4 DUP('$')
         STR2   DB 17 DUP('$')
         STR8   DB 7 DUP ('$')
         STR16  DB 5 DUP('$')
  DATA   ENDS

  STACK  SEGMENT PARA STACK 'STACK'
         DB 100 DUP(?)
  STACK  ENDS

  CODE   SEGMENT
         ASSUME  CS:CODE,DS:DATA,SS:STACK
  begin: MOV  AX,DATA
         MOV  DS,AX
         
         LEA  BX,STR10   
         CALL READNUM     ;读入 X值到指定的单元STR10

         LEA  BX,STR10    ;把X转换为二进制数
         CALL BCDTOB

         MOV  AX,WORD PTR STR10
         LEA  BX,STR2    ;把二进制数转换为二进制ASC码串
         CALL BTOSTR2      
         
         lea  dx,str2
         call outstr   
     
         LEA   DX, CRLF
         CALL  OUTSTR       ;输出字符串:"回车、换行"

         MOV  AX,WORD PTR STR10
         LEA  BX,STR8    ;把二进制数转换为八进制ASC码串
         CALL BTOSTR8     

         lea  dx,str8
         call outstr
   
         LEA   DX, CRLF
         CALL  OUTSTR       ;输出字符串:"回车、换行"   
         
         MOV  AH,4CH
         INT  21H
      
         MOV  AX,WORD PTR STR10
         LEA  BX,STR16   ;把二进制数转换为十六进制ASC码串
         CALL BTOSTR16      

         lea  dx,str16
         call outstr
         
         MOV  AH,4CH
         INT  21H              

;子程序名:READNUM
;功能:从键盘输入一个三位的无符号数到指定的存储单元
;入口参数:BX为存放二进制数的起始地址。
;使用的寄存器:AX,DX  

 READNUM  PROC
          PUSH  AX
          PUSH  DX
      
          LEA   DX,X
          CALL  OUTSTR
          INC   BX          ;保证高位在高地址
          INC   BX
          MOV   AH,1
          INT   21H
          MOV   [BX],AL
          DEC   BX
          MOV   AH,1
          INT   21H
          MOV   [BX],AL
          DEC   BX
          MOV   AH,1
          INT   21H
          MOV   [BX],AL

          LEA   DX,CRLF
          CALL  OUTSTR         
         
          POP   DX
          POP   AX
          RET
 READNUM  ENDP

;子程序名:BCDTOB
;功能:把三位的BCD码转换为二进制数
;入口参数:BX=BCD码的起始地址
;使用的寄存器:AX,CX,DX  

 BCDTOB PROC
        PUSH  CX
        PUSH  AX
        PUSH  DX
        MOV   CL,100
        MOV   AL,[BX+2]
        AND   AL,0FH
        MUL   CL
        MOV   DX,AX
 
        MOV   CL,10
        MOV   AL,[BX+1]
        AND   AL,0FH
        MUL   CL
        ADD   DX,AX
 
        MOV   AH,0
        MOV   AL,[BX]
        AND   AL,0FH
        ADD   AX,DX
        MOV   [BX],AX
        POP   DX
        POP   AX
        POP   CX
        RET
BCDTOB  ENDP



;子程序名:BTOSTR2
;功能:把二进制数转换成二进制BCD码串
;入口参数:AX=二进制数
;出口参数:BX=二进制BCD码串的起始地址
;使用的寄存器:CX  

BTOSTR2  PROC
         PUSH CX
         MOV  CX,16
 AGAIN:  ROL  AX,1
         JC   BOT
         MOV  [BX],BYTE PTR 30H
         JMP  LOP
   BOT:  MOV  [BX],BYTE PTR 31H
   LOP:  INC BX
         LOOP AGAIN
         POP  CX
         RET
BTOSTR2  ENDP

;子程序名:BTOSTR8
;功能:把二进制数转换成八进制BCD码串
;入口参数:AX=二进制数
;出口参数:BX=八进制BCD码串的起始地址
;使用的寄存器:CX,DX  

BTOSTR8  PROC
         PUSH CX
         PUSH DX
         MOV  CL,3
         MOV  DX,AX    ;预先保存AX的值,方便后用
         AND  AX,0007H
         ADD  AL,30H         
         MOV  [BX+5],AL

         MOV AX,DX
         SHR AX,CL
         MOV DX,AX
         AND AX,0007H
         ADD AL,30H
         MOV [BX+4],AL

         MOV AX,DX
         SHR AX,CL
         MOV DX,AX
         AND AX,0007H
         ADD AL,30H
         MOV [BX+3],AL

         MOV AX,DX
         SHR AX,CL
         MOV DX,AX
         AND AX,0007H
         ADD AL,30H
         MOV [BX+2],AL

         MOV AX,DX
         SHR AX,CL
         MOV DX,AX
         AND AX,0007H
         ADD AL,30H
         MOV [BX+1],AL

         MOV AX,DX
         SHR AX,CL
         MOV DX,AX
         AND AX,0007H
         ADD AL,30H
         MOV [BX],AL

         POP  DX
         POP  CX
         RET
BTOSTR8  ENDP

;子程序名:BTOSTR16
;功能:把二进制数转换成十六进制BCD码串
;入口参数:AX=二进制数
;出口参数:BX=十六进制BCD码串的起始地址
;使用的寄存器:CX,DX  

BTOSTR16  PROC
         PUSH CX
         PUSH DX
         MOV  CL,4
         MOV  DX,AX
         AND  AX,000FH
         CALL CHANGE
         MOV  [BX+3],AL
                  
         MOV  AX,DX
         SHR  AX,CL
         AND  AX,000FH
         CALL CHANGE
         MOV  [BX+2],AL

         MOV  AX,DX
         SHR  AX,CL
         AND  AX,000FH
         CALL CHANGE
         MOV  [BX+1],AL

         MOV  AX,DX
         SHR  AX,CL
         AND  AX,000FH
         CALL CHANGE
         MOV  [BX],AL
         RET
BTOSTR16 ENDP

  CHANGE PROC
         CMP  AL,10
         JL   ADD_0
         ADD  AL,'A'-'0'-10
  ADD_0: ADD  AL,'0'
         RET
  CHANGE ENDP


;子程序名:OUTSTR
;功能:输出缓冲区中的字符串
;入口参数:DS:DX=字符串的起始地址
;使用的寄存器:AX  
 OUTSTR  PROC
          MOV  AH,9
          INT  21H
          RET
 OUTSTR   ENDP

     CODE ENDS
          END  begin
                    
搜索更多相关主题的帖子: 键盘 十六进制 二进制 八进制 
2012-12-06 17:00
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
程序比较长 而且流程有些混乱 输出的二进制和八进制都不对 16进制无法显示。
改起来难度较大 楼主再自己琢磨下 先把二进制的搞定吧 一步步来。

梅尚程荀
马谭杨奚







                                                       
2012-12-06 22:16
keep_on
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2012-10-31
收藏
得分:0 
不会啊,我运行过,二进制和八进制是可以出来的,就是16进制的结果没有出来
2012-12-07 19:15
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 3楼 keep_on
是吗 我运行了 没看到正确的二进制和八进制
莫非不是你自己写的 是网上当的程序?

梅尚程荀
马谭杨奚







                                                       
2012-12-07 22:30
keep_on
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2012-10-31
收藏
得分:0 
回复 4楼 有容就大
怎么会。。。我都运行的出来。。。
2012-12-12 13:14
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 5楼 keep_on
发个图 看看 我也运行了你的程序 怎么得到的都是错误的东西。。。

梅尚程荀
马谭杨奚







                                                       
2012-12-12 16:35
Erison
Rank: 2
等 级:论坛游民
帖 子:5
专家分:10
注 册:2012-12-7
收藏
得分:0 
回复 6楼 有容就大
图片附件: 游客没有浏览图片的权限,请 登录注册


同求!!
2012-12-12 18:55
最后的轻骑兵
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-5-1
收藏
得分:0 
请问,你用的什么软件运行的,我的这个软件没弹出输入框啊
2017-05-01 15:08
快速回复:;从键盘输入一个3位的十进制无符号整数,请分别用二进制、八进制和十六 ...
数据加载中...
 
   



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

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