汇编语句

不安全的 asm 语句支持将汇编程序代码直接嵌入到Nim代码中。

汇编程序代码中引用Nim标识符的标识符应包含在特殊字符中,该字符可在语句的编译指示中指定。默认的特殊字符是 '`'

  1. {.push stackTrace:off.}
  2. proc addInt(a, b: int): int =
  3. # a in eax, and b in edx
  4. asm """
  5. mov eax, `a`
  6. add eax, `b`
  7. jno theEnd
  8. call `raiseOverflow`
  9. theEnd:
  10. """
  11. {.pop.}

如果使用GNU汇编器,则会自动插入引号和换行符:

  1. proc addInt(a, b: int): int =
  2. asm """
  3. addl %%ecx, %%eax
  4. jno 1
  5. call `raiseOverflow`
  6. 1:
  7. :"=a"(`result`)
  8. :"a"(`a`), "c"(`b`)
  9. """

替代:

  1. proc addInt(a, b: int): int =
  2. asm """
  3. "addl %%ecx, %%eax\n"
  4. "jno 1\n"
  5. "call `raiseOverflow`\n"
  6. "1: \n"
  7. :"=a"(`result`)
  8. :"a"(`a`), "c"(`b`)
  9. """