-
-
关于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
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!