当前位置:
文档之家› 电子科技大学软件开发环境实验报告
电子科技大学软件开发环境实验报告
循环体指令代码
.....................
..................... jmp xxx 跳转到 B 处执行
}
C:
代码清单 10
while循环的代码示例: int _tmain(int argc, _TCHAR* argv[]) {
int i = 0; int j = 0; while(i<10) {
eax,dword ptr [ebp-8]
0019139F add
eax,1
001913A2 mov
dword ptr [ebp-8],eax
i++;
001913A5 mov
eax,dword ptr [ebp-14h]
001913A8 add
eax,1
001913AB mov
dword ptr [ebp-14h],eax
C:\> –c uncompress_filename compress_filename 上述命令中,是程序名,-c 表示要进行压缩。uncompress_filename 是要压缩的文件名, 可以包含路径信息,而 compress_filename 是压缩之后的文件名,同样可以包含路径信息。用 户可以通过如下命令进行解压: C:\> –u compress_filename uncompress_filename 上述命令中,-u 表示要执行解压命令。compress_filename 是要解压的文件名,可以包含 路径信息;uncompress_filename 就是解压后所得到的文件,同样可以包含路径信息。 提示:在实现程序时,需要考虑如何存储 huffman 树或者编码表或者词频表等等。 本实验要求实现两个版本的程序,一是 C 语言版本的,二是 C++版本的。对这两个版本的 要求如下: 对于每一个版本的程序,需要在实验报告中给出函数调用关系图、流程处理关系图以
00251395处 mov
dword ptr [ebp-14h],0 将[ebp-14]设置为0,即将j设置为0;
在地址0025139C处 cmp
dword ptr [ebp-8],0Ah ,将i的值与10做比较,在地址002513A0 处
jge
002513B6 如果i小于10,则继续向下执行,若i>=10 则跳转到 002513B6 处执行(即返回语句),若继续向下执
及它们的文字说明等内容; 对于每一个版本的程序,都需要在实验报告中给出源代码。为了便于查重,代码中注
释的比例要占到总行数的 20%; C++版本的程序,需要给出类关系图。 实验报告的评分标准,包括以下几个方面: 实验报告是否规范 实验报告内容是否详实 实验报告中是否包含了函数调用图、流程图、类图以及它们的文字说明 实验报告中的代码注释是否达到要求 程序是否正确无误 程序是否严格按照分函数的原则编写 C++版本的程序类关系的耦合度如何
电子科技大学
实验报告
学生姓名:郭小明 一、实验室名称: 主楼 A2-412
学 号:
二、实验项目名称:软件开发环境实验三:函数调用栈帧布局
三、实验原理: 编译器对函数调用的支持,通常情况下都会使用栈。例如使用栈传递传参,
保存函数返回地址。另外,局部变量也通常位于栈上。Visual Studio 2008 为 了防止栈上局部数组溢出,又采取了特殊的保护措施。本实验就需要通过观 察栈帧布局,来了解这些保护措施。本实验的环境是 Visual Studio 2008。
while()
A : cmp 操作数 1 操作数 2 while 循环结束条件做比较
jxx B
若不符合条件则,跳转到 B 处继续执行,若符合,则顺序执行循环体
{
循环体指令
....................................
....................................
....................................
} jmp A 跳转到 A 处继续执行 B:....................................
代码清单 11
int _tmain(int argc, _TCHAR* argv[])
{
int j = 0;
int i = 0;
Huffman 编码的基本原理
本实验要求使用 Huffman 编码算法,实现对文件的压缩和解压。因此,我们首先介绍 huffman 的编码算法。
Huffman 编码是一种可变长编码方式,是由美国数学家 David Huffman 创立的,是二叉 树的一种特殊转化形式。编码的基本原理是:将使用次数多的代码转换成长度较短的编码,而 使用次数少的代码则可以使用较长的编码,并且保持编码的唯一可解性。
行,则002513A2 002513A5 002513A8 三地址处的指令对j进行加一操作,002513AB
002513AE 002513B1 对i进行加一操作;在 002513B4 jmp
0025139C 跳转回cmp的指令处继续执行。
通过代码清单10的反汇编结果 ,while语句的反汇编代码规律
程序实现是否考虑了大文件情况
六、实验器材(设备、元器件):
PC 机,vs 2008 软件平台。
七、实验数据及结果分析:
代码见附件。
huffmanForC
文件中函数列表如下:
......... ........... #sum_bit##count# */
void freToFile(int code[],HCode *HC)
指导书试验原理部分较多,在这里就不做粘贴复制了。
四、实验目的:
本实验总体目的是,通过使用 huffman 编码算法从而实现文件的压缩和解压,以达到使学 生掌握并灵活运用分割函数的三项原则。
五、实验内容:
本实验要求实现一个 exe 程序。这个程序按照 huffman 编码方式,同时包含了压缩功能和 解压功能。用户通过以下命令进行压缩:
..........................................
..........................................
}while( );
cmp 操作数1 操作数2 do------while循环 条件判断 语句
jxx A 如果符合条件的话,就跳转到A处的循环体部分开始执行,否则继续向下执行
002513A0 jge
002513B6
{
j++;
002513A2 mov
eax,dword ptr [ebp-14h]
002513A5 add
eax,1
002513A8 mov
dword ptr [ebp-14h],eax
i++;
002513AB mov
eax,dword ptr [ebp-8]
002513AE add
设置为0. 在地址0019139C 0019139F 001913A2 三个地址处执行j增1的操作,在001913A5 001913A8 001913AB 三个地址处
执行i增1的操作。在地址001913AE 处执行循环条件比较指令
cmp
dword ptr [ebp-14h],0Ah
在接下来的001913B2 jl
CH类onutfrfomla类nTree.jm.类..p.......HC.整.uo.f.df.个m.e..a类.多.n.N.分.o..d.支.ec.c.输agf类r流furlceerWeo入n输etaFmHc程Tetroeo-入iuopugHmFfm语hrfi命-uelmptcFef(sr句ma(is命a令el)_rensagf(后s令Cn)iv_lo[Tef2dr的(ile)]ee)e((指)()) 令地址 }
0019139C 这条指令当中,如果操作数1 即i 小于操作数2 即 10,就跳转到0019139C
地址处继续执行,否则向下继续执行。
do -whi码
A:..........................................
..........................................
}
while(i<10);
001913AE cmp
dword ptr [ebp-14h],0Ah
001913B2 jl
0019139C
return 0;
001913B4 xor
eax,eax
}
在代码清单11当中,在地址0019138E处将[ebp-8] 设置为0,即将j设置为0,在地址00191395处,将00191395设置为0,即将i
电子科技大学
实验报告
学生姓名:郭小明
学 号:
一、实验室名称: 主楼 A2-412
二、实验项目名称:
软件开发环境试验-----Huffman 编码实验
三、实验原理:
分割函数的三项原则
分割函数的三项原则包括:与其写注释,不如写函数;重复就是罪恶;函数不要超过 50 行至 70 行。
关于分割函数三原则的具体含义,请见教材和课堂教学 PPT 关于电话本的内容。这里不再 赘述。
四、实验目的:
本实验总体目的是,通过使用 Visual Studio 2008 查看函数调用时参数、局部变量等在 栈上的分布情况,以达到掌握函数调用时栈帧布局的目的。
六、实验器材(设备、元器件):
PC 机,VS 2008 软件平台。
七、实验步骤:
在源文件中,编写如下代码。
在源文件中,编写如下代码。 void f() { } int main() {
for(int i = 0;i<10;i++) {