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

task1_1调试到line17结束、line19之前截图

① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = 076A, 寄存器(SS) = 076B, 寄存器(CS) = 076C
② 假设程序加载后,code段的段地址是X,则,data段的段地址是X-32, stack的段地址是X-16。
任务1-2
task1_2.asm

task1_2调试到line17结束、line19之前观察寄存器DS, CS, SS值的截图

① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = 076A, 寄存器(SS) = 076B, 寄存器(CS) = 076C
② 假设程序加载后,code段的段地址是X,则,data段的段地址是X-32, stack的段地址是X-16。
任务1-3
task1_3.asm
task1_3调试到line17结束、line19之前观察寄存器DS, CS, SS值的截图

① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = 076A, 寄存器(SS) = 076C, 寄存器(CS) = 076E
② 假设程序加载后,code段的段地址是X,则,data段的段地址是X-64, stack的段地址是X-32。
任务1-4
task1_4.asm
task1_4调试到line17结束、line19之前观察寄存器DS, CS, SS值的截图

① 在debug中将执行到line9结束、line11之前,记录此时:寄存器(DS) = 076C, 寄存器(SS) = 076E, 寄存器(CS) = 076A
② 假设程序加载后,code段的段地址是X,则,data段的段地址是X+32, stack的段地址是X+64。
任务1-5
基于上述四个实验任务的实践、观察,总结并回答:
① 对于如下定义的段,程序加载后,实际分配给该段的内存空间大小是 向上取整[N/16]*16。
② 如果将程序task1_1.asm, task1_2.asm, task1_3.asm, task1_4.asm中,伪指令 end start 改成end , 哪一个程序仍然可以
正确执行。结合实践观察得到的结论,分析、说明原因。
能像原来一样正确执行的程序只有task1_4.asm。
end start,这样end除了可以通知编译器程序结束之外,还能通知编译器程序的入口在什么地方,即前面从start:后的程
序开始。end start 改成end后,debug无法找到程序入口,就会从第一个段开始执行,只有task1_4一开始就是代码段,可以
正确执行。
实验任务2
汇编源代码
运行结果截图
实验任务3
逻辑段data1, data2, data3对应的内存空间数据原始值的debug命令和截图

依次相加之后,查看逻辑段data1, data2, data3对应的内存空间数据原始值的debug命令和截图

实验任务4

在debug中加载、反汇编、调试截图

在程序退出前,使用d命令查看数据段data2对应的内存空间的截图

实验任务5

运行结果截图

使用debug工具对程序进行调试,使用g命令一次性执行到程序返回前

修改line4里5个字节单元的值 db 2,3,4,5,6 --> 改成:db 5 dup(2)
1.源代码中line19的作用是?
dfh转化为二进制为11011111,通过按位与的方式,把小写字母转换为大写。
2.源代码中data段line4的字节数据的用途是?
源代码中data段line4的字节数据作用是设置五种不同的颜色。
实验任务6

在debug中加载、反汇编、调试截图

在程序退出前,使用d命令查看数据段data对应的内存空间的截图

实验任务7


查看table段原始数据信息截图

在debug中运行到程序退出之前,使用d命令查看table段对应的内存空间的截图

信息按要求结构化地写入到指定内存

浙公网安备 33010602011771号