数据传送指令

数据传送指令

将数据从一个位置复制到另一个位置的指令。

最简单形式的数据传送指令——MOV类指令。
指令格式指令功能效果
movb S,D传送一个字节(8位)S->D
movw S,D传送一个字(16位)S->D
movl S,D传送双字(32位)S->D
movq S,D传送四字(32位扩展为64位)S->D
movabsq I,R传送绝对的四字(64位)I->R

源操作数可以为以下类型

  • 立即数,例如$0x100
  • 寄存器,例如%bp
  • 存储器,例如(%rdi,%rcx)

目的操作数可为寄存器或存储器。

x86-64限制:传送指令源操作数及目的操作数不能都指向内存位置。

movabsq能够以任何64位数(立即数、寄存器、存储器)作为源操作数,但只能以寄存器作为目的操作数。

MOVZ类指令

MOVZ类指令将较小的源值复制到较大的目的中去,将目的中剩余字节填充为0

零扩展,格式为movz#&(#为源操作数的大小,&为目的操作数的大小):

  • movzbw
  • movzbl
  • movzbq
  • movzwl
  • movzwq

注:无movzlq指令,movzlq可利用以寄存器位目的的movl实现(因为movl会将寄存器高位四字节置零)

MOVS类指令

MOVS类指令将较小的源值复制到较大的目的中去,将源操作的最高为复制用于填充目的剩余字节,即传送符号扩展的字节

符号扩展,格式为movs#&(#为源操作数的大小,&为目的操作数的大小):

  • movsbw
  • movsbl
  • movsbq
  • movswl
  • movswq
  • movslq
  • cltq 把%eax符号扩展到%rax(eax为rax寄存器的低32位)类似于movslq %eax,%rax
程序栈

程序栈是一种数据结构,具有“后进先出(Last In First Out)”的特性。

在x86-64中,程序栈存放在内存中的某个区域,栈顶元素的地址是所有栈中元素地址最低的,栈指针%rsp保存栈顶元素的地址。

入栈出栈指令
指令效果描述
pushq SR[%rsp]<-R[%rsp]-8;将四字压入栈
M[R[%rsp]]<-S
popq SD<-M[R[%rsp]];将四字弹出栈
R[%rsp]<-R[%rsp]+8
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值