实验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指令等。

posted @ 2021-11-05 15:43  Ja和Ti是两个北方男孩  阅读(107)  评论(3)    收藏  举报