• DEBUG详细用法


    assemble     A [address]
    compare      C range address
    dump         D [range]
    enter        E address [list]
    fill         F range list
    go           G [=address] [addresses]
    hex          H value1 value2
    input        I port
    load         L [address] [drive] [firstsector] [number]
    move         M range address
    name         N [pathname] [arglist]
    output       O port byte
    proceed      P [=address] [number]
    quit         Q
    register     R [register]
    search       S range list
    trace        T [=address] [value]
    unassemble   U [range]
    write        W [address] [drive] [firstsector] [number]
    allocate expanded memory        XA [#pages]
    deallocate expanded memory      XD [handle]
    map expanded memory pages       XM [Lpage] [Ppage] [handle]
    display expanded memory status  XS
    

    from: http://hi.baidu.com/huoyanliu/blog/item/8ce17863b477a16b0d33fa23.html

    DEBUG命令一览

    1.读写寄存器

    -R                                                           显示所有寄存器内容

    -R 寄存器名                                           显示和修改指定寄存器内容

    -RF                                                          显示和修改标志寄存器内容

    2.汇编和反汇编

    -A [内存地址]                                          从指定地址开始汇编

    -U [内存块]                                              对指定内存块进行反汇编

    3.执行指令

    -T [:内存地址] [条数]                               单步或多步执行指令

    -P [= 内存地址] [条数]                             单步或多步执行指令

    -G [= 内存地址]                                        连续执行指令

    -G [= 内存地址] 断点地址                        设断点执行指令

    4.读写内存

    -D [内存块]                                              显示指定内存块内容

    -E 内存地址    字符或数值串                    修改指定内存内容

    -F 内存块        字符或数值串                    填充指定内存块

    -S 内存块         字符串或数值                    在指定内存块中查找串

    -M 内存块1    内存块2的首地址                复制内存块内容

    -C 内存块1    内存块2的首地址                 比较两个指定内存块

    5.读写磁盘

    -N [d:][PATH]文件名.扩展名                       指定想要读写的磁盘文件

    -W 内存地址                                             将指定内存块写入文件

    -L [内存地址]                                             将文件调如内存

    6.读写I/O端口

    -I 端口地址                                                读入指定端口的内容

    -O 端口地址 数值                                    将数据写入指定端口

    7.十六进制加减                                        

    -H 数值1      数值2                                   计算并显示两数之和,两数之差

    8.退出DEBUG

    -Q                                                             退出DEBUG,返回DOS

    示例一:DEBUG环境下建立和汇编程序

    输入并汇编程序

    -A 100
    0B70:0100 MOV DL, 65
    0B70:0102 MOV AH, 2
    0B70:0104 INT 21H
    0B70:0106 INT 20H
    0B70:0108

    运行程序
    -G=100
    e
    Program terminated normally

    反汇编程序
    -U 100, 108
    0B70:0100 B265          MOV     DL,65
    0B70:0102 B402          MOV     AH,02
    0B70:0104 CD21          INT     21
    0B70:0106 CD20          INT     20
    0B70:0108 F8            CLC

    将机器指令程序送到起始地址为200H单元
    -E 200 B2, 65, B4, 02, CD, 21, CD, 20

    执行机器指令程序
    -G=200
    e
    Program terminated normally
    示例二:显示修改寄存器内容

    显示所有寄存器内容

    -R
    AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
    DS=0B76 ES=0B76 SS=0B76 CS=0B76 IP=0100   NV UP EI PL NZ NA PO NC
    0B76:0100 B003          MOV     AL,03

    修改寄存器

    -R AX
    AX 0000
    :1234
    -R
    AX=1234 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
    DS=0B76 ES=0B76 SS=0B76 CS=0B76 IP=0100   NV UP EI PL NZ NA PO NC
    0B76:0100 B003          MOV     AL,03
    修改标志寄存器

    -RF
    NV UP EI PL NZ NA PO NC -DN CY
    -RF
    NV DN EI PL NZ NA PO CY -

    附录:标志寄存器

    溢出标志OF(Over flow flag)                             OV(1)                         NV(0)

    方向标志DF(Direction flag)                             DN(1)                          UP(0)

    中断标志IF(Interrupt flag)                                EI(1)                           DI(0)

    符号标志SF(Sign flag)                                     NG(1)                          PL(0)

    零标志ZF(Zero flag)                                        ZR(1)                         NZ(0)

    辅助标志AF(Auxiliary carry flag)                      AC(1)                          NA(0)

    奇偶标志PF(Parity flag)                                  PE(1)                          PO(0)

    进位标志CF(Carry flag)                                  CY(1)                         NC(0)

    示例三:汇编,汇编指令

    汇编命令

    -A 1000
    0B76:1000 MOV AH, 2
    0B76:1002 MOV DL, 61
    0B76:1004 INT 21
    0B76:1006 INT 20
    0B76:1008

    反汇编命令

    -U 0B76:1000 L8
    0B76:1000 B402          MOV     AH,02
    0B76:1002 B261          MOV     DL,61
    0B76:1004 CD21          INT     21
    0B76:1006 CD20          INT     20

    示例四:执行程序

    单步执行

    -T=0B76:1000

    AX=0234 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
    DS=0B76 ES=0B76 SS=0B76 CS=0B76 IP=1002   NV DN EI PL NZ NA PO CY
    0B76:1002 B261          MOV     DL,61

    -P=0B76:1000

    AX=0234 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
    DS=0B76 ES=0B76 SS=0B76 CS=0B76 IP=1002   NV DN EI PL NZ NA PO CY
    0B76:1002 B261          MOV     DL,61

    多步执行

    -T=0B76:1000 2

    AX=0234 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
    DS=0B76 ES=0B76 SS=0B76 CS=0B76 IP=1002   NV DN EI PL NZ NA PO CY
    0B76:1002 B261          MOV     DL,61

    AX=0234 BX=0000 CX=0000 DX=0061 SP=FFEE BP=0000 SI=0000 DI=0000
    DS=0B76 ES=0B76 SS=0B76 CS=0B76 IP=1004   NV DN EI PL NZ NA PO CY
    0B76:1004 CD21          INT     21

    -P=0B76:1000 2

    AX=0234 BX=0000 CX=0000 DX=0061 SP=FFEE BP=0000 SI=0000 DI=0000
    DS=0B76 ES=0B76 SS=0B76 CS=0B76 IP=1002   NV DN EI PL NZ NA PO CY
    0B76:1002 B261          MOV     DL,61

    AX=0234 BX=0000 CX=0000 DX=0061 SP=FFEE BP=0000 SI=0000 DI=0000
    DS=0B76 ES=0B76 SS=0B76 CS=0B76 IP=1004   NV DN EI PL NZ NA PO CY
    0B76:1004 CD21          INT     21

    说明:T和P的不同

    1.带重复前缀REP/REPNZ/REPZ的串操作指令和LOOP/LOOPZ/LOOPN等循环指令与CX有关,T命令执行是,每执行一次CX减1,就停下来返回DEBUG;而P命令执行是,一直到CX==0,计算机要执行其后的下一条指令时,才停下来返回DEBUG;

    2.调用CALL和INT是,T命令在子函数入口处停下来返回DEBUG,可对子程序进行调试,P命令会跳过子函数,直到执行RET或者IRET后才停下来返回DEBUG;

    连续执行

    -G=0B76:1000
    a
    Program terminated normally

    断点执行

    -G=0B76:1000 1004

    AX=0234 BX=0000 CX=0000 DX=0061 SP=FFEE BP=0000 SI=0000 DI=0000
    DS=0B76 ES=0B76 SS=0B76 CS=0B76 IP=1004   NV DN EI PL NZ NA PO CY
    0B76:1004 CD21          INT     21

    示例五:修改和显示内存内容

    显示命令

    -D 0B76:1000 L30
    0B76:1000 B4 02 B2 61 CD 21 CD 20-44 07 80 74 14 8A 44 0A   ...a.!. D..t..D.
    0B76:1010 88 87 70 92 43 83 FB 40-75 03 E8 7C 00 FE CE 75   ..p.C..@u..|...u
    0B76:1020 EC 80 7C 08 00 74 0D 38-4C 08 73 08 2A 4C 08 8A   ..|..t.8L.s.*L..

    修改命令

    -E DS:1003 'B'
    -D DS:1000 L4
    0B76:1000 B4 02 B2 42                                       ...B

    -E DS:1003
    0B76:1003 42.A
    -D DS:1003 L1
    0B76:1000           0A

    填充命令

    -F DS:2000 2100 'Hello world'
    -D DS:2000 L100
    0B76:2000 48 65 6C 6C 6F 20 77 6F-72 6C 64 48 65 6C 6C 6F   Hello worldHello
    0B76:2010 20 77 6F 72 6C 64 48 65-6C 6C 6F 20 77 6F 72 6C    worldHello worl
    0B76:2020 64 48 65 6C 6C 6F 20 77-6F 72 6C 64 48 65 6C 6C   dHello worldHell
    0B76:2030 6F 20 77 6F 72 6C 64 48-65 6C 6C 6F 20 77 6F 72   o worldHello wor
    0B76:2040 6C 64 48 65 6C 6C 6F 20-77 6F 72 6C 64 48 65 6C   ldHello worldHel
    0B76:2050 6C 6F 20 77 6F 72 6C 64-48 65 6C 6C 6F 20 77 6F   lo worldHello wo
    0B76:2060 72 6C 64 48 65 6C 6C 6F-20 77 6F 72 6C 64 48 65   rldHello worldHe
    0B76:2070 6C 6C 6F 20 77 6F 72 6C-64 48 65 6C 6C 6F 20 77   llo worldHello w
    0B76:2080 6F 72 6C 64 48 65 6C 6C-6F 20 77 6F 72 6C 64 48   orldHello worldH
    0B76:2090 65 6C 6C 6F 20 77 6F 72-6C 64 48 65 6C 6C 6F 20   ello worldHello
    0B76:20A0 77 6F 72 6C 64 48 65 6C-6C 6F 20 77 6F 72 6C 64   worldHello world
    0B76:20B0 48 65 6C 6C 6F 20 77 6F-72 6C 64 48 65 6C 6C 6F   Hello worldHello
    0B76:20C0 20 77 6F 72 6C 64 48 65-6C 6C 6F 20 77 6F 72 6C    worldHello worl
    0B76:20D0 64 48 65 6C 6C 6F 20 77-6F 72 6C 64 48 65 6C 6C   dHello worldHell
    0B76:20E0 6F 20 77 6F 72 6C 64 48-65 6C 6C 6F 20 77 6F 72   o worldHello wor
    0B76:20F0 6C 64 48 65 6C 6C 6F 20-77 6F 72 6C 64 48 65 6C   ldHello worldHel

    搜索命令

    -S DS:2000 L30 'Hello'
    0B76:2000
    0B76:200B
    0B76:2016
    0B76:2021

    移动命令

    -M DS:2000 L20 DS:3000
    -D DS:3000
    0B76:3000 48 65 6C 6C 6F 20 77 6F-72 6C 64 48 65 6C 6C 6F   Hello worldHello
    0B76:3010 20 77 6F 72 6C 64 48 65-6C 6C 6F 20 77 6F 72 6C    worldHello worl

    比较命令

    -C DS:2000 L20 DS:3000
    -C DS:2000 L30 DS:3000
    0B76:2020 64 20 0B76:3020
    0B76:2021 48 77 0B76:3021
    0B76:2022 65 69 0B76:3022
    0B76:2023 6C 74 0B76:3023
    0B76:2024 6C 68 0B76:3024
    0B76:2025 6F 20 0B76:3025
    0B76:2026 20 6E 0B76:3026
    0B76:2027 77 6F 0B76:3027
    0B76:2028 6F 20 0B76:3028
    0B76:2029 72 70 0B76:3029
    0B76:202A 6C 61 0B76:302A
    0B76:202B 64 72 0B76:302B
    0B76:202C 48 61 0B76:302C
    0B76:202D 65 6D 0B76:302D
    0B76:202E 6C 65 0B76:302E
    0B76:202F 6C 74 0B76:302F

    示例六:读写磁盘

    指定文件命令

    -N C:TEST.TXT

    写入命令

    -R
    AX=0000 BX=0000 CX=0000 DX=0061 SP=FFEE BP=0000 SI=0000 DI=0000
    DS=0B76 ES=0B76 SS=0B76 CS=0B76 IP=1004   NV DN EI PL NZ NA PO CY
    0B76:1004 CD21          INT     21
    -R BX
    BX 0000
    :
    -R CX
    CX 0000
    :20
    -W DS:2000
    Writing 00020 bytes

    注释:写入的大小有BX,CX决定,BX为高字节,CX为低字节

    装入命令

    -L DS:4000
    -D DS:4000 L30
    0B76:4000 48 65 6C 6C 6F 20 77 6F-72 6C 64 48 65 6C 6C 6F   Hello worldHello
    0B76:4010 20 77 6F 72 6C 64 48 65-6C 6C 6F 20 77 6F 72 6C    worldHello worl
    0B76:4020 4C 03 C8 24 91 8D 02 43-44 03 80 2D 09 8D 05 43   L..$...CD..-...C

    注释:如果是.exe文件或.com文件,L后不跟参数,exe装入CS:0000处,com装入CS:0100处

    示例七:I/O端口的输入输出

    输入命令

    -I 219
    FF

    输出命令

    -O 21B 82

    示例八:十六进制加减

    -H 45 36
    007B 000F

    段寄存器的隐含原则

    存储器的操作类型                      正常使用段                     可使用的其他段                  相对位移

    取指令                                      CS                                   无                                       IP

    堆栈操作                                   SS                                  无                                       SP

    变量(以下三中情况除外)            DS                                  CS, ES, SS                          有效地址EA

    源数据串                                   DS                                  CS, ES, SS                         SI

    目的数据串                               ES                                    无                                       DI

    基址用BP的变量                        SS                                   CS, ES                                有效地址EA

  • 相关阅读:
    Codeforces Round #131 (Div. 2) E. Relay Race dp
    Codeforces Round #130 (Div. 2) C
    Codeforces Round #130 (Div. 2) A. Dubstep
    UVA 11858 Frosh Week 逆序对统计
    UVA 11149 Power of Matrix 快速幂
    UVA 12382 Grid of Lamps 贪心
    POJ 3614 Sunscreen 贪心
    Codeforces Round #238 (Div. 2) D. Toy Sum 暴搜
    Codeforces Round #227 (Div. 2) E. George and Cards 线段树+set
    Codeforces Round #327 (Div. 2) E. Three States
  • 原文地址:https://www.cnblogs.com/wucg/p/2311475.html
Copyright © 2020-2023  润新知