首页
社区
课程
招聘
[旧帖] [讨论]把16进制值转化为2进制并输出 0.00雪花
发表于: 2009-4-20 20:13 2863

[旧帖] [讨论]把16进制值转化为2进制并输出 0.00雪花

2009-4-20 20:13
2863
原本想把寄存器eax中的值以二进行形式输出,尝试着用asm进行编程,结果勉强凑出,但是由于是新手,水平太低,而且第一用asm编写,写得太乱了,请各位大牛指教更好的办法。
.486
.model flat, stdcall

option casemap:none

include d:\masmplus\include\windows.inc
include d:\masmplus\include\kernel32.inc
include d:\masmplus\include\user32.inc

includelib d:\masmplus\lib\user32.lib
includelib d:\masmplus\lib\kernel32.lib

.data

MsgText db "Hello world!",0
MsgTitle db "This is a messagebox",0

.data?
mg db 32 dup(?)

.code

start:

mov edx,offset mg   ;把mg的地址指针存入edx
mov ebx,8h          ;定义输入位数,输出8位
add edx,ebx         ;把edx的指针往后面移8位,实际上只需要移7位,因此下一语句-1
sub edx,1           ;接上一语句,-1
mov eax,9bh         ;实际要输出2进制的值放入eax,为16进制。
.while bx!=0        ;循环语句,8次
mov cl,al           ;为避免eax被直接操作,故需放入cl中
and cl,1h           ;末位取与,结果cl不是0就是1
add cl,30h          ;加上30h转化为ascii中的字符0和1
mov [edx],cl        ;把ascii字符移入edx值的地址
sub edx,1           ;edx值往前移
shr al, 1           ;算术右移一位
sub bx,1            ;循环减少1次
.endw

invoke MessageBox, NULL, addr mg, ADDR MsgTitle, MB_OK + MB_ICONINFORMATION

invoke ExitProcess, NULL

end start

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 155
活跃值: (29)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
一样是菜鸟,谈不上指教
给你个小建议用方法包起来
看起来更顺眼  

呵呵
2009-4-20 21:03
0
游客
登录 | 注册 方可回帖
返回
//