1 数据传送指令
格式:MOVX source, destination
X: L 32位值 W 16位值 B 8字节
MOVL %EAX, %EBX
MOVW %AX, %BX
MOVB %AL, %BL
使用规则,mov只有以下13种情况
情况 | 举例 |
---|---|
立即数==>通用寄存器 | movl $0, %eax |
立即数==>内存位置 | movl $100, value |
通用寄存器==>通用寄存器 | movb $al, %cl |
通用寄存器==>段寄存器 | movl %edx, %cs |
通用寄存器==>控制寄存器 | movl %edi, %cr0 |
通用寄存器==>调试寄存器 | movl |
段寄存器 ==>通用寄存器 | movl %ds, %esi |
控制寄存器==>通用寄存器 | movl %cr4, %esp |
调试寄存器==>通用寄存器 | |
内存位置==>通用寄存器 | movl value, %eax |
内存位置==>段寄存器 | |
通用寄存器==>内存位置 | movl %ecx, value |
段寄存器 ==>内存位置 |
变址寻址
地址格式: base_addr(offset_addr, index, size)
数据值位于base_addr + offset_addr + index * size
offset_addr,index必须为寄存器值,size可以是数字值
movl $2, %edi
movl values(, %edi, 4), %eax
寄存器间接寻址
$
加标签获取内存位置的地址
movl $values, %edi ;把values地址送进EDI
movl %ebx, (%edi) ;把EDX值送到EDI中包含的内存位置处
movl %ebx, 4(%edi) ;把值放到EDI寄存器指向位置之后4个字节的内存位置处
movl %ebx, -4(%edi);把值放到EDI寄存器指向位置之前4个字节的内存位