200 likes | 500 Views
DEBUG 命令及使用. DEBUG 是 DOS 下汇编语言专用调试程序。可对*. COM 进行完全的调试保存,可对*. EXE 只能调试不能保存。 “—” 为其提示符,可 以用 DEBUG 命令进行汇编、反汇编、调试。 1. CS 、 DS 、 ES 、 SS 指向自由空间的底部,具体值与装入的操作系统有关。 2. AX 、 BX 、 CX 、 DX 、 BP 、 SI 、 DI 均为 0000 H 3.IP : 0100H 一、 DEBUG 的调用 1、 进入 DEBUG 命令状态 - N EXA.COM (N 命令 )
E N D
DEBUG命令及使用 DEBUG是DOS下汇编语言专用调试程序。可对*.COM进行完全的调试保存,可对*.EXE只能调试不能保存。 “—” 为其提示符,可以用DEBUG命令进行汇编、反汇编、调试。 1.CS、DS、ES、SS指向自由空间的底部,具体值与装入的操作系统有关。 2.AX、BX、CX、DX、BP、SI、DI均为0000H 3.IP:0100H 一、DEBUG的调用 1、进入DEBUG命令状态 -N EXA.COM (N命令) -L (L命令) 2、直接调用 C:>DEBUG PATH XXX.COM 演示DEBUG文件调用
二、DEBUG常用命令 1、内存显示命令 D -D地址↙ -D 100 ↙ 显示连续128字节的内容 4、运行命令G -G地址1 地址2 …… ↙ -G 100 ↙ 从CS:IP=CS:100H开始执行。 5、跟踪命令T及P -T↙ 当前CS:IP执行一条指令 -T=地址↙ 2、内存修改命令 E -E 地址内容表↙ -E DS:100 F3 “ABC” 8D ↙ 从DS的100H单元开始修改,依次各字节修改为F3 “ABC” 8D。 E命令演示 6、汇编命令A -A↙ -A地址↙ 3、寄存器修改命令R -R↙ -R 寄存器名↙ 命令演示
12、输入输出命令I、O -I(O)端口地址 ↙ 7、反汇编命令 U -U↙ 当前地址CS:IP反汇编32字节指令 -U 地址↙ 8、命名命令N -N 文件名↙ N命令演示 9、 文件装入命令L 10、写文件命令W BX:文件长度的高16位 CX:文件长度的低16位 11、退出DEBUG回到DOS状态命令Q 命令演示
机器语言 FORTRAN BASIC C/C++ JAVA …... 高级语言 汇编语言 第三章 80X86微处理器的指令系统 3.1寻址方式 汇编语言:指令的助记符编码构成的程序设计语言。 例 MOV AX,05C7H ;汇编指令 而 B8C705H ;机器指令 • 汇编语言的几个定义及指令格式 • 指令:计算机完成某种操作的命令。 • 机器语言:指令的二进制编码构成的程序设计语言。 指令性语句与机器语言一一对应的同属低级语言。 命令演示
操作码 操作数1, 操作数2 指令操作代码 源操作数 目的操作数 • 单操作数指令 • 双操作数指令 INC CX DEC AX ADD CX,1 SUB AX,1 只有目的操作数 指令基本格式
例MOV SI,20H ; MOV AL,01000011B ; MOV AX,4346H ; MOV AX,1506 ; MOV AL,‘B’ 20H SI 01000011B AL 4346H AX 1506 AX 41H AL MOV 3,ALMOV AH, 3064H 立即数不能作目的操作数 源目的操作数的字长一致 3.1.1寻址方式 • 数据的寻址方式 1、立即寻址——操作数存放在指令中,紧跟在操作码之后。 MOV AL,10H 汇编码 B010H 机器码 源操作数:10H立即数构成指令的一部分。 命令演示
2、寄存器寻址 ——操作数在指定的寄存器中。 例1 MOV AL,BL ;BL值送AL 例2MOV AX,BX ;BX的内容送AX 例3MOV CL,DH ;DH值送CL MOV SS,AL MOV AH, BX 字节寄存器只有 AH、AL、BH、BL、CH、CL、DH、DL SRC 和 DST的字长一致 命令演示
例:MOV AX, [2000H] EA=2000H, 假设(DS)=3000H, 那么(PA)=32000H (AX) = 3050H AH AL 地址增量 30 50 32000 50H 32001 30H • 存储器寻址 3. 直接寻址—— 有效地址EA由指令直接给出 有效地址EA:操作数的偏移地址 物理地址PA = (DS) 16d + EA 隐含的段为数据段 DS 适于处理单个变量 命令演示
偏移地址EA:BX、SI、DI→DS (BX) (SI) (DI) 物理地址PA= (DS) 16 + MOV AX, [BX] PA = 16d (DS) + (BX) MOV AX, [BP] PA = 16d (SS) + (BP) 也称基址寻址 也称变址寻址 [SI]源变址 [DI]目的变址 MOV AX, [SI] PA = 16d (DS) + (SI) MOV AX, [DI] PA = 16d (DS) + (DI) • 存储器寻址 4. 寄存器间接寻址 ——EA在基址寄存器(BX/BP) 或变址寄存器(SI/DI)中 • 偏移地址EA:BP→SS • 物理地址PA= (SS) 16 +(BP)
16 (DS) 2000H 内存 0CH (AX) = 5678H BH BL 52H EA=(BX) 01H 00H AH AL 56H 78H 0H 2000H 20100 78H PA 20101 20100H 56H • 存储器寻址 例1 MOV AX,[BX] (DS)=2000H,(SS)=1000H,(BP)=120H (BX)=100H,(AX)=1234H,(20100H)=5678H 偏移地址EA=(BX)=100H 物理地址PA=物理地址PA= (DS) 16 +(BX)=20000H+100H=20100H 命令演示
16 (SS) 1000H 内存 0CH (AX) = 5678H 52H EA=(BP) 01H 20H AH AL BCH F0H 0H 1000H 10120 F0H PA 10121 10120H BCH • 存储器寻址 例2MOV AX,[BP] (DS)=2000H,(SS)=1000H,(BP)=120H (BX)=100H,(AX)=0133H,(10120H)=BCF08H 偏移地址EA=(BP)=0120H 物理地址PA=物理地址PA= (SS) 16 +(BP)=10000H+100H=10120H 命令演示
存储器寻址 • 不允许使用AX、CX、DX存放EA • MOV AX, [CX] • SRC 和 DST的字长一致 • MOV DL, [BX] ; [BX]指示一个字节单元 • MOV DX, [BX] ; [BX]指示一个字单元 • 适于数组、字符串、表格的处理
(BX) (SI) (DI) (BP) 偏移地址EA= + X ,8位16位移量 (BX) (SI) (DI) 物理地址PA=(DS)×16 + + X ,8位16位移量 物理地址PA=(SS)×16 + + X ,8位16位移量 (BP) • 存储器寻址 5、相对寄存器间接寻址
DS 2000H 16 内存 00H 01H 0CH (AX) = ABCDH - 6 52H FAH EA=(BX-6) 00H AH AL ABH CDH 0H 2000H 200FA CDH PA 200FB 200FAH ABH • 存储器寻址 例1 MOV AX,[BX-6] (DS)=2000H,(SS)=1000H,(BP)=120H (BX)=100H,(AX)=1234H,(20100H)=ABCDH 偏移地址EA=(BX) - 6=0FAH 物理地址PA=物理地址PA= (DS) 16 +(BX)-6=20000H+100H-6=200FAH
SS 1000H 16 内存 20H 01H 0CH (CX) = 1234H + 6 52H 26H EA=(BP+6) 01H CH CL 12H 34H 0H 1000H 2000A 34H 2000B 10126H PA 12H • 存储器寻址 例2MOV CX,6[BP] (DS)=2000H,(SS)=1000H,(BP)=120H (BX)=100H,(CX)=0012H,(20126H)=1234H 偏移地址EA=(BP)+6=126H 物理地址PA=物理地址PA= (SS) 16 +(BP)+ 6=10000H+120H+6=20126H
(BX) (BP) (SI) (DI) 偏移地址EA= + (SI) (DI) 物理地址PA=(DS)×16 +(BX) + (SI) (DI) 物理地址PA=(SS)×16 +(BP) + • 存储器寻址 6、基址加变址寻址 MOV AX, [BX][DI] 或 MOV AX, [BX+DI] MOV [BP+DI],AX 必须是一个基址寄存器和一个变址寄存器的组合 MOV AX, [BX][BP] MOV AX, [SI][DI]
(BX) (BP) (SI) (DI) 偏移地址EA= + + X ,8位16位移量 (SI) (DI) 物理地址PA=(DS)×16 +(BX) + + X ,8位16位移量 (SI) (DI) 物理地址PA=(SS)×16 +(BP) + X ,8位16位移量 + • 存储器寻址 6、相对基址加变址寻址 MOV AX,6 [BX][DI] 或 MOV AX, [BX+DI+6] MOV [BP+DI-9],AX 必须是一个基址寄存器和一个变址寄存器的组合 MOV AX, [BX+BP+9] MOV AX, 10H[SI][DI]
跨段问题(段超越) 针对当前段,各段与寄存器有关的内存寻址之间是固定搭配的。 DS: BX ,DI, SI SS:BP 加上段前缀,可打破这种关系完成跨段操作。 例: MOV AX,ES:[BX] PA=(ES)×16+(BX) MOV CX,SS:[SI] PA=(SS)×16+(SI) MOV CS:[BX+DI],AX PA=(CS)×16+(BX)+(DI) 源、目的操作数的字长一致 源、目的操作数不能同为内存单元 立即数不能作目的操作数
3.1.2 转移地址的寻址 在转移指令中讲述。 3.1.3 保护方式下的寻址 自学P86保护方式下的寻址方式。
课后作业: • P128 3.1 (1) (2) • 指出下列指令源操作数的寻址方式。 • MOV AX,[2001] • MOV [BX],SI • MOV [SI+200H],100H • MOV SI,[BX+DI] • MOV SI,[BP+DI+9]