首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >*在指令操作数、GNU汇编、AMD64前面

*在指令操作数、GNU汇编、AMD64前面
EN

Stack Overflow用户
提问于 2017-01-19 10:40:44
回答 1查看 205关注 0票数 0

我一直在努力学习为AMD64处理器编写汇编代码。我一直在研究由gcc生成的代码。最后,我开始看到这样的指令

代码语言:javascript
复制
    call *(%rax)

*在操作数前面做什么?在我正在阅读的System V ABI文档中出现了类似这样的内容,上面的答案将帮助我继续阅读。以下是上下文中使用的语法的示例,取自System V ABI文档本身:

代码语言:javascript
复制
    // System V ABI suggested implementation of a
    // C switch statement with case labels 0, 1, and 2,
    // and a default label.

    // Jump to the default case if the control variable is
    // less than 0.
         cmpl     $0, %eax
         jl      .Ldefault

    // Jump to the default case if the control variable is
    // greater than 2.
         cmp $2, %eax
         jg .Ldefault

         movabs   $.Ltable, %r11
         jmpq     *(%r11,%eax,8)  /* Here is that syntax. */

         .section .lrodata,"aLM",@progbits,8
         .align 8
    .Ltable: .quad .Lcase0
             .quad .Ldefault
             .quad .Lcase2
             .quad .previous
    .Ldefault:
         // Code for default case
    .Lcase0:
         // Code for case 0
    .Lcase1:
         // Code for case 1
    .Lcase2:
         // Code for case 2
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-19 10:52:56

在AT&T语法中,间接跳转或函数调用的操作数以星号*为前缀,以区别于直接跳转或函数调用。这样做的目的是将对函数的调用与对存储在变量中的函数指针的间接调用区分开来:

代码语言:javascript
复制
call function
call *function_pointer
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41732843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档