【问题标题】:Assembly: Echo paragraph symbol ¶ [Or any extended ASCII Character] called from character/string literal汇编:回声段落符号¶ [或任何扩展的 ASCII 字符] 从字符/字符串文字调用
【发布时间】:2014-03-04 21:52:38
【问题描述】:

使用 TASM 和 TLINK 进行组装:

我可以使用mov dl, 14hmov dl, 20 显示段落符号
要调用该符号的十进制和十六进制值是什么.
已经有迹象表明那里已经支持它......

然而,从文字中调用的回显显示了一个不同的字符
使用mov dx, '¶'这回显了这个字符,这让我很惊讶,因为那些从 dec 128 开始的字符不能使用文字来回显。

代码:

.model small
.stack 100h
.code
    mov ah, 02h

    mov dl, 20  ;Using ASCII number for paragraph symbol
    int 21h
    mov dx, '¶' ;Using A character literal
    int 21h

    mov ah, 4ch
    int 21h
end

如何回显段落符号¶ 从字符/字符串文字中调用?

【问题讨论】:

  • 控制台代码页可能不支持它。我没有立即看到 asciitable.com 上的段落符号。

标签: assembly character echo tasm


【解决方案1】:

字符的视觉解释取决于使用的字体。 MS Windows 将 OEM 字体用于控制台应用程序。要找出与所需字形相对应的代码,请打开控制台窗口(运行 CMD.EXE),选择代码页,例如

C:>chcp 437

并尝试在小键盘上输入字符的十进制代码,按住 Alt 键。在我的 WinXP 计算机上,它使用 Alt-0182,即 Unicode PILCROW SIGN 0x00B6=182。 另见http://vitsoft.info/opta-biw.gif

【讨论】:

  • 我认为与字体无关,正如我所提到的,我可以使用 dec 20 回显 符号(正如你所提到的那样 0182),这意味着它在那里并且控制台支持它,但不支持文字
【解决方案2】:

这是一个编码问题。您应该使用十六进制编辑器查看您的文件,以了解您的文本编辑器是如何对 字符进行编码的。

查看我的编码参考时, 位于字符表中的不同位置,具体取决于编码:

  • 在普通的旧 CP437(美国 DOS 拉丁文)中:0x14
  • 在 CP850(欧洲的 DOS Latin1)中:0xF4
  • 在 CP1252 中(Windows Latin1 = 窗口原生编码):0xB6

毫不奇怪,CP437 是 0xB6,所以你的文件必须用 CP1252 编码。

在汇编中使用字符是没有问题的,但是使用的编码很重要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    相关资源
    最近更新 更多