实验3 多个段的汇编源程序编写与调试












说明:
1)line15-25,循环实现的功能是什么?逐行理解每条指令的功能
答:循环实现的功能是将“nuist”大写后的ASCII值,依次存放在对应的显存区。
line 15:设置循环次数(5);
line 16:将0送至si;
line 17:设置起始内存单元地址;
line 18:将数据段的第si个字节送入al;
line 19:获取对应大写字母的ASCII值;
line 20:将其送入对应的显示缓冲区,用来控制输出字符;
line 21:将数据段的第si+5个字节送入al,该字节是控制字符的颜色属性
line 22:将控制字符颜色属性的值传入显示缓冲区
line 23:在下次循环中选择下一个字符;
line 24:控制下次送入显示缓存区的位置
line 25:循环
2)基于观察,分析,猜测这里数值的作用是什么?
答:控制字符的颜色属性。
3)分析源代码中data段line4字节数据的用途是什么?
答:控制ASCII的字符属性。
2.实验任务2
task2.asm:


运行结果如下图所示:
![]()
3.实验任务3
task3.asm:

说明:
1)CPU执行程序,程序返回前,data段的数据为多少?
答:在使用t命令调试前,查看data中的数据,如下图所示:
![]()
程序返回前,查看data中的数据,如下图所示:

由此可以看出data段中的数据为0123H,0456H,0789H,0ABCH,0DEFH,0FEDH,0CBAH,0987H且保持不变。
2)CPU执行程序,程序返回前,cs=?,ss=?,ds=?
![]()
由上图可以看出,cs=076CH,ss=076BH,ds=076AH
3)设程序加载后,code段的段地址为X,则data段的段地址为多少?stack段的段地址为多少?
答:data段的段地址为x-2,stack段的段地址为x-1。
4.实验任务4
task4.asm:

说明:
1)CPU执行程序,程序返回前,data段的数据为多少?
答:在使用t命令调试前,查看data中的数据,如下图所示:

程序返回前,查看data中的数据,如下图所示:

由此可以看出data段中的数据为0123H,0456H且保持不变。
2)CPU执行程序,程序返回前,cs=?,ss=?,ds=?

由上图可以看出,cs=076CH,ss=076BH,ds=076AH
3)设程序加载后,code段的段地址为X,则data段的段地址为多少?stack段的段地址为多少?
答:data段的段地址为x-2,stack段的段地址为x-1。
4)如果将(1),(2),(3)题中的最后一条伪指令“end start”改为“end”,则哪个程序仍然可以正确执行?请说明原因。
答:(3)程序仍然可以正确执行;
原因:(1),(2)两个程序是以数据段开头,故不能直接执行指令,而(3)程序是以汇编指令段开头,故当最后一条伪指令“end start”改为“end”时,只有(3)程序仍然可以正确执行。
5.实验任务5
task5.asm:

说明:
1)CPU执行程序,程序返回前,data段的数据为多少?
答:在使用t命令调试前,查看data中的数据,如下图所示:

程序返回前,查看data中的数据,如下图所示:

由此可以看出data段中的数据为0123H,0456H且保持不变。
2)CPU执行程序,程序返回前,cs=?,ss=?,ds=?
![]()
由上图可以看出,cs=076AH,ss=076EH,ds=076DH
3)设程序加载后,code段的段地址为X,则data段的段地址为多少?stack段的段地址为多少?
答:data段的段地址为x+3,stack段的段地址为x+4。
6.实验任务6
如果将(1),(2),(3)题中的最后一条伪指令“end start”改为“end”,则哪个程序仍然可以正确执行?请说明原因。
答:(3)程序仍然可以正确执行;
原因:(1),(2)两个程序是以数据段开头,故不能直接执行指令,而(3)程序是以汇编指令段开头,故当最后一条伪指令“end start”改为“end”时,只有(3)程序仍然可以正确执行。
7.实验任务7
task7.asm


masm汇编&link链接:

使用debug命令进行调试:



查看逻辑段c的数据的截图:

8.实验任务8
task8.asm:

masm汇编&link链接:

使用debug命令进行调试:



查看逻辑段c的数据的截图:

五、实验总结
(1)task1.exe执行结果缺少'N',这一点不是很理解原因。
(2)巩固了不同方式访问内存地址的应用。
(3)加深了对ASCLL应用的理解和运用。

浙公网安备 33010602011771号