实验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段对应的内存空间的截图

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

 

 

posted @ 2021-11-06 13:30  XU_qwe  阅读(27)  评论(0)    收藏  举报