汇编语句
不安全的 asm 语句支持将汇编程序代码直接嵌入到Nim代码中。
汇编程序代码中引用Nim标识符的标识符应包含在特殊字符中,该字符可在语句的编译指示中指定。默认的特殊字符是 '`' :
- {.push stackTrace:off.}
- proc addInt(a, b: int): int =
- # a in eax, and b in edx
- asm """
- mov eax, `a`
- add eax, `b`
- jno theEnd
- call `raiseOverflow`
- theEnd:
- """
- {.pop.}
如果使用GNU汇编器,则会自动插入引号和换行符:
- proc addInt(a, b: int): int =
- asm """
- addl %%ecx, %%eax
- jno 1
- call `raiseOverflow`
- 1:
- :"=a"(`result`)
- :"a"(`a`), "c"(`b`)
- """
替代:
- proc addInt(a, b: int): int =
- asm """
- "addl %%ecx, %%eax\n"
- "jno 1\n"
- "call `raiseOverflow`\n"
- "1: \n"
- :"=a"(`result`)
- :"a"(`a`), "c"(`b`)
- """