Это не имеет ничего общего с языком ассемблера и все, что связано с UTF-8 (что ожидает ваш терминал), против ISO-8859-1 (латиница-1) или Windows 1252 (IDK, который) расширенный 8-битный символ установить, с которого вы, похоже, ищите коды. Было бы то же самое, если бы вы написали программу на C с этими байтами в char array[]
и использовали stdio puts
.
Как говорит @Fuz: «У А нет кода ASCII». ASCII включает в себя только символы от 0,127 (а младшие 32 не печатаются) http://www.asciitable.com/. Extended -ASCII 8-битные наборы символов перекрываются только с UTF-8 для кода -точки от 0 до 127.
Любая программа, которая выполняет системный вызов write()
для записи байта 0x90
в стандартный вывод, будет делать то же самое, независимо от того, на каком языке она была написана. (Используйте strace ./program
, чтобы увидеть, что делает ваш, или канал это в hexdump -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
' s TUI layout reg
mode или редакторы типа jed
.