首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇编"mov“指令

汇编"mov“指令
EN

Stack Overflow用户
提问于 2014-07-15 05:16:26
回答 2查看 53.1K关注 0票数 5

我正在通过比较c程序和它的汇编等价物来学习汇编。

下面是代码。

代码语言:javascript
复制
.file   "ex3.c"
.section    .rodata
.LC0:
    .string "I am %d years old.\n"
.LC1:
    .string "I am %d inches tall.\n"
    .text
    .globl  main
    .type   main, @function
main:
    pushl   %ebp    //establish stack frame//
    movl    %esp, %ebp //move esp into ebp, all contents saved down stack//
    andl    $-16, %esp //16 from esp for local var space//
    subl    $32, %esp//stack frame reserving - 32 bytes//
    movl    $10, 24(%esp)
    movl    $72, 28(%esp)
    movl    24(%esp), %eax
    movl    %eax, 4(%esp)
    movl    $.LC0, (%esp)
    call    printf
    movl    28(%esp), %eax
    movl    %eax, 4(%esp)
    movl    $.LC1, (%esp)
    call    printf
    movl    $0, %eax
    leave
    ret
    .size   main, .-main
    .ident  "GCC: (Ubuntu 4.8.2-19ubuntu1) 4.8.2"
    .section    .note.GNU-stack,"",@progbits

对于此行:

代码语言:javascript
复制
movl    $10, 24(%esp)

如果我理解正确的话,它说的是将10的值移动到esp寄存器中。但是24个人在做什么呢?我认为它不会移动到esp中,因为要移动的值是用"$“表示的(我认为)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-15 06:30:43

代码语言:javascript
复制
movl $10,24(%esp)

意味着:将一个文本十进制数-10(4字节)移到一个4字节的内存位置,该位置从( esp寄存器加上十进制24)所指向的地址开始--基本上它是一个局部变量。

票数 12
EN

Stack Overflow用户

发布于 2014-07-15 12:43:36

换句话说,movl $10,24(%esp)

方法:将10加载到*(esp + 24)

在C中,它等于:

*(unsigned long *)(myptr + 24) = 10;

其中,使用esp寄存器的值获取myptr

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24746123

复制
相关文章

相似问题

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