当前位置: 代码迷 >> 汇编语言 >> wsprintf格式化字符串的有关问题
  详细解决方案

wsprintf格式化字符串的有关问题

热度:2851   发布时间:2013-02-26 00:00:00.0
wsprintf格式化字符串的问题
eax的地址处值为12345678h
现在想把12345678h格式化成1234-5678的字符串
用wsprintf函数应该怎样写
sFormat TCHAR "%04X-%04X",0

我试了下面的写法都有问题
代码:

INVOKE wsprintf, ADDR b, ADDR sFormat, DWORD ptr[eax+2h],WORD ptr[eax] 

这种的结果是b=1234-12345678

代码:

INVOKE wsprintf, ADDR b, ADDR sFormat, word ptr [eax+2h],word ptr [eax] 

这种的结果是b=1234-56780000,并且程序崩溃

------解决方案--------------------------------------------------------
Masm32 的汇编程序在这方面有问题。只能自己将 word 转换为 dword 然后传递给 wsprintf(),比如:
Assembly code
  movzx  edx, word ptr [eax]  movzx  ecx, word ptr [eax][2]  invoke  wsprintf, addr b, addr sFormat, ecx, edx
------解决方案--------------------------------------------------------
试试下面的,没有验证过,仅供参考:
Assembly code
push ecxmov ecx, [eax]and ecx, 0ffhINVOKE wsprintf, ADDR b, ADDR sFormat, DWORD ptr [eax+2h],ecxpop ecx
  相关解决方案