数据表示和存储方式

为开逆向的坑,开始学习汇编。
前段时间过了16位汇编语言,希望现在学习32位汇编轻松些


变量定义

  • 变量定位

    1. 从偏移量100h作为当前偏移地址

      ORG 100h

    2. 实现对齐地址

      ALIGN 2 .(4,6,8,…)
      EVEN ; 相当于 ALIGN 2

  • 变量属性

    1. 变量定义可以定义变量名,变量名有两个属性

      • 地址:首个变量所在存储单元的逻辑地址,含有段基地址和偏移地址
      • 类型:诸如字节、字、双字….其实就是长度。
    2. 汇编程序提供了一些操作符:

      属性操作符作用
      地址[]将表达式或寄存器作为偏移量
      $返回当前偏移地址
      OFFSET 变量名返回变量名所在段的偏移地址
      SEG 变量名返回段基地址
      类型类型名 PTR 变量名
      TYPE 变量名返回一个字,表明变量名的类型
      LENGTHOD 变量名返回整个变量的数据项数
      SIZEOF 变量名返回整个变量占用的字节数

寻址方式

  • ##寻址方式的种类
    1. 常量表达的具体数值——立即数寻址
    2. 寄存器表达的其中内容——寄存器寻址
    3. 存储器地址表达的保存的数据——存储器寻址
  • ##立即数寻址的注意事项
    1. 注意伪指令,这些都是编译器处理的,只要汇编过程中能确定的都是立即数
    2. 注意立即数没有类型,可以通过另一个操作数或者ptr伪指令确定立即数的类型
  • 存储器寻址方式

    1. 令人纠结的寻址表

      访问存储器方式段寄存器偏移地址
      读取指令CSEIP
      堆栈操作SSESP
      一般的数据访问DS(*)有效地址EA
      EBP或ESPSS(×)有效地址EA
      串指令的源操作数DS(*)ESI
      串指令的目的操作数ESEDI
    2. 偏移地址的构成
      这里是指上表中EA的通用公式

      32位有效地址 = 基地寄存器 + 编制寄存器 * 比例 + 位移量

      • 基址寄存器:任何8各32位通用寄存器
      • 编制寄存器:除ESP职位的任何32位通用寄存器
      • 比例:1、2、4、8
      • 位移量:8或32位有符号值
    3. 直接寻址

      • 即,在上述公式中只给除位移量
      • 需要注意的是,形如 mov eax,count (count是变量名) 就是直接寻址 mov eax,[count的偏移量]
    4. 寄存器间接寻址
      • 形如 mov eax,[ebx]
      • 在将EA放于寄存器中,查找在存器中地址的内存单元
    5. 寄存器相对寻址
      • 形如 mov eax,[ebox + 4]
      • 可以写成 mov eax,ebx[4]
      • 可以处理传输组、字符串,(甚至结构体。。。)
    6. 变址寻址
      • 使用了变址寄存器(esi、edi)的寻址操作,即为变址寻址
      • 形如 mov eax,[ebx+esi+4]
      • 亦或 mov eax,4[ebx][esi]
    7. 带比例的变址寻址
      • 形如 mov eax,[ebx+esi*2+4]
        _

寻址方式的组合

如下:
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值