用自己的语言解释一段简单的汇编
.section .data
values:
.int 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60
.section .text
.globl _start
_start:
nop ##空格 ,固定格式 为了gdb调试
movl values, %eax ## eax=values[0]=10
movl $values, %edi ## $values 内存地址存放到edi
movl $100, 4(%edi) ## 十进制立即数100到edi地址4字节之后
movl $1, %edi ## 十进制1到edi
movl values(, %edi, 4), %ebx ## 将values标签第2个的4字节到ebx
movl $1, %eax ## 立即数1到eax
int $0x80 ##退出
可以看出 本段程序最后的ebx值为100
.int 32位 一个数据元素占 4个字节=内存一个单元
分析:
movl values, %eax 标签values(也就是values数组中的值)到寄存器eax;
movl $values, %edi 标签values地址(数值10 的地址)到edi;也就是edi有了values数组中的地址
movl $100, 4(%edi) edi寄存器地址后4个字节,也就是第二个元素15被100替代
movl $1, %edi 重新赋值edi=1累加器
movl values(, %edi, 4), %ebx 在标签values也就是values数组找到下标为1的4个字节的数值,实际就是100赋值到ebx