实验2 多个逻辑段的汇编源程序编写与调试

 

任务1-1

 

 

 

 

 

 问题1:寄存器(DS) = 076A, 寄存器(SS) = 076B,寄存器(CS) = 076C

问题2:假设程序加载后,code段的段地址是X,则,data段的段地址是X-2, stack的段地址是X-1

任务1-2

 

 问题1:寄存器(DS) = 076A, 寄存器(SS) = 076B, 寄存器(CS) = 076C

问题2:假设程序加载后,code段的段地址是X,则,data段的段地址是X-2, stack的段地址是X-1

任务1-3

 

 问题1:寄存器(DS) = 076A, 寄存器(SS) = 076C, 寄存器(CS) = 076E

问题2:假设程序加载后,code段的段地址是X,则,data段的段地址是X-4, stack的段地址是X-2

任务1-4

 

 问题1:寄存器(DS) = 076C, 寄存器(SS) = 076E, 寄存器(CS) = 076A

问题2:假设程序加载后,code段的段地址是X,则,data段的段地址是X+2, stack的段地址是X+4

任务1-5:

实际分配给该段的内存空间大小是 16Byte。end除了通知编译器程序结束外,还可以通知编译器程序的入口在什么地方。在程序6.2中我们用end指令指明了程序的入口在标号start处。

尾指令end 描述了程序的结束和程序的入口。在编译、连接后,"end start" 指明的程序入口,被转化为一个入口地址,存储在可执行文件的描述信息中。

任务2:

 

 

 

 任务3:

 编程实现把逻辑段data1和逻辑段data2的数据依次相加,结果保存到逻辑段data3中。
在debug中加载、反汇编、调试。在数据项依次相加前,和相加后,分别查看三个逻辑段data1, data2, data3对应的内存空间,确认逐一相加后,结果的确保存在了逻辑段data3中。

 

 

相加前截图:

 

 

 相加后截图:

 

 反汇编截图:

 

 任务4:

 

 汇编、连接后,在debug中加载程序,运行到line15程序退出前,使用d命令查看数据段data2对应的内存空间,确认是否实现题目要求。

 

 

 

 任务5:

 

 

Line 19 的作用:将小写字母转换成大写字母

db 2,3,4,5,6 --> 改成: db 5 dup(2)

实验结果:NUIST变成绿色

 

 

db 2,3,4,5,6 --> 改成:  db 5 dup(5)

实验结果:NUIST变成紫色

 

 数值的作用可能是设置不同的颜色

任务6:

 

 在debug中加载程序,反汇编,执行到line13退出前,用d命令查看data段对应的内存空间,确认每
行第一个单词已经由大写->小写。

反汇编:

 

 结果:

 

 任务7:

 

 

posted @ 2021-11-09 23:47  网工唐豪  阅读(40)  评论(1)    收藏  举报