【问题标题】:Using %substr with NASM assembler将 %substr 与 NASM 汇编器一起使用
【发布时间】:2017-02-18 17:03:28
【问题描述】:

我从 NASM 文档 pdf 第 46 页复制粘贴了以下代码:

%substr mychar ’xyzw’ 1 ; equivalent to %define mychar ’x’

组装后出现以下错误:

`%substr` requires string as second parameter

但如果我将“xyzw”更改为“xyzw”或“xyzw”,它就可以了。那么我在这里缺少什么?

【问题讨论】:

  • 很可能他们弄乱了 PDF - 可能是某些文字处理器试图对引号过于聪明。

标签: assembly x86 nasm


【解决方案1】:

正确的语法显示在online documentation

%substr mychar 'xyzw' 1       ; equivalent to %define mychar 'x' 

一般来说,对于预处理器字符串函数,它讨论的是字符串和字符串字面量,在here 中进行了解释,并且可以用单引号、双引号和反引号括起来:

字符串常量是在某些伪指令上下文中使用的字符串,即 DB 系列和 INCBIN(它表示文件名)。它们也用于某些预处理器指令中。

字符串常量看起来像字符常量,只是更长。

关于character constants(实际上解释了分隔符):

一个字符串最多包含八个字符,用单引号 ('...')、双引号 ("...") 或反引号 (`...`) 括起来。单引号或双引号等价于 NASM(当然,用单引号括起来的常量允许双引号出现在其中,反之亦然);这些内容逐字呈现。用反引号括起来的字符串支持特殊字符的 C 样式转义。

正如评论中所说,很可能 PDF 被文字处理器弄乱了,因为它太急于排版漂亮的字符而不是正确的字符。

【讨论】:

  • 谢谢,但它不能与反引号一起使用吗?是否有任何已知的情况(说明),其中一个字符串被一种引号而不是其他引号接受?
  • 我相信它适用于反引号。您的代码不起作用是使用某种漂亮的引号,而不是来自', ", ` 组。你的
  • @MaykelJakson 它适用于反引号`,但不适用于您剪切和粘贴的字符
  • @Matteo Italia,你写的引用是关于 字符字符串,类似于 \U12345678,它限制为 8 个字符,但这里的问题是 字符串常量,可以包含任意数量的字符。
  • @MaykelJakson 深入研究这个问题,似乎是用于生成用于生成 PDF 的 PostScript 文件的 Perl 脚本中的错误。错误在于他们对单引号字符 ' 使用了 39 的值,虽然这是 ASCII 和 Unicode 中该字符的正确编码,但它不是手册使用的标准 PDF 字体的正确编码。相反,值 39 对 PDF 字体中的“引号”字符进行编码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-05
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
相关资源
最近更新 更多