masm32中的十进制值

时间:2016-12-21 15:02:56

标签: assembly masm masm32

我在装配中有一件事有问题。我创建了一个变量 points db 65。起始值为65,但是当我想在程序中使用

显示此值时
invoke CreateWindowEx,0,ADDR classStatic,ADDR points, WS_CHILD or WS_VISIBLE,100,100,50,50,hWnd,0,hInstance,0

它返回ASCII。在此示例中,字符“A”。如何修复它以显示“65”?

1 个答案:

答案 0 :(得分:4)

CreateWindowEx函数期待一个C风格的字符串,它是一个指向NUL终止字符序列的指针。

你传递的内容实际上是无效输入,我很惊讶你得到了“A”而不是“A $ ^ a!束?* - @(讨厌^& +垃圾{%”。你很幸运在points常量之后放置了0,可能是因为汇编器插入了填充。

如果要显示数字作为窗口的标题,则首先需要将该数字转换为字符串。有很多方法可以做到这一点。最简单的就是调用一个能为你完成它的函数。由于您已经链接到Win32 API,因此可以通过调用wsprintf来逃避。更好的是,链接到C运行时库并调用snprintf。或者,您可以编写自己的代码,将数字转换为字符串。

假设你的字符串是静态的,一个更好的方法是首先简单地使用一个字符串:

points db "65",0

(可能想要选择比points更好的名字。)

另请注意,Windows是基于Unicode的操作系统,它通过2字节UTF-16类型实现Unicode。因此,您应始终显式调用W - 后缀版本的Windows API函数(或定义UNICODE_UNICODE符号),并且字符串字符需要为WORD大小。因此,代码将是:

strCaption  dw '6','5',0
invoke CreateWindowExW,0,ADDR classStatic,ADDR strCaption, WS_CHILD or WS_VISIBLE,100,100,50,50,hWnd,0,hInstance,0