汇编中movl,movw,movb的作用

操作系统: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         #把32位的EAX寄存器值传送给32为的EBX寄存器值

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

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





    .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
        int        $0x80
结果:



转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=28458801&id=3558498

猜你喜欢

转载自blog.csdn.net/m0_37806112/article/details/80549927