加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转]汇编中的movl,movw,movb的作用

(2016-07-02 09:24:45)
标签:

mov

分类: Linux

操作系统:ubuntu11.10

MOV指令的基本格式:

        movx source, destination 

       source 和 destinatino 的值可以是内存地址,存储在内存中的数据值,指令语句中定义的数据值,或者是寄存器。

注意:GNU汇编器使用 AT&T 样式的语法,所以其中的源和目的操作数和 Intel 文档中给出的顺序是相反的

    GNU汇编器为 mov 指令添加了一个维度,在其中必须声明要传送的数据元素的长度。通过把一个附加字符添加到 MOV 助记符来声明这个长度。因此,指令就变成了如下:

      movx        其中 x 可以是下面的字符:

      1,l用于32位的长字值

      2,w用于16位的字值 

      3,b用于8位的字节值

    实例:

 movl     % eax,     % ebx        #把32位的EAX寄存器值传送给32为的EBX寄存器值

 movw   %ax,       %bx         #把16位的EAX寄存器值传送给16为的EBX寄存器值

 movb    %al,       %lx            #把8位的EAX寄存器值传送给8为的EBX寄存器值

MOV指令的源和目的操作数组合如下:

http://s5/mw690/0024GkFIzy72VJyHFE8c4填写图片摘要(选填)
http://s9/mw690/0024GkFIzy72VJAtyGId8填写图片摘要(选填)
http://s4/mw690/0024GkFIzy72VJC9M2f03填写图片摘要(选填)

实例:

  1. .section .data
  •     output:
  •         .asciz "The value is %d\n"
  •     values:
  •         .int    10,15,20,25,30,35,40,45,50,55,60
  • .section .text
  • .global _start
  • _start:
  •     nop
  •     movl $0,%edi
  • loop:
  •     movl values(,%edi,4),%eax
  •     pushl %eax
  •     pushl $output    
  •     call    printf
  •     addl    $8,%esp
  •     inc        %edi
  •     cmpl    $11,%edi
  •     jne        loop
  •     movl    $0,    %ebx
  •     movl    $1,    %eax

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有