• 汇编语句

    汇编语句

    不安全的 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. """