实验二 汇编源程序编写与汇编、调试
dos运行edit并输入要求的内容:

dos运行masm:

生成了ex1.obj文件:

dos运行link:

产生了exe文件:

先使用debug ex1.exe和d命令查看前256个字节:

使用u命令精准反汇编:

使用g命令到程序结束之前的位置:

使用d命令查看:

发现结果不对于是回去单步调试了一下:

ds的值非常奇怪,询问了老师之后可能是dosbox运行环境的缓冲区页数问题。
直接运行exe文件可以得到彩色符号:

跟任务一相同,先使用dosbox的edit功能进行输入ex2.asm:

接着生成obj和exe文件:


u命令精确反汇编:

使用g命令直接跳到循环的前面进行t命令的单步执行:


此时为循环一次,cx从4变为3,接着还会一直执行下去直到cx变为0.
如果使用p命令的话:

发现直接跳过了其中的循环步骤,cx由4变为0,AX也变为0505循环了4次。
在之后的中断指令int位置也是相同:
如果使用t命令则会进入中断指令内部:

使用p命令则会直接看到中断指令结束,程序中止:

继续使用edit命令将cx的值由4变为8即将循环次数从4变成8:

重新进行编译和连接:

进行debug查看有何不同:

使用p命令单步调试:

发现这次结束的时候AX为0909,CX由8变为了0,循环了8次
ex1:

ex2:

ex1和ex2都完成显存的图案输出,ex1使用的是将数直接填充进对应位置,而ex2则用loop循环将数值存入显存中。
首先根据题目所给的要求编写一个源程序:

接着按照惯例的编译连接:

cls命令清屏观察:

发现出现了问题,仔细看了一遍题目发现是16字单元不是字节单元,在cx应该循环16次,修改一下:


正确!
把填充的字数据从0237H改成0239H:



由此可以合理猜测,这个子数据中高位字节存放的是颜色信息,低位字节存放的是字节信息

进行编译连接并使用t,g,p命令调试:



完成了数据的传送
进行编译连接debug:

题目要求的将mov 4C00之前的指令复制而此指令在0018h的位置即将0000-0017h的指令复制到内存0:200处
所以cx的数值就应该设为17h,赋给ds的ax值的初始应该设为cs值076A
修改ex5:


可以看到指令成功传送到了0:200内存处!
四、实验总结
之前汇编语言课上对于汇编源程序的一系列生成操作听的云里雾里,这次实验的5个实验任务让我完完全全理解
了源程序的生成过程和操作步骤,对于bx和loop循环理解也更加的透彻,切勿注意在跳出loop循环时和int 21h
结束程序时单步调试要用p命令否则会进入下一轮的loop循环和进入结束程序无法跳出。

浙公网安备 33010602011771号