关于MASM32的UNICODE中文乱码

yunbookf 2011-03-08 12:38:33
a.asm源代码如下:

.386
.model flat, stdcall
option casemap :none ; case sensitive

include windows.inc
include kernel32.inc
include user32.inc
include ucmacros.asm

includelib kernel32.lib
includelib user32.lib

.data

WSTR szCaption, "test-测试中文"
WSTR szText, "test-测试中文"

.code

start:

invoke MessageBoxW, NULL, addr szText, addr szCaption, MB_OK
invoke ExitProcess, NULL

end start

----------------------------------

编译命令行
ml /c /coff a.asm
link /SUBSYSTEM:WINDOWS a.obj

结果看图。

MS-WinXP SP3 Pro + MASM32v10

是命令行漏了参数?还是要自己手动用API设语言?那又是哪个API?

发不了图,图在这里:zhidao.baidu.com/question/233324458.html
...全文
411 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
aiwnx 2011-03-08
  • 打赏
  • 举报
回复
嗯,依照 zara 所言下载试用了一下,确实可以支持unicode 了,多谢zara同学的帮助!!
zara 2011-03-08
  • 打赏
  • 举报
回复
刚才去看了下那个资源,那个确实是不完整的。其实是下面这个资源,这个资源包括了上面那个的 unicode.inc 文件。需要留意下它的数据定义方式和 Masm 的不一样。
http://download.csdn.net/source/2821354
; 现在这样就可以了
.386
.model flat, stdcall
option casemap :none ; case sensitive

include windows.inc
include kernel32.inc
include user32.inc
include macros.inc ; 这里用的是资源里的宏定义文件,不是 Masm32 的!

includelib kernel32.lib
includelib user32.lib


.data
szCaption WSTR ("test-测试中文Caption", 0)
szText WSTR ("test-测试中文Text", 0)


MessageBoxW PROTO :DWORD,:DWORD,:DWORD,:DWORD


.code

start:

invoke MessageBoxW, NULL, addr szText, addr szCaption, MB_OK
invoke ExitProcess, NULL

end start
aiwnx 2011-03-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 aiwnx 的回复:]
不用那么麻烦,这么定义就可以了:

Assembly code

unicode macro name,string,zero
name label byte
irpc c,<string>
db '&c', 0
endm

i……
[/Quote]

不好意思,试了一下,这种办法也不支持中文的unicode。。。
但是2#楼提供的uncode.inc文件貌似不全,无法参加编译啊
aiwnx 2011-03-08
  • 打赏
  • 举报
回复
不用那么麻烦,这么定义就可以了:

unicode macro name,string,zero
name label byte
irpc c,<string>
db '&c', 0
endm

ifnb <zero>
dw zero
endif
endm

;使用方法
unicode szCaption, <test-测试中文>,0

zara 2011-03-08
  • 打赏
  • 举报
回复
试试下面这个资源里的 unicode 宏定义?它里面说是 Masm32 自带的不支持汉字,它的这个支持。
http://download.csdn.net/source/2413270
zara 2011-03-08
  • 打赏
  • 举报
回复
这个 unicode 的定义,对汉字来说,是错误的吧。象上面的字符串,在 exe 文件里看,被定义成了下面的形式:
74 00 65 00-73 00 74 00-2D 00 B2 00-E2 00 CA 00 t e s t - ▓ Γ ╩
D4 00 D6 00-D0 00 CE 00-C4 00 00 00-74 00 65 00 ╘ ╓ ╨ ╬ ─ t e
73 00 74 00-2D 00 B2 00-E2 00 CA 00-D4 00 D6 00 s t - ▓ Γ ╩ ╘ ╓
D0 00 CE 00-C4 00 00 00-00 00 00 00-00 00 00 00 ╨ ╬ ─
将“测”字分解成了 B2 00 E2 00 ,这个不是“测”字的 unicode ,而只是将其 gb 码 B2 E3 简单地分解成了两个字节;其实“测”字的 unicode 应该是 6D4Bh 。

21,459

社区成员

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

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