【问题标题】:Assembly problems with ascii extended charactersascii 扩展字符的汇编问题
【发布时间】:2018-09-05 09:38:26
【问题描述】:

我想知道如何用 ascii 扩展字符解决这个问题,我不明白为什么要打印一个奇怪的符号而不是代表 0x90 的字母 我把 PutStr c381 什么都没发生

【问题讨论】:

  • *NIX 终端不支持类似 DOS 的“扩展”VGA 字符集或任何您期望的字符集。如果您以通用方式安装了现代操作系统,则很可能默认情况下将其设置为 UTF8 编码(也在 TTY 中),并且 NASM 确实支持 UTF8 作为源代码,因此您可以将字母正常写入字符串,例如db 'ščije'。 (如果您将检查生成的机器代码 - 例如使用带有 nasm nasm -l <listing_file.lst> 的列表文件选项 - UTF8 是多字节编码,每个字符的字节大小可变,因此某些字符将组合为多个字节)。跨度>
  • (如果失败,请验证您在各处都有 UTF8 编码,或者找出使用了其他编码... IIRC NASM 仅支持 UTF8,因此无法写入以其他方式编码的字符串直接作为源代码中的文本,但您必须将它们作为db 或类似的数值放入源中...然后PutStr API 调用必须支持目标编码,并且终端本身必须支持目标编码和您的终端字体必须包含所请求的字符.. 如果都合适,您应该会看到正确的字符)
  • 这不是装配问题;任何进行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


【解决方案1】:

这与汇编语言无关,也与 UTF-8(您的终端所期望的)与 ISO-8859-1(latin-1)或 Windows 1252(IDK)扩展 8 位字符有关设置您似乎正在从中查找代码。如果您在 char array[] 中使用这些字节编写 C 程序并使用 stdio puts,则情况相同。

正如@Fuz 所说,“Á 没有 ASCII 码。” ASCII 仅包含 0..127 中的字符(低 32 位不可打印)http://www.asciitable.com/扩展-ASCII 8 位字符集仅与 UTF-8 重叠,用于从 0 到 127 的代码点。

任何通过write() 系统调用将0x90 字节写入stdout 的程序都会做同样的事情,不管它是用什么语言编写的。(使用strace ./program 来查看你的程序是做什么的,或者通过管道它进入hexdump -C)。例如,在 bash 中运行 printf '\x90\n' 来做同样的事情。 90 0a 不是有效的 UTF-8 多字节序列,因此您的终端会打印一个 � 字形(菱形中的 ?)。


您可以将 gnome-terminal 设置为 ISO-8859-1 或 Windows 1252(右键单击并使用下拉菜单,或找到菜单项)。我正在使用konsole,它确实支持那些非UTF-8 字符编码。

如果您这样做,您可能只想在该终端中设置export LANG=en_US(而不是通常的en_US.UTF-8),这样其他程序将继续运行良好。

en_CA 或您实际使用的任何语言环境,只需使用它的非UTF-8 版本,这样man 的线条绘制就可以工作,gdb 之类的全屏文本也可以使用s TUI layout reg 模式,或者像jed 这样的编辑器。

【讨论】:

  • 我终于明白了,谢谢,我将终端的配置文件更改为 ISO-8859-1 并使用类似 0xC2 的代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-06
  • 1970-01-01
  • 2013-03-19
相关资源
最近更新 更多