请帮忙看个子程序

ftmusic 2009-09-22 10:48:18
;计算16进制到10进制
_HexToDec proc
local @szBuffer[512]:byte

invoke GetDlgItemText,hWinMain,IDC_HEX,addr @szBuffer,sizeof @szBuffer
lea esi,@szBuffer
cld
xor eax,eax
mov ebx,16
.while TRUE
movzx ecx,byte ptr [esi]
inc esi
.break .if ! ecx ;此处是对ECX按位取反还是把ECX作为表达式的结果再取反呢?
.if cl > '9' ;cl中装的是数值,还是字符的ASCII码?
sub cl,'A' - 0ah ;此处减去0ah是什么意思,该指令的意思?
.else
sub cl,'0'
.endif
mul ebx ;ebx与谁相乘,默认的不是与累加器相乘吗?结果又放在哪里?
add eax,ecx
.endw
invoke wsprintf,addr @szBuffer,addr szFmtHexToDec,eax
invoke SetDlgItemText,hWinMain,IDC_DEC,addr @szBuffer
ret

_HexToDec endp
...全文
54 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
j8727 2009-09-24
  • 打赏
  • 举报
回复
1.把ECX作为表达式的结果取反,其实就是判断ECX=0,是0的话停止
2.数值和ASCII码有区别吗?ASCII码也是数值啊,9的ASCII码39h,不也是数值吗,直接与CL的值比较啊
3.CL-('A'-0AH)=CL-'A'+0AH,如果CL='A',则运算后CL=0AH,如果CL='B',则运算后=0BH,达到目的了啊
4.与EAX相乘,结果放到EDX,EAX里

21,453

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧