实验任务一
1.教材实验一
(1)
通过A命令将汇编语言输入内存
用R cs和R ip将cs:ip指针指向第一条程序的位置073F:0100,接着用T命令逐条执行命令
(2)
将指令输入内存并且调整cs:ip指针
重复执行若干次后得到0100即256
(3)
用D命令查看内存
发现日期为92年1月1日;
尝试改变FFFF:0到FFFF:F的内容失败,因为c0000到FFFFF为只读存储器,无法写入数据
(4)
输入后结果如图
因为A0000到BFFFF为显存空间
实验任务二
见上试验任务一(三)
试验任务三
在debug中,使用e命令,向内存单元填写数据。
-e b800:0 03 04 03 04 03 04 03 04 03 04
从b800:0开始的内存单元开始,依次写入十六进制数据04 03,重复写5次。
结果如下
在debug中,使用f命令,向内存单元批量填写数据。
-f b800:0f00 0f9f 03 04
把内存单元区间b800:0f00 ~ b800:0f9f连续160个字节,依次重复填充十六进制数据03 04。
结果如下
尝试改变内存数据
试验任务四
(1)
初始,(sp)=0030
执行完push [0] 后 (sp)=002E
执行完push [2] 后 (sp)=002C
执行完push [4] 后 (sp)=002A
执行完push [6] 后 (sp)=0028
执行完pop [6] 后 (sp)=002A
执行完pop [4] 后 (sp)=002C
执行完pop [2] 后 (sp)=002E
执行完pop [0] 后 (sp)=0030
(2)栈空间数据如下图
可见20:2e处为push[0]所压入的字2010H
(3)
数据空间结果如下
数据没有变化
(4)
结果如下
可以发现数据顺序颠倒了
试验任务五
结果如下
实验任务六
过程如下
试验任务七
补全代码如下
assume cs:code code segment mov ax,cs mov ds,ax mov ax,0020h mov es,ax mov bx,0 mov cx,23 s: mov al,[bx] mov es:[bx],al inc bx loop s mov ax,4c00h int 21h code ends end
(1)第一空填写 cs,因为这是程序开始的地址;
第二空填写 21;
查看代码发现最后line3-line12所占空间为 0000H~0017H 17H=2
实验结论
实验二
尝试改变FFFF:0到FFFF:F的内容失败,因为c0000到FFFFF为只读存储器,无法写入数据;
实验三
截图见上
实验四
问题一:SS:SP 20:30 02300H
问题二:截图见上
问题三:截图见上
问题四:截图见上
实验五
问题一:debug的t命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行
问题二:查阅资料知,与中断机制有关。
实验六
见上
实验七
见上
实验总结
通过本次实验,对dosbox下的debug工具及其命令,edit工具,文件的编译、连接,汇编中栈的知识有了更加深入的理解。