【发布时间】:2018-09-05 09:38:26
【问题描述】:
【问题讨论】:
-
*NIX 终端不支持类似 DOS 的“扩展”VGA 字符集或任何您期望的字符集。如果您以通用方式安装了现代操作系统,则很可能默认情况下将其设置为 UTF8 编码(也在 TTY 中),并且 NASM 确实支持 UTF8 作为源代码,因此您可以将字母正常写入字符串,例如
db 'ščije'。 (如果您将检查生成的机器代码 - 例如使用带有 nasmnasm -l <listing_file.lst>的列表文件选项 - UTF8 是多字节编码,每个字符的字节大小可变,因此某些字符将组合为多个字节)。跨度> -
(如果失败,请验证您在各处都有 UTF8 编码,或者找出使用了其他编码... IIRC NASM 仅支持 UTF8,因此无法写入以其他方式编码的字符串直接作为源代码中的文本,但您必须将它们作为
db或类似的数值放入源中...然后PutStrAPI 调用必须支持目标编码,并且终端本身必须支持目标编码和您的终端字体必须包含所请求的字符.. 如果都合适,您应该会看到正确的字符) -
这不是装配问题;任何进行
write()系统调用以将0x90字节写入标准输出的程序都会做同样的事情。 (使用strace ./program来查看它的作用,或通过管道将其输入hexdump -C)。例如,在 bash 中运行printf '\x90\n'来做同样的事情。90 0a不是有效的 UTF-8 多字节序列,因此您的终端会打印�字形(菱形中的?)。 -
我尝试了几次,在 putstr 上使用 ascii 代码 160 表示“Á”,UTF8 hex c3 81 但老实说我在汇编语言中非常新,所以为了了解我到底需要做什么,你能给我一个小例子吗?(我也在使用 ubuntu 16. 4、64 位)
-
@TonyUM Á 没有 ASCII 码。如果您的终端配置为使用 UTF-8,打印字符
c3 81应该可以工作。如果没有,请向我们展示您的代码,以便我们告诉您问题所在。
标签: terminal gnome-terminal extended-ascii