掌握DEBUG 基本命令及其功能
2016-03-05 19:54
218 查看
windows下调试debug步骤
打开dosbox上篇
查看CPU和内存 用机器指令和汇编指令编程
实验任务
(1)
默认为十六进制数,所以不用加H,指令之间只能有一个空格。
(2)
JMP 2000:0003后,CS:IP变为2000:0003,指向语句为
ADD AX,AX共执行十六次后AX变为100H即256
(3)
可以看到生产日期为01/01/92,因为DEBUG是在虚拟环境下运行的,所以日期显示不正确。8086pc机C000~FFFFF的内存单元是只读存储器的,所以这里生产日期无法改变。
下篇
用机器指令和汇编指令编程
实验任务
(1)
mov ax,ffff mov ds,ax mov ax,2200 mov ss,ax mov sp,0100 mov ax,[0] ;ax=C0EAH add ax,[2] ;ax=C0FCH mov bx,[4] ;bx=30F0H add bx,[6] ;bx=6021H push ax ;sp=00FEH ;修改的内存单元的地址是2200:0100 内容为C0FCH push bx ;sp=00FCH ;修改的内存单元的地址是2200:00FE 内容为6021H pop ax ;sp=00FEH ;ax=6021H pop bx ;sp=0100H ;bx=C0FCH push [4] ;sp=00FEH ;修改的内存单元的地址是2200:0100 内容为30F0H push [6] ;sp=00FCH ;修改的内存单元的地址是2200:00FE 内容为2F31H
首先写入程序
查看DS指向的数据
逐条运行
可以看到栈中数据的变化
(2)
如图可知,ADD命令不可以对段寄存器进行操作,所以将
ADD DS,AX
修改为
MOV BX,DS ADD AX,BX MOV DS,AX
MOV AX,1000H ;AX=1000H MOV DS,AX ;DS=FFFFH MOV DS,[0] ;DS=0000H MOV BX,DS ;BX=0000H ADD AX,BX ;AX=1000H MOV DS,AX ;DS=1000H
(3)
因为Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行。所以
MOV SS,AX之后,SS=2000H SP=0010H
根据汇编语言12.11单步中断在
MOV SS,AX MOV SP,10后,执行单步中断的中断处理程序
取得中断类型码1;
标志寄存器入栈,TF,IF设置为0;
CS,IP入栈;
(IP)=(1*4),(CS)=(1*4+2).
所以2000:0 F中内容发生了变化。
实验心得
这次实验需要用-A命令写汇编指令,在这方面犯了不少错误,总是在不经意间多打了空格,导致出现错误。。Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行。
8086PC 机内存地址空间分配基本情况为:
00000 ~ 9FFFF | 内存储器地址空间(RAM) |
---|---|
A0000 ~ BFFFF | 显存地址空间 |
C0000 ~ FFFFF | 各类ROM地址空间 |