用自己的语言解释一段简单的汇编

.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

 

posted @ 2014-06-08 23:59  172257861  阅读(97)  评论(0编辑  收藏  举报