【实验三】编程、编译、连接、跟踪

四、实验结论

 

1.任务一:

 

(1)

①用edit命令开始编辑。

②出现如图界面,按下回车。

③出现此界面,按下alt键,菜单栏的每个单词首字母会变成白色,在键盘上按F键,展开File栏。

④出现如图界面,按下N键,新建一个文件。

⑤用光标把图中圈出来的地方往上拉,可以显示完全。

⑥如图输入代码。

⑦按alt,选择file,选择save。

⑧文件命名时,后缀可以是.txt,但建议用.asm,方便之后的编译和链接。

⑨保存后用alt呼出file的exit退出edit,用masm进行编译。

⑩用dir查看虚拟盘时,可以看到,出现了t1.obj,这是编译后的中间文件。

⑪用link进行连接,按几个回车键,然后执行t1。

观察到输出的结果是36

 

(2)

①分别修改成0和0,输出了00。

②分别修改成1和4,输出结果是14。

 

(3)用debug单步运行程序

①使用r命令查看各个内存器的值;

  cx=0016,代表程序的大小;cs=ds+10

②使用d命令,d ds:0 1查看psp前两个字节的内容;

③使用u命令进行反汇编;

④用t命令和p命令单步执行程序,下一条汇编指令是int类型时,必须用p进入子程序,可以看到执行的值,若使用t命令则看不到。


 

2.任务二:

 

(1)

①操作和任务一相同,输入如下代码。

②编译、连接

③cls后运行,观察到左上角有个红色的36.

(2)将代码第七行的 0433h 改写成 0432h ,第十行的 0436h 改写成 0439h,重复上述操作,观察到屏幕左上方出现红色的29。

(3)将代码第七行的 0433h 改写成 0333h ,第十行的 0436h 改写成 0336h,重复上述操作,观察到屏幕左上方出现蓝色的36。


 

思考:

(1)t2.asm中,mov ax,0b800h这一代码,不知道是0b80被送入ax中,还是b800被送进ax中。

经过单步调试后,发现是b800被送入ax中,感觉送入5个字节会产生问题,不知道算不算得上是错误,

当把0b800h改成b800h时,反而出了错误!不太明白。

(2)mov [bx],0433h显示的是红色的3,mov [bx],0333h显示的是蓝色的3,mov [bx],0432显示的是红色的2,虽然不知道具体什么原理,但可以猜测,0433h中,第二个数字4是控制颜色,最后一个数字3是控制输出数字。

 


 

 

 

五、总结与体会

(1)主要还是学会了对程序的编译,连接,运行,用debug调试exe程序。

(2)虽然对程序的具体实现步骤不了解,但是能管中窥豹,稍微了解一些运行的特点什么的。

(3)关于cs=ds+10,下图是个人理解。

(4)关于t命令和p命令,二者都是单步执行,但是t命令执行的时候不进入子程序,而p命令执行的时候会,所以在任务一中,单步执行时,如果下一条代码是int类型,使用p命令会看到之前一段代码的输出结果,但是使用t命令则不会。

posted @ 2018-11-15 23:07  Master_Sun  阅读(713)  评论(0编辑  收藏  举报