x86汇编学习笔记

本文是关于x86汇编的学习笔记,详细介绍了Debug工具的使用,包括查看和修改寄存器、内存操作、执行指令等功能。同时,概述了汇编程序的构成和执行过程,特别是LOOP指令的应用,并简述了DOS环境下可执行程序的加载步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

x86汇编学习笔记

作者:Gsharp
日期:2020年2月2日
参考书籍 《汇编语言》 1

Debug

Debug 是DOS, Windows都提供的实模式(8086 方式)程序的调试工具.

Windows下使用dosbox模拟dos环境, 挂载所在目录后打开debug.exe

涉及的Debug 功能

  • R 查看, 修改CPU寄存器内容
  • D 查看内存内容
  • E 改写内存
  • U 翻译内存中的机器指令为汇编指令
  • T 执行一条机器指令
  • A 写入汇编格式指令到内存中
R指令
  1. 显示

    R

    AX=0000 BX=0000 CX=0000 DX=0000 SP=00FD BP=0000 SI=0000 DI=0000 
    DS=073F ES=073F SS=073F CS=073F IP=0100 NV UP EI PL NZ NA PO NC
    073F:0100                     0000               ADD [BX+SI],AL
    
  2. 修改

    R + REG

    -R IP
    IP 0100
    :0000
    
    -R
    AX=0000 BX=0000 CX=0000 DX=0000 SP=00FD BP=0000 SI=0000 DI=0000 
    DS=073F ES=073F SS=073F CS=073F IP=0000 NV UP EI PL NZ NA PO NC
    073F:0000                     0000               ADD [BX+SI],AL
    
D指令
  1. 显示

    D+xxxx:xxxx

    0000:0000 00 00 00 00-00 00 00 00
    0000:0010 00 00 00 00-00 00 00 00
    0000:0020 00 00 00 00-00 00 00 00
    0000:0030 00 00 00 00-00 00 00 00
    0000:0040 00 00 00 00-00 00 00 00
    0000:0050 00 00 00 00-00 00 00 00
    0000:0060 00 00 00 00-00 00 00 00
    0000:0070 00 00 00 00-00 00 00 00
    
E指令
  1. 连续修改

    E+xxxx:x value1 value2 value3

    -E 1000:0 0 1 2 3 4 5 6 7
    -D 1000:0 7
    1000:0000 00 01 02 03 04 05 06 07
    
  2. 单步修改内存

    E+xxxx:x

    -E 1000:0
    1000:0000 00.00 00.01 00.02 00.03 00.04 00.05 00.06 00.07 
    
U指令
  1. 显示汇编代码

    U+xxxx:x

    -U 1000:0
    1000:0000 B80100       MOV     AX,0001    
    1000:0003 B80200       MOV     BX,0002
    1000:0006 01D8         ADD     AX,BX
    
T指令
  1. 单步执行CS:IP处的代码

    T

    -R
    AX=0000 BX=0000 CX=0000 DX=0000 SP=00FD BP=0000 SI=0000 DI=0000 
    DS=073F ES=073F SS=073F CS=1000 IP=0000 NV UP EI PL NZ NA PO NC
    1000:0000                   B80100               ADD    AX,0001
    -U 1000:0
    1000:0000 B80100       MOV     AX,0001
    -T 
    AX=0001 BX=0000 CX=0000 DX=0000 SP=00FD BP=0000 SI=0000 DI=0000 
    DS=073F ES=073F SS=073F CS=1000 IP=0000 NV UP EI PL NZ NA PO NC
    1000:0003                   B80200               ADD    BX,0002
    
  2. 多步执行CS:IP处的代码

    T+num

A指令
  1. 以汇编指令形式写入到内存的机器代码

    A + xxxx:x

    -A 1000:0
    1000:0000    mov ax,1
    1000:0003    mov cx,2
    1000:0006    add ax,cx
    

寄存器[TODO]

8086CPU 共有14个寄存器.

寄存器名称用途
AX通用寄存器
BX通用寄存器
CX通用寄存器
DX通用寄存器
CS代码段寄存器
DS数据段寄存器
SS栈顶段寄存器
ES寄存器
SI寄存器
DI寄存器
SP栈偏移地址寄存器
BP寄存器
IP指令地址寄存器
DI寄存器
PSW程序状态字

汇编程序

汇编程序由汇编指令伪指令组成. 汇编指令是有对应机器码的指令,而伪指令由编译器执行,用来指示编译工作.

执行过程:

Created with Raphaël 2.2.0 源码文件 ASM MASM编译 目标文件 OBJ LINK链接 可执行文件EXE
assume cs:codesg
codesg segment

       mov ax,2000H
       mov ss,ax
       mov sp,0
       add sp,10
       pop ax
       pop bx
       push ax
       push bx
       pop ax
       pop bx

       mov ax,4c00H
       int 21h
codesg ends

end

LOOP

   mov cx,LoopNum
   tag:
        Loop Codes
        ...
        loop tag

在汇编语言中,数据不能以字母开头,所以要加上0作前缀

可执行程序加载过程

DOS环境下调用程序将可执行文件加载至内存:

  1. 找到一段起始地址 SA:0000的容量足够的内存空闲区
  2. 在这段内存区的前256字节中创建一个称为程序段前缀(PSP)的数据区, DOS利用PSP来和被加载的程序进行通信.
  3. 从这段内存的256字节处开始装入程序(SA+10H:0000),并设置程序地址.
  4. 将该内存区的短地址存入DS中,初始化其他相关寄存器,设置CS:IP指向程序入口.

  1. 《汇编语言》(第三版) 王爽著, 清华大学出版社. ↩︎

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值