阅读276 返回首页    go 阿里云 go 技术社区[云栖]


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

.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

 

最后更新:2017-04-03 07:56:55

  上一篇:go Mysql存储过程中使用cursor
  下一篇:go Ubuntu下安装KDE及安装中文环境