首页 > 解决方案 > 引用变量的三种方式之间的区别

问题描述

我注意到以下所有三种方式都可以“工作”访问 asm 中的变量:

  1. 从字面上命名它:

    .globl main
    number1:  .byte 7
    number2:  .byte 14
    main:
        mov number1,     %ebx
        mov number2,     %ecx
        mov $0,     %eax
    multiply_step:
        add %ebx,   %eax
        dec %ecx
        jnz multiply_step
        ret
    
  2. $前缀命名它:

    number1:  .byte 7         # use number1 = 7 or .equ to make this block work
    number2:  .byte 14
    main:
        mov $number1,     %ebx   # editor's note: this gets the address
        mov $number2,     %ecx   # not the value.
    
  3. 将其命名为rip

    number1:  .byte 7
    number2:  .byte 14
    main:
        mov number1(%rip),     %ebx
        mov number2(%rip),     %ecx
    

当您像在这个问题98中那样将它们相乘时,这三个都给了我相同的乘积。

这三种引用变量的方法之间有什么区别,并且其中一种方法比其他方法更受欢迎?

标签: variablesassemblyx86-64memory-addressatt

解决方案


推荐阅读