码迷,mamicode.com
首页 > 其他好文 > 详细

实验四报告

时间:2018-11-25 22:15:09      阅读:268      评论:0      收藏:0      [点我收藏+]

标签:数据   分享   内存区域   寻址方式   本质   .com   源代码   image   依据   

20171308171  胡欣怡

一、实验目的
1. 理解和掌握寄存器间接寻址方式[bx]
2. 通过汇编指令 loop 的使用理解编程语言中循环的本质
3. 熟练掌握使用 debug 按需调试完整汇编源程序的方法
二、实验准备
1. 学习/复习第 5 章使用[bx]和 loop 实现循环的编程应用示例(教材 5.5 节,5.8 节)
2. 复习第 3 章「栈」的知识
3. 结合第 4 章课件,复习完整汇编源程序编写→汇编→连接→运行→调试的方法
三、实验内容
1. 综合使用 loop,[bx],编写完整汇编程序,实现向内存 b800:07b8 开始的连续 16 个
字单元重复填充字数据 0403H。
2. 综合使用 loop,[bx],编写完整汇编源程序,实现向内存 0:200~0:23F 依次传送数据
0~63(3FH)。
(1)必做:综合使用 loop, [bx], mov 实现
(2)选做*:利用栈的特性,综合使用 loop,push 实现(限定仅使用 8086 中已学过
指令实现)
3. 教材实验 4(3)(P121)
提示:
Tips1: 实验内容 1 和 2 本质上是一类问题,都是把数据送到一组连续的内存单元。不
同之处仅在于,实验内容 1 是将一个常数(字.数据),送到指定的一组连续的字.单元;而实
验内容 2 是将一组连续的字节..数据,送到指定的连续的字节..单元。在程序中改变偏移地址时,
要注意做不同的处理。
其中,实验内容 1 如正确编写了程序,其运行结果应当如下图所示:
Tips2: 实验内容 2,如果利用栈实现,借助 push 和 loop 实现连续入栈操作。但要注意:
① 8086 的入栈操作,是从高地址单元→低地址单元方向的;
② 8086 的入栈操作,只能以字为单元。但这里是字节数据,如何灵活处理?
Tips3: 实验内容 3,本质仍然是复制,只不过复制的是自身代码。这道填空的关键是,
如何确定复制多少字节。
Tips4:细节问题,如十六进制/十进制、循环次数、指令合法用法及其注意事项等。

四、实验结论
此部分书写内容:
1. 实验内容 1
(1)源代码
(2)将源代码程序中字数据 0403H→修改为 0441H,再次运行,截图显示运行结果。

技术分享图片

源程序为0403h

技术分享图片

经过编译和连接

技术分享图片

清屏之后编译得到结果为一排红心

将源代码程序中字数据0403H→修改为0441H

技术分享图片

更改之后的程序

技术分享图片

经过汇编和连接之后得到的结果

技术分享图片

最后的结果由红心变成了红A

2. 实验内容 2(必做部分)
(1)源代码
(2)汇编、链接无误后,灵活使用 debug 的 t 命令、g 命令、p 命令调试,用 d 命令
查看 0:200~0:23F,确认是否将 0~63 传送至此段内存区域。这部分,要求有截图。
(选做部分,如完成,也按上述要求在博客文档中撰写相应内容)

 技术分享图片

源程序如上

技术分享图片

汇编连接后

技术分享图片

使用d命令查看结果

技术分享图片

技术分享图片

遇到循环使用g命令

技术分享图片

最后使用d命令再次查看

3. 实验内容 3

(1)源代码
(2)汇编连接后,灵活使用 debug 的 t 命令、g 命令、p 命令调试,用 d 命令查看 0:200
之后的若干字节,观察是否将 mov ax, 4c00h 之前的指令复制到指定内存,这部分要求有截
图,并以文字方式说明空白处填写依据。

 技术分享图片

 书上的源程序经填空

技术分享图片

经过编译连接确认

技术分享图片

使用r命令显示寄存器状态,显示整个程序代码所占字节数。这里我们发现CX= 001CH。

使用u命令显示汇编指令,求出需要复制的机器码字节数。

我们发现mov ax,4cooH/int 21H它们共占用了5个字节。所以在本实验中我们需要复制的代码字节数是001CH-0005H=0017H==23个字节,故cx计数寄存器赋值为23或17H。

技术分享图片

所以正确的程序是这样的

技术分享图片

经过汇编和连接

技术分享图片

对其进行反汇编

技术分享图片

使用t命令遇到循环就是用g命令

技术分享图片

查看0:200的内容

技术分享图片

对0:200的内容进行反汇编发现已经成功复制

 

总结与体会

首先,指令全部都是二进制表示。其次,cs:ip表示cpu执行指令的地址。所以,只要mov ax,cs 就能把该程序在内存里的首地址mov到ax了。

 

实验四报告

标签:数据   分享   内存区域   寻址方式   本质   .com   源代码   image   依据   

原文地址:https://www.cnblogs.com/jinevol/p/10017453.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!