博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实验五:编写、调试具有多个段的程序
阅读量:5094 次
发布时间:2019-06-13

本文共 1423 字,大约阅读时间需要 4 分钟。

任务一:

(1)将任务一代码写入记事本并保存于masm文件并在masm环境下生成可执行文件t1.exe,截图如下:

(2)在debug环境下调试t1.exe,用r命令查看各寄存器的值,截图如下:

(3)可知cs值为15f5,用u命令反汇编实验代码,可知在程序执行前,用g命令运行,再用d命令查看data段中的值,截图如下:

①CPU执行程序前,程序返回前,可知data段中的值不变。

②CPU执行程序前,程序返回前,cs=15f5,ss=15f4,ds=15f3

③设程序加载后,code段的段地址为X,则data段的段地址为:X-2,stack的段地址为:X-1

任务二:

(1)将程序代码写入记事本截图如下:

(2)在debug环境下调试t1.exe,并用r查看各寄存器的值,u命令进行反汇编,g命令执行截图如下:

①CPU执行程序,程序返回前,data段中的数据不变。

②CPU执行程序,程序返回前,cs=15F5,ss=15F4,ds=15F3。

③设程序加载后,code段的段地址为X,则data段的段地址为:X-2,stack的段地址为:X-1

④对于定义的段,如果段中的数据占N个字节,则程序加载后,这段实际占有的空间为:若N不满16个或为16字节则为一段,N满16但不满32也分配32字节

即 a=Nmod16,若a=0,则空间为 (N\16)*16,若a≠0,则空间为 (N\16+1)*16

任务三:

(1)将程序代码写入记事本截图如下:

(2)在debug环境下调试t1.exe,用r命令查看各寄存器的值,u命令反汇编,g命令执行截图如下:

①CPU执行程序,程序返回前,data段中的数据不变。

②CPU执行程序,程序返回前,cs=15F3,ss=15F7,ds=15F6。

③设程序加载后,code段的段地址为X,则data段的段地址为:X+3,stack的段地址为:X+4

任务四:

(1)分别执行三个程序看结果截图如下:

第一个程序反汇编截图:

可知u命令反汇编代码之后发现不是我们输入的代码,可知运行失败

第二个程序反汇编截图:

反汇编之后可以看到也不是我们输入的代码段,运行失败。

第三个代码反汇编截图:

可知反汇编后使我们输入的代码段,运行成功

将伪指令“end start”改为“end”后只有第三个程序可以正确执行,因为没有指明程序段入口,CPU默认从头执行,只有最后一个代码从头

执行可以不需要指明程序段入口。

任务五:

将代码补全并写入记事本截图如下:

(2)在debug环境下调试t1.exe,分别查看段c运行程序前后的值截图如下:

实现了数据依次相加

任务六:

(1)将代码补全写入记事本截图如下:

(2)在debug环境下调试t1.exe,分别查看程序运行前后段b中的值截图如下:

实现了将a段中的前八个字型数据逆序存储到b段中

总结:这一次的实验  让我了解了汇编程序中的嵌套使用,也就是多个段的结合使用,一个程序中可以放多个不同的段

也学会了  “end 标号”表示的是要让CPU从标号处开始执行,如果不加标号,程序段直接以“end”结尾则默认CPU从头开始执行

而在有些拥有多个段的程序中,不加标号,程序不能正确运行。

在CPU 程序执行前,也可以查看寄存器cs,ss,ds的值是否有逻辑关系。

 

转载于:https://www.cnblogs.com/nxdzy/p/10003979.html

你可能感兴趣的文章
D3之svg transform 与 css3 transform 区别与联系
查看>>
.NET Oject And Json
查看>>
python学习笔记__Python的安装
查看>>
iOS设置拍照retake和use按钮为中文简体
查看>>
以下内容为Stackoverflow上整理以作纪录
查看>>
工业机器人常用语言---val语言介绍
查看>>
python3的包(package)在centos中的安装地址
查看>>
(3)Deep Learning之神经网络和反向传播算法
查看>>
Java Spring boot 企业微信点餐系统
查看>>
保持长宽比 对背景图像进行修改android:scaleType="fitXY"
查看>>
python-上传下载文件
查看>>
【转】如何解决:Android中 Error generating final archive: Debug Certificate expired on 10/09/18 16:30 的错误...
查看>>
HttpClient短信接口
查看>>
echo print printf() sprintf()区别
查看>>
https阿里云证书购买与apache环境配置
查看>>
21个js 技巧收藏
查看>>
PictureBox滚动条、鼠标中轴滚动
查看>>
Codeforces 475C Kamal-ol-molk's Painting 模拟
查看>>
G-Sensor 校准标准
查看>>
338. Counting Bits
查看>>