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

学号:20171308150 姓名:江漪雯 班级:17计科4班

实验结论

  一、练习1

  第一步,编写汇编源程序 t1.asm,源程序代码如图 1-1 所示。

第二步,对源程序 t1.asm 进行汇编、连接、运行、调试

首先打开DOSBOX界面,输入如下指令,进入edit界面。

然后会出现以下界面,点击Enter进入。

输入指定代码,并保存为t1.asm。

然后进行编译

连接

 

运行

1)运行程序,观察程序输出结果是什么?

         36

2)将 line4 和 line9 种寄存器 dl 的值分别修改为 0~9 中任何一个数字,重新汇编->连接->运行,观察结果的变化。

         我改为了 4和8。

然后分别进行汇编,连接和运行。

得到运行结果为48。

(3)用debug对生成的可执行文件 t1.exe 进行调试。

① 使用r命令查看,观察寄存器cx的值是多少;观察寄存器ds和cs的值是多少,他们之间是否满足关系(cs)=(ds)+10H?

CS=076A,DS=075A.CS=DS+10.故满足。

② PSP(程序段前缀)的头两个字节是CD 20,用debug查看PSP的内容,验证是否如此。

可得知确实如此。

③ 使用 u 命令对 t1.exe 进行反汇编,观察反汇编得到的源代码。

④ 使用 t 命令和 p 命令(遇到 int 命令时,用 p 命令)单步调试,观察结果。

可得知我的运行结果一个为4,一个为8。

   二、练习 2

       第一步,编写汇编源程序 t2.asm,源程序代码如图 1-2 所示。

将其命名为t2.asm。

第二步,对源程序 t2.asm 进行汇编、连接、运行、调试

1)对 t2.asm进行汇编,连接后,得到可执行文件 t2.exe。运行 t2.exe,观察程序运行结果,验证是否在屏幕左上方出现红色的数值36。

我的电脑直接运行显示不出,在执行前需要进行一次清屏操作,即cls命令。

2)如果(1)结果得到验证,重新打开 t2.asm,尝试将源代码中 line7 的 0433h->0432h,line10 的 0436h->0439h,然后重新汇编、连接,可得到执行文件 t2.exe。使用cls命令清屏后,再次观察程序运行结果。

将源代码中 line7 的 0433h->0432h,line10 的 0436h->0439h,然后重新汇编、连接,可得到执行文件 t2.exe,出现红色数字29。

使用cls命令清屏后,出现蓝色字母36。

实验3中第2个程序写法,里面隐藏着一个error,尽管在dosbox环境中汇编器没有报错,但在masm for windows集成软件环境里,明确定位了错误行,请尝试后,结合错误提示,把错误找出来并修正。

该程序显示错误:第六行和第八行,无效的操作数。不能往内存中直接写数,应该先把数放到寄存器中,再把寄存器附给内存。

因此,可以改为

总结与体会

     本章需要熟练掌握一个汇编程序从写出到最终执行的简要过程。第一步,编写汇编源程序;第二步,对源程序进行编译连接;第三步执行文件中的程序。这三个步骤必须按照顺序来。在编写源程序的时候,如果程序没有返回,在编译的时候是不能表现出来的,被编译器发现的错误只能是语法错误。

    通过查询网络,我了解到mov [bx],XXXXh是指向内存单元为ds:[bx]写入xxxxxh的数据。这在DOSBOX不会报错,但在MASM集成环境中会报错。应该先把数放到寄存器中,再把寄存器附给内存。通过改变数据的值能够变化输出的数字和数字的颜色,十分有趣。

 

posted @ 2018-11-18 12:31  江小雯  阅读(377)  评论(2编辑  收藏  举报