zoukankan      html  css  js  c++  java
  • 03.通用寄存器_内存读写

    32位通用寄存器
    寄存器 主要用途 编号
    EAX 累加器 0
    ECX 计数 1
    EDX I/O指针 2
    EBX DS段的数据指针 3
    ESP 堆栈指针 4
    EBP SS段的数据指针 5
    ESI 字符串操作的源指针, SS段的数据指针 6
    EDI 字符串操作的目标指针, ES段的数据指针 7

    EIP
    指向当前将要执行的代码

    16位通用寄存器
    AX
    CX
    DX
    BX
    SP
    BP
    SI
    DI

    8位通用寄存器
    AL
    CL
    DL
    BL
    AH
    CH
    DH
    BH

    EAX寄存器经过下列运算结果
    MOV EAX, 0xAAAAAAAA
    MOV AX, 0xBBBB
    MOV AH, 0xCC
    MOV AL, 0xDD

    0xAABBCCDD

    OD快捷键
    打开程序
    F3

    单步步过
    F8

    汇编指令
    MOV
    移动"源"到"目的"
    MOV指令特殊注意: 两个操作数不能都是内存

    汇编练习(深刻理解寄存器、内存、数据的宽度)
    r 通用寄存器, m 代表内存, imm 代表立即数, r8 代表8位通用寄存器, m8 代表8位内存, imm8 代表8位立即数
    MOV指令
    MOV r/m8, r8
    MOV r/m16, r16
    MOV r/m32, r32
    MOV r8, r/m8
    MOV r16, r/m16
    MOV r32, r/m32
    MOV r8, imm8
    MOV r16, imm16
    MOV r32, imm32
    ADD指令
    将源操作的值加到目标操作数上
    ADD r/m8, imm8
    ADD r/m16, imm16
    ADD r/m32, imm32
    ADD r/m16, imm8
    ADD r/m32, imm8
    ADD r/m8, r8
    ADD r/m16, r16
    ADD r/m32, r32
    ADD r8, r/m8
    ADD r16, r/m16
    ADD r32, r/m32

    SUB指令
    将目标操作数减去源操作的值
    SUB AL, imm8
    SUB AX, imm16
    SUB EAX, imm32
    SUB r/m8, imm8
    SUB r/m16, imm16
    SUB r/m32, imm32
    SUB r/m16, imm8
    SUB r/m32, imm8
    SUB r/m8, r8
    SUB r/m16, r16
    SUB r/m32, r32
    SUB

    AND指令
    将目标操作数按位与源操作的值
    AND AL, imm8
    AND AX, imm16
    AND EAX, imm32
    AND r/m8, imm8
    AND r/m16, imm16
    AND r/m32, imm32
    AND r/m16, imm8
    AND r/m32, imm8
    AND r/m8, r8
    AND r/m16, r16
    AND r/m32, r32
    AND r8, r/m8
    AND r16, r/m16
    AND r32, r/m32

    OR
    将目标操作数按位与源操作的值
    OR AL, imm8
    OR AX, imm16
    OR EAX, imm32
    OR r/m8, imm8
    OR r/m16, imm16
    OR r/m32, imm32
    OR r/m16, imm8
    OR r/m32, imm8
    OR r/m8, r8
    OR r/m16, r16
    OR r/m32, r32
    OR r8, r/m8
    OR r16, r/m16
    OR r32, r/m32

    XOR
    将目标操作数按位异或源操作的值
    XOR AL, imm8
    XOR AX, imm16
    XOR EAX, imm32
    XOR r/m8, imm8
    XOR r/m16, imm16
    XOR r/m32, imm32
    XOR r/m16, imm8
    XOR r/m32, imm8
    XOR r/m8, r8
    XOR r/m16, r16
    XOR r/m32, r32
    XOR r8, r/m8
    XOR r16, r/m16
    XOR r32, r/m32

    NOT
    将操作数按位取反
    NOT r/m8
    NOT r/m16
    NOT r/m32

    内存编号的单位
    字节(8位)

    32位计算机
    正常情况寻址宽度是32位(2^32--> 2^2 * 2^10 * 2^10 * 2^10 --> 4G), 可以修改

    内存编号的格式(加[]区分立即数)
    [0x00000000 - 0xFFFFFFFF]

    mov word ptr ds: [0x12345678], 0xFFFF
    指令 大小 指针 数据段 操作内存编号 值

    每个应用程序都有
    4G的独立内存空间使用

  • 相关阅读:
    linux学习网站
    Go select的使用和实现原理
    Python 多进程数据共享及异步调用 multiprocessing Manager ThreadPoolExecutor
    算法学习列表
    Jenkins build 的 lock resource
    Telegraf Input Plugin
    【转】Linux系统硬盘的IOPS测试
    SAP系统和微信集成的系列教程之四:如何将SAP C4C主数据变化推送给微信公众号的关注者
    SAP系统和微信集成的系列教程之三:微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据
    SAP系统和微信集成的系列教程之二:如何通过微信公众号消费API
  • 原文地址:https://www.cnblogs.com/ret688/p/12827231.html
Copyright © 2011-2022 走看看