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),它们主要用于存放存储单元在段内的偏移量

  • 相关阅读:
    linux内存管理之数据结构必备
    Script快速入门与查表
    Bash编程linux诸多熟记命令
    NandFlash/NorFlash源码模型和驱动编写方法
    linux内存管理之uboot第一步
    《Magus Night》
    《P2447 [SDOI2010]外星千足虫》
    DFS 树的理解
    《2021CCPC桂林》
    《GRAPH》
  • 原文地址:https://www.cnblogs.com/watchdatalearn2012620/p/2806696.html
Copyright © 2011-2022 走看看