实验2 多个逻辑段的汇编源程序编写与调试
实验结论
实验任务1
任务1-1
task1_1.asm源码:

调试到line17结束:

回答问题:
DS为076AH
SS为076BH
CS为076CH
data段地址是X-2H
stack段地址是X-1H
任务1-2
源码:

运行结果截图:

DS为076AH
SS为076BH
CS为076CH
data段地址为X-2H
stack段地址为X-1H
任务1-3
源码:

运行截图:

DS为076AH
SS为076CH
CS为076EH
data段地址为X-4H
stack段地址为X-2H
任务1-4

运行截图:

DS为076CH
SS为076EH
CS为076AH
data段地址为X+2H
stack段地址为X+4H
任务1-5
1. 实际分配的内存大小为N字节
2. 程序4可以正常执行,但是程序1,2,3不能正常执行
因为如果写了end start,程序会从start标号处开始执行,也就是CS:IP指向了start所处位置,但是如果不写start,程序会从代码开始的地方执行。因为只有程序4的开始是代码,所以只有程序4能够正确执行
实验任务2
源码:

运行结果:

如图,在屏幕上出现了正确的显示内容
实验任务3
代码:

运行前的data3段

运行前的data1和data2段:

运行之后:

通过d命令查询即可看出,程序正确地将data1和data2段的内容相加
实验任务4
源码:

运行结果

可见,data1中的字数据已经逆序存放到了data2中
实验任务5
源码:


执行结果:
line19的作用是将小写字母转化为大写字母
line4数据的作用是控制显示的颜色
实验任务6:
源码:

运行结果:

可见,第一个单词已经正确的进行了转换,第一行的字母没有变动,其他行的首字母变为了小写
实验任务7
首先分析data段中的数据存放结构:
年份 0~19 字节 每4字节一组
收入 20~29字节 每2字节一组
人数 30~39字节 每2字节一组
没有记录人均收入,需要用div指令运算
然后编写代码:

编译链接,并使用debug执行程序,
运行前table截图:

可见table段的内容全部被初始化成空格
运行结果:

可见,所有的数据都已正确地存入table段中
实验总结
这次的实验主要内容是多个逻辑段的汇编程序的编写,通过这次的实验,我可以更加熟练的运用逻辑段,通过逻辑段,我们可以在内存中存储大量的数据,实现栈结构,或者在内存中查看本程序的源代码。同时,这次实验也极大地锻炼了我的汇编程序编写的综合能力,特别是task7,是一个综合性较强的任务,通过完成这个任务,我熟悉了内存段的存储结构,对不同的数据类型有了更深的理解,也学会了一些新的指令的使用,比如div指令等。
浙公网安备 33010602011771号