mov指令
1.mov指令的顺序是从右到左,如mov a,b,则把b的值复制给a。如:MOV 目的操作数(a),源操作数(b) ,即a=b
2.除了之前提到的movb,movw,movl,movq,还有movabsq,代表传送绝对的四字,movq虽可传四字,但一旦要传立即数,则只能传32位补码表示的立即数,随后把它符号拓展到64位。而movabsq可以直接传64位的立即数,但是它只能以寄存器作为目的地。
3.所有mov指令都不支持从一个内存地址直接传到另一个内存地址,如movw (%rax),4(%rsp)是不行的。
4.决定mov使用哪个后缀的是寄存器的大小,当两边操作的都是寄存器时,若大小不同,必须用第5条中的小数据复制到大目的地的类型的mov指令,当两边操作的是立即数和内存时,可以以立即数大小为准,
例子:movl $0x4050,%eax 0x4050虽然是2字节,但%eax是4字节,所以movl
movw %bp,%sp
movb (%rdi,%rcx),%al
movb $17,(%rsp) 立即数->内存
movq %rax,-12(%rbp)
5.当想将小的数据复制到大的目的地时,可以用movz或movs,前者代表用0填充高字节,后者代表用符号填充高字节,后面还要加上两种转换数据的大小,
比如movzbw(字节->字,0填充),movswq(字->四字,符号填充),还有一种cltq指令,特指%eax->%rax的符号拓展转换,等价于movslq %eax,%rax
注意movs和movz都是以寄存器为目的地的。
根据以上信息,可以知道,之前的第4点中的特殊规则其实相当于是说movl可以实现movzlq的功能
本文详细介绍了x86汇编中的mov指令,包括其操作方式、不同变体如movb、movw、movl、movq、movabsq的用法。mov指令遵循从右到左的操作顺序,不支持直接从一个内存地址传到另一个内存地址。当需要将小数据复制到大目的地时,可以使用movz或movs系列指令。同时,文章指出movl在某些情况下可以模拟movzlq的功能。

1951

被折叠的 条评论
为什么被折叠?



