我是靠谱客的博主 舒心大山,最近开发中收集的这篇文章主要介绍掌握DEBUG 基本命令及其功能上篇下篇实验心得,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述


windows下调试debug步骤

  1. 打开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. 取得中断类型码1;
  2. 标志寄存器入栈,TF,IF设置为0;
  3. CS,IP入栈;
  4. (IP)=(1*4),(CS)=(1*4+2).

所以2000:0 F中内容发生了变化。

实验心得

这次实验需要用-A命令写汇编指令,在这方面犯了不少错误,总是在不经意间多打了空格,导致出现错误。。
Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行。

8086PC 机内存地址空间分配基本情况为:

00000 ~ 9FFFF内存储器地址空间(RAM)
A0000 ~ BFFFF显存地址空间
C0000 ~ FFFFF各类ROM地址空间

最后

以上就是舒心大山为你收集整理的掌握DEBUG 基本命令及其功能上篇下篇实验心得的全部内容,希望文章能够帮你解决掌握DEBUG 基本命令及其功能上篇下篇实验心得所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部