Terminal ascii扩展字符的汇编问题

Terminal ascii扩展字符的汇编问题,terminal,gnome-terminal,extended-ascii,Terminal,Gnome Terminal,Extended Ascii,我想知道如何使用ascii扩展字符解决这个问题,我不明白为什么要打印奇怪的符号而不是代表0x90的字母 我把它放在c381上 什么也没发生 这与汇编语言无关,与UTF-8(您的终端期望的)和ISO-8859-1(拉丁语-1)或Windows 1252(IDK)无关,后者是扩展的8位字符集,您似乎要从中查找代码。如果您使用char数组[]中的这些字节编写一个C程序,并使用stdioput,情况也会一样 正如@Fuz所说,“Á没有ASCII码。”ASCII只包括0..127之间的字符(低32是不可打

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

这与汇编语言无关,与UTF-8(您的终端期望的)和ISO-8859-1(拉丁语-1)或Windows 1252(IDK)无关,后者是扩展的8位字符集,您似乎要从中查找代码。如果您使用
char数组[]
中的这些字节编写一个C程序,并使用stdio
put
,情况也会一样

正如@Fuz所说,“Á没有ASCII码。”ASCII只包括0..127之间的字符(低32是不可打印的)扩展ASCII 8位字符集仅在0到127的代码点上与UTF-8重叠。

任何进行
write()
系统调用以将
0x90
字节写入stdout的程序都将执行相同的操作,而不管它是用什么语言编写的。(使用
strace./program
查看您的操作,或将其导入
hextump-C
)。例如,在bash中运行
printf'\x90\n'
执行完全相同的操作
90 0a
不是有效的UTF-8多字节序列,因此您的终端打印一个� 雕文(菱形中的a)


您可以将gnome终端设置为ISO-8859-1或Windows 1252(右键单击并使用下拉菜单,或查找菜单项)。我使用的是
konsole
,它确实支持这两种非UTF-8字符编码

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


或者
en_-CA
或者您实际使用的任何语言环境,只需使用非UTF-8版本即可,因此
man
的线条绘制将起作用,而像
gdb
的TUI
layout reg
模式这样的全屏文本也将起作用,或者像
jed

这样的编辑器,这与汇编语言无关,而与UTF-8(您的终端期望的)和ISO-8859-1(拉丁语-1)或Windows 1252(IDK)扩展的8位字符集有关,您似乎正在从中查找代码。如果您使用
char数组[]
中的这些字节编写一个C程序,并使用stdio
put
,情况也会一样

正如@Fuz所说,“Á没有ASCII码。”ASCII只包括0..127之间的字符(低32是不可打印的)扩展ASCII 8位字符集仅在0到127的代码点上与UTF-8重叠。

任何进行
write()
系统调用以将
0x90
字节写入stdout的程序都将执行相同的操作,而不管它是用什么语言编写的。(使用
strace./program
查看您的操作,或将其导入
hextump-C
)。例如,在bash中运行
printf'\x90\n'
执行完全相同的操作
90 0a
不是有效的UTF-8多字节序列,因此您的终端打印一个� 雕文(菱形中的a)


您可以将gnome终端设置为ISO-8859-1或Windows 1252(右键单击并使用下拉菜单,或查找菜单项)。我使用的是
konsole
,它确实支持这两种非UTF-8字符编码

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


或者
en_-CA
或者您实际使用的任何语言环境,只要使用非UTF-8版本就可以了,这样
man
的线条绘制就可以了,而像
gdb
的TUI
layout reg
模式这样的全屏文本也可以了,或者像
jed

这样的编辑器就可以了。NIX终端不支持像“extended”这样的DOSVGA字符集或您期望的任何字符集。如果您以普通方式安装了现代操作系统,则很可能默认情况下它被设置为UTF8编码(也在TTY中),而且NASM确实支持UTF8作为源代码,因此您可以将字母正常写入字符串,如
db'ščije'
。(如果您要检查生成的机器代码-例如,将listing file选项与nasm
nasm-l
-UTF8是多字节编码,每个字符的字节大小可变,因此某些字符将组合为多个字节)。(如果失败,请验证到处都有UTF8编码,或者找出使用了哪种其他编码…IIRC NASM仅为UTF8,因此以其他方式编码的字符串不能直接作为源代码中的文本写入,但必须将它们作为
db
或类似的数值放入源代码中…然后
PutStr
API调用必须支持目标编码,并且终端本身必须支持目标编码,并且终端字体必须包含所请求的字符。如果适合,您应该看到正确的字符)这不是程序集问题;任何进行
write()
系统调用以将
0x90
字节写入标准输出的程序都会执行相同的操作。(使用
strace./program
查看它的功能,或将其导入
hextump-C
)。例如,在bash中运行
printf'\x90\n'
执行完全相同的操作。
90 0a
不是有效的UTF-8多字节序列,因此您的终端打印
字形(菱形中的a
)。我尝试了好几次,在putstr上使用ascii代码160表示“Á”,UTF8十六进制c3 81,但是honeslty我在汇编语言中非常新,所以为了理解我到底需要做什么,你能给我一个小例子吗(我也使用ubuntu 16.4,64位)@TonyUMÁ没有ASCII码。如果您的终端配置为使用UTF-8,打印字符
c3 81
应该可以工作。如果没有,请向我们显示您的代码,以便我们可以告诉您问题所在。*NIX termi