gpt4 book ai didi

assembly - 在 MASM32 程序集中打印 unicode 字符

转载 作者:行者123 更新时间:2023-12-05 09:27:23 25 4
gpt4 key购买 nike

我试图在 MASM32 程序集中打印一个 unicode 字符,但我无法让它工作。这是一个可重现的例子:

.DATA
output db "%x Hello",10,0
unicode DWORD "∟", 0

.DATA?

.CODE
start:
push offset unicode
push offset output
call crt_printf

invoke ExitProcess, 0

end start

当前输出:40300a 你好

预期输出:∟ 你好

最佳答案

您正在使用 %x 将数字打印为十六进制数字,而您传递的数字是一个地址。所以 0x40300a.data 部分中 unicode 标签的地址。

如果

%s 和输出终端支持您的编辑器和汇编器使用的相同编码,它应该可以工作。它应该只是从您传递的地址复制字节,直到到达 0,因此它应该只适用于 UTF-8。但对于 UTF-16 则不然,如果其中某处有一个 0 字节。如果支持,%ls 可以工作,将 arg 视为 wchar_t* 字符串。

如果您想将一个单词或双字作为宽字符传递给 %lc,您可以push dword ptr [unicode]。或许。在 ISO C99 和 C++ 中,%lc 接受一个 int arg,并将其打印为 wchar_t[2] 字符串(我认为第二个元素是终止 0,if that's what cppreference means )。但是 Microsoft 一直拒绝支持标准的 C 和 C++ 功能,尤其是围绕 printf 的功能,所以谁知道 crt_printf 支持什么。

关于assembly - 在 MASM32 程序集中打印 unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72508600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com