• 数据传送指令


    3.数据传送指令

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

    最简单形式的数据传送指令——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 S R[%rsp]<-R[%rsp]-8; 将四字压入栈
    M[R[%rsp]]<-S
    popq S D<-M[R[%rsp]]; 将四字弹出栈
    R[%rsp]<-R[%rsp]+8
  • 相关阅读:
    有道翻译爬虫
    设置Ubuntu默认root密码
    搭建内部PyPi源
    Python上下文管理器with 学习笔记
    Mysql5.7 绿色版安装
    Mardown 格式接口模板
    Winrar去广告
    Python 查询第三方包依赖及下载
    Python 捕获redis异常
    react入门系列之使用 antd, react, redux,creat-react-app搭建todo-list升级版本
  • 原文地址:https://www.cnblogs.com/sgawscd/p/11210040.html
Copyright © 2020-2023  润新知