首页
社区
课程
招聘
关于bin2dec或bin2hex
发表于: 2006-5-19 15:04 5209

关于bin2dec或bin2hex

2006-5-19 15:04
5209
不知道有没有好的子程序可以调用,自己尝试写了一下但是都没有成功,主要是想在一个编辑框中输入二进制(0和1),然后在另一个编辑框中输出转换的结果,十进制和十六进制的都行。下面的程序是我在网上找到的,但是他的X是预先定义的,而且在末尾还有个字母'b'来表示二进制,编译运行都没有问题(如果去掉X后面的'b'转换结果就不对了),我尝试修改让它实现在编辑框中输入二进制然后转换,但是一直都不行,哪位汇编高手指点一下吧。。

.386
.model flat,stdcall
option casemap:none

; 导入库
includelib msvcrt.lib
printf PROTO C :dword,:vararg

.data
X dword 00011000111011110001001101100101b
hStr byte 8 dup(?),0                    
dStr byte 10 dup(?),0               
bStr byte 32 dup(?),0        
Count dword ?                    
szFmt byte 'hex format = %sh',0ah      
      byte 'dec format = %sd',0ah   
   byte 'bin format = %sb',0ah   
   byte 'bits of 1 = %d',0ah   

.code
start:
mov ecx,32   
mov eax,X        
mov Count,0   

f10:
shr eax,1        
jnc f20   
    inc Count   

f20:
    loopnz f10   

mov ecx,32      
mov eax,X      

f30:
    mov bStr[ecx-1],'0'  
shr eax,1            
jnc f40               
    mov bStr[ecx-1],'1'   

f40:
    loop f30

mov ecx,8            
mov eax,X           

f50:
    mov ebx,eax      
and ebx,0fh         
add bl,'0'           
cmp bl,'9'           
jbe f60              
    add bl,'A'-('9'+1)   

f60:
    mov hStr[ecx-1],bl  
shr eax,4            
loop f50           

    mov ecx,10           
mov eax,X      
xor edx,edx        
mov ebx,10

f70:
    div ebx              
add dl,'0'           
mov dStr[ecx-1],dl
xor edx,edx
    loop f70

invoke printf,offset szFmt,\
  offset hStr,\     
  offset dStr,\     
  offset bStr,\     
  Count           

ret
end start

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
当从键盘读入时那是字符的ASCII码,那肯定是不行的...先要将读入的字符串转成数字才行......如:从键盘上读入:011111111111101,它们是一个一个的字符而不是数字.....解决方法就是先将字串转成数字...
  如下:
       设写ecx 中为读入串的长度...SI读放中地址....下面将它转成数字...
     xor ebx,ebx
nextbit:
            lodsb
            sub al, '0'
            or bl,al
            shl ebx ,1
           loop     nextbit
然报输出就对了....这个只是个思路.....细节上你自己做吧....
2006-5-20 11:10
0
雪    币: 222
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
字符串形式的话,直接cmp然后or过去是最省事的了
2006-5-20 17:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
你学过数学吧?我用basic编写过不是很难啊。
2006-5-20 20:59
0
游客
登录 | 注册 方可回帖
返回
//