zoukankan      html  css  js  c++  java
  • 汇编语言笔记(数据传输、寻址和算术运行)

    数据传送、寻址和算术运算

    32位通用寄存器  
    EAX EBP
    EBX ESP
    ECX ESI
    EDX EDI
    6个段寄存器  
    CS代码段 ES
    SS堆栈段 FS
    DS数据段 GS

    一个指令指针寄存器EIP

    一个状态标志寄存器EFLAGS

    指令的格式:标号 指令助记符 操作数 注释

    数据定义语句的格式:【变量名】 数据定义伪指令 初始值 【,初始值 ……】

    image

    MOV指令从原操作数向目的操作数赋值数据

    MOVZX将源操作数的内容复制到目的操作数中,并将该值零扩展至16或32位。

    MOVSX将原操作数的内容复制到目的操作数中,并将该值符号扩展至16或32位。

    LAHF将EFLAGE寄存器的低字节复制到AH寄存器中。

    SAHF复制AH寄存器的值至EFLAGS寄存器的低字节中。

    XCHG交换两个操作数的内容。

    INC从操作数中加1

    DEC从操作数中减1

    ADD指令将同尺寸的源操作数和目的操作数相加

    SUB将源操作数从目标操作数中减掉

    NEG取反

    和数据相关的操作符和伪指令

    OFFSET操作数返回一个变量相对于其所在段开始的偏移

    PTR操作符允许重载变量的默认尺寸

    TYPE操作数返回数组中每个元素的大小

    LENGTHOF操作数返回数组内元素的数目

    SIZEOF操作符返回数组初始化时占用的字节数

    PROTO伪指令声明函数的原型

    PUSH首先减小ESP的值,然后将源操作数压入堆栈

    POP弹出堆栈,增加ESP

    PUSHFD将EFLAGS的值压入堆栈

    POPFD将堆栈顶部的值弹出并送到EFLAGS中

    PUSHAD指令将EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI压入堆栈

    POPAD指令以相反的顺序从堆栈中弹出这些通用寄存器的值

    过程使用PROC和ENDP指令声明,例如

    main PROC

    ……

    main ENDP

    CALL指令指示处理器在新的内存地址执行指令

    RET指令返回到程序中过程被调用的地方继续执行

    CALL指令把返回地址压入栈并把调用过程的地址复制到指令指针寄存器中

    RET指令从堆栈中弹出返回地址并送到指令指针寄存器中

    ESP是栈指针用于指向栈的栈顶

    寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量

  • 相关阅读:
    PHP 方法整合类 -- 1.根据概率产生随机数 --2.判断手机号归属地及运营商 --3.过滤emoji表情
    PHP 多图下载并打包压缩方法
    PHP 导出excel 精简版
    PHP获取首字母相关方法
    no input file specified 解决办法
    百度地图相关
    经纬度相关方法
    阿里云SSL证书部署至宝塔
    微信入口、生成菜单,公众号授权获取用户信息(unionid)
    超级好用超级简单的支付类库
  • 原文地址:https://www.cnblogs.com/watchdatalearn2012620/p/2806696.html
Copyright © 2011-2022 走看看