首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2012-03-26 
wsprintf格式化字符串的问题eax的地址处值为12345678h现在想把12345678h格式化成1234-5678的字符串用wspri

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 

热点排行