Bomblab实验报告

Bomblab实验报告
Bomblab实验报告

课程实验报告

课程名称:计算机系统原理实验

实验项目名称: BombLab 专业班级:计科1501 姓名:马子垚

学号: 201508010114 完成时间: 2017 年 4 月 19 日

实验目的

理解汇编语言,学会使用调试器

实验原理

二进制炸弹是作为一个目标代码文件提供给学生们的程序,运行时,它提示用户输入6个不同的字符串。如果其中任何一个不正确,炸弹就会“爆炸”:打印出一条错误信息。学生通过反汇编和逆向工程来确定是哪六个字符串,从而解除他们各自炸弹的雷管。

实验步骤及体会

一、实验准备

1、首先,由于虚拟机操作系统与windows系统相互独立,所

以首先将Bomb.c及其相关文件存至百度云盘,然后在

ubantu操作系统内下载至文件系统目录下的下载文件夹

里面:

2、输入./bomb试运行bomb.c文件时会提示权限不够:

所以需要输入chmod+x+文件名的命令于改变文件或目录

的访问权限。用它控制文件或目录的访问权限。在经过操

作之后,获得了权限,程序可以正常运行了:

3、由于bomb.c文件并没有蕴含许多能破解的信息,所以需

要将其进行反汇编,详细操作如下:

输入objdump –d bomb >bomb.txt将汇编代码输出到自

动生成一个bomb.txt的文件里面,方便我们查看与分析

代码:

二、具体实验步骤及其分析

试查看导出的bomb.txt,我发现总的文本里面分为很多段,其中就有Phase_1~Phase_6、Phase_defuse、Phase_secret以及其他相关函数的代码,所以我猜测每一段Phase代码就是我们需要破解的关卡,所以我将它们分别导出新建text文件,逐段分析。

Phase_1及其破解过程:

知识点:string,函数调用,栈

反汇编代码及其分析:

08048f61 :

8048f61: 55 push %ebp

//压栈 ebp为栈指针 esp为栈指针。

push指令可以理解为两个步骤:

1. subl $4 , %esp –栈底向下移一位

2. movl %ebp ,(%esp)将ebp的值存入esp中

8048f62: 89 e5 mov %esp,%ebp

//把esp赋值给ebp

8048f64: 83 ec 18 sub $0x18,%esp

//esp指针下移0x18个字节

8048f67: c7 44 24 04 5c a1 04 movl $0x804a15c,0x4(%esp)

//取0x804a15c处的内容存入*(%esp+4)

//前一段总的分析:初始化栈,push是压栈指令,ebp寄存器中的内容是栈底指针。esp寄存器里面存的是栈顶地址。通过sub指令,将栈顶固定在第十八个存储单元里面。字符串的内存地址为0804a15c,四个字节。一个存储单元存放8个bit两个十六进制数字,栈顶及后三个单元存栈顶地址。故用mov指令将字符串地址存在栈顶后的第四个字节处。

8048f6e: 08

8048f6f: 8b 45 08 mov 0x8(%ebp),%eax

//取用户输入的内容存入%ebp

8048f72: 89 04 24 mov %eax,(%esp)

//eax的值赋值给*esp

8048f75: e8 31 00 00 00 call 8048fab

//调用字符串比较函数,string_not_equal就提示需要比较两个字符串,通过gcc 函数调用规范知道压入堆栈的两个参数分别为输入字符串与程序内部字符串。函数的时候,必须返回%eax为0,而这个函数的作用就是判断字符串是否相等。

8048f7a: 85 c0 test %eax,%eax

// test执行的就是and的指令,不会保存and执行的结果,而是根据and的结果设置flags 寄存器的各种标志。

8048f7c: 74 05 je 8048f83

// Je指令:当ZF等于零的时候跳转,也就是相等的时候跳转。判断%eax是否为0,为0跳转,不为0引爆

8048f7e: e8 4e 01 00 00 call 80490d1

8048f83: c9 leave

//为结束函数做准备

8048f84: c3 ret

//返回。ret:不带任何参数时,用于在子程序的结束位置,被调用的子程序必须有ret指令,否则调用没有ret指令的子程序会导致自陷,子程序执行完之后处于失控状态。带参数ret n 表示子程序返回主程序的同时,堆栈弹出n个字节(栈顶指针减n)

具体操作:

读取0x804a15c内存的字符串(密码),并设置断点。

成功读取到字符串,作为密码输入:

第一关成功破解

程序流程:

1、取内存地址0x8049a04处的内容;

2、取用户输入的内容(即密码);

3、比较两者的值,相等则%eax置为0,进入下一关,不相等则调用引爆程序引爆炸弹。

Phase_2及其破解过程:

知识点:循环语句,数组

08048d6a :

8048d6a: 55 push %ebp

8048d6b: 89 e5 mov %esp,%ebp

8048d6d: 56 push %esi

8048d6e: 53 push %ebx

8048d6f: 83 ec 30 sub $0x30,%esp

8048d72: 8d 45 e0 lea -0x20(%ebp),%eax

//lea:取偏移地址将一个数的内存单元的偏移地址,送入寄存器中存储,与mov 不同的是mov是将该数当作一个偏移地址存入寄存器,没有寻址的功能。

8048d75: 89 44 24 04 mov %eax,0x4(%esp)

//取用户输入的内容,存入%ebp

8048d79: 8b 45 08 mov 0x8(%ebp),%eax

8048d7c: 89 04 24 mov %eax,(%esp)

//前面几行均为初始化栈操作

8048d7f: e8 87 03 00 00 call 804910b

//调用函数read_six_numbers(说明密码是6个数字)

8048d84: 83 7d e0 00 cmpl $0x0,-0x20(%ebp)

//比较第一个输入的的数是否为0

8048d88: 75 06 jne 8048d90

//若不为0(jne看出)则跳转下一步(爆炸)

//比较第二个输入的的数是否为1

8048d8a: 83 7d e4 01 cmpl $0x1,-0x1c(%ebp)

//若为1(je)则跳转下一步(8048d95)

8048d8e: 74 05 je 8048d95

8048d90: e8 3c 03 00 00 call 80490d1

8048d95: 8d 5d e8 lea -0x18(%ebp),%ebx

8048d98: 8d 75 f8 lea -0x8(%ebp),%esi

8048d9b: 8b 43 fc mov -0x4(%ebx),%eax

//下一个数必须是前两个数之和

8048d9e: 03 43 f8 add -0x8(%ebx),%eax

8048da1: 39 03 cmp %eax,(%ebx)

//若为前两个数之和则跳转下一步(8048daa),否则爆炸

8048da3: 74 05 je 8048daa

8048da5: e8 27 03 00 00 call 80490d1

8048daa: 83 c3 04 add $0x4,%ebx

8048dad: 39 f3 cmp %esi,%ebx

//回到8048d9b,相当于一个循环, esi和edx都是地址寄存器,首先将两个地址比较,当他们相同的时候,就一直向下,否则跳转。

8048daf: 75 ea jne 8048d9b

8048db1: 83 c4 30 add $0x30,%esp

8048db4: 5b pop %ebx

8048db5: 5e pop %esi

8048db6: 5d pop %ebp

8048db7: c3 ret

总体上看,这一关让我们输入的是以0为首项的Fibonacc数列。

密码: 0 1 1 2 3 5

故在第一个的基础上:

程序流程:

1.读取用户输入内容(为6个数字);

2.判断输入的第一个值是否为0,不是则引爆炸弹;

3.判断输入的第一个值是否为1,不是则引爆炸弹;

3.做一个6次循环,判断后一个数是否等于前两个数之和,不是则引爆炸弹;

4.六个数字判断相等结束后,进入下一关

Phase_3及其破解过程:

知识点:switch语句

08048ea1 :

8048ea1: 55 push %ebp

8048ea2: 89 e5 mov %esp,%ebp

8048ea4: 83 ec 28 sub $0x28,%esp

//初始化栈的操作

8048ea7: 8d 45 f0 lea -0x10(%ebp),%eax

//用户输入的参数2存在*(%ebp-10)

8048eaa: 89 44 24 0c mov %eax,0xc(%esp)

//用户输入的参数1存在*(%ebp-c)

8048eae: 8d 45 f4 lea -0xc(%ebp),%eax

8048eb1: 89 44 24 08 mov %eax,0x8(%esp)

//取出地址0x804a23e中的内容

8048eb5: c7 44 24 04 3e a2 04 movl $0x804a23e,0x4(%esp)

8048ebc: 08

8048ebd: 8b 45 08 mov 0x8(%ebp),%eax

8048ec0: 89 04 24 mov %eax,(%esp)

8048ec3: e8 78 f9 ff ff call 8048840 <__isoc99_sscanf@plt>

//调用sscanf函数,传入输入参数,scanf函数调用之后可能导致eax里面的保存的数据发生改变。

8048ec8: 83 f8 01 cmp $0x1,%eax

//scanf读入数据流之后,%eax寄存的是读入数据的个数。

8048ecb: 7f 05 jg 8048ed2

8048ecd: e8 ff 01 00 00 call 80490d1

8048ed2: 83 7d f4 07 cmpl $0x7,-0xc(%ebp)

//必须-0xc(%ebp)的值小于7,否则爆炸

8048ed6: 77 6b ja 8048f43

8048ed8: 8b 45 f4 mov -0xc(%ebp),%eax

//相当于switch(a)

8048edb: ff 24 85 a0 a1 04 08 jmp *0x804a1a0(,%eax,4)

//跳转到以地址*0x804a1a0为基址的跳转表中

8048ee2: b8 00 00 00 00 mov $0x0,%eax

8048ee7: eb 53 jmp 8048f3c

8048ee9: b8 00 00 00 00 mov $0x0,%eax

8048eee: 66 90 xchg %ax,%ax

8048ef0: eb 45 jmp 8048f37

8048ef2: b8 00 00 00 00 mov $0x0,%eax

8048ef7: eb 39 jmp 8048f32 8048ef9: b8 00 00 00 00 mov $0x0,%eax

8048efe: 66 90 xchg %ax,%ax

8048f00: eb 2b jmp 8048f2d 8048f02: b8 00 00 00 00 mov $0x0,%eax

8048f07: eb 1f jmp 8048f28 8048f09: b8 00 00 00 00 mov $0x0,%eax

8048f0e: 66 90 xchg %ax,%ax

8048f10: eb 11 jmp 8048f23 8048f12: b8 14 03 00 00 mov $0x314,%eax

8048f17: eb 05 jmp 8048f1e 8048f19: b8 00 00 00 00 mov $0x0,%eax

8048f1e: 2d 5a 03 00 00 sub $0x35a,%eax

8048f23: 05 ef 02 00 00 add $0x2ef,%eax

8048f28: 2d 16 02 00 00 sub $0x216,%eax

8048f2d: 05 16 02 00 00 add $0x216,%eax

8048f32: 2d 16 02 00 00 sub $0x216,%eax

8048f37: 05 16 02 00 00 add $0x216,%eax

8048f3c: 2d 16 02 00 00 sub $0x216,%eax

8048f41: eb 0a jmp 8048f4d 8048f43: e8 89 01 00 00 call 80490d1 8048f48: b8 00 00 00 00 mov $0x0,%eax

//输入的第一个数字必须小于5,否则爆炸

8048f4d: 83 7d f4 05 cmpl $0x5,-0xc(%ebp)

8048f51: 7f 05 jg 8048f58 //表示输入的第二个数字必须等于第一个数经过数次运算的结果

8048f53: 3b 45 f0 cmp -0x10(%ebp),%eax

//成功跳出

8048f56: 74 05 je 8048f5d 8048f58: e8 74 01 00 00 call 80490d1 8048f5d: c9 leave

8048f5e: 66 90 xchg %ax,%ax

8048f60: c3 ret

帧堆栈数据记录表:

具体分析:

由movl $0x804a23e,0x4(%esp),用gdb查看0x804a23e的值

发现这个应该是要求输入两个数字

jmp *0x804a1a0(,%eax,4)

首先,看到这个语句不知道是什么意思,搜索也搜索不到这段地址。后来通过百度,发现这是一个基于跳转表的switch语句的汇编描述,后来决定自己编写一个switch语句去运行,理解了switch语句在汇编中的表达方式。

①当第一个数输入0时去查看*0x804a1a0+4*0=*0x804a1a0的值

所以会跳转到0x8048f12那行代码中

则后面的运算为0x(314-35a+2ef-216).转换为十进制为147。故输入0 147

得到结果(接第二个炸弹)

同理:

②输入1

运算得到1 -641

③输入2

运算得到2 217(运行结果略)

④输入3

运算得到3 534(运行结果略)

⑤输入4

运算得到4 0(运行结果略)

程序流程:

1.读取输入参数1和参数2,调用ssanf函数传入两个参数;

2.比较参数1与7的大小,小于等于7继续,大于7引爆;

3.根据参数1的值来搜索跳转地址,计算得到最终的%eax;

4.比较参数1与5的大小,小于等于5继续,大于5引爆;

5.比较参数2与计算得到的%eax是否相等,相等则进入下一关,不相等则引爆。Phase_4及其破解过程:

知识点:递归

08048e2e :

8048e2e: 55 push %ebp

8048e2f: 89 e5 mov %esp,%ebp

8048e31: 83 ec 28 sub $0x28,%esp

8048e34: 8d 45 f0 lea -0x10(%ebp),%eax

8048e37: 89 44 24 0c mov %eax,0xc(%esp)

8048e3b: 8d 45 f4 lea -0xc(%ebp),%eax

8048e3e: 89 44 24 08 mov %eax,0x8(%esp)

8048e42: c7 44 24 04 3e a2 04 movl $0x804a23e,0x4(%esp)

8048e49: 08

8048e4a: 8b 45 08 mov 0x8(%ebp),%eax

8048e4d: 89 04 24 mov %eax,(%esp)

//调用sscanf函数,传入输入参数

8048e50: e8 eb f9 ff ff call 8048840 <__isoc99_sscanf@plt>

8048e55: 83 f8 02 cmp $0x2,%eax

//输入的为两个数据,否则引爆

8048e58: 75 0c jne 8048e66

8048e5a: 8b 45 f4 mov -0xc(%ebp),%eax

8048e5d: 85 c0 test %eax,%eax

//第一个数字为负数则跳转至爆炸

8048e5f: 78 05 js 8048e66

8048e61: 83 f8 0e cmp $0xe,%eax

//第一个数字必须小于14则跳转,否则继续运行至爆炸

8048e64: 7e 05 jle 8048e6b

8048e66: e8 66 02 00 00 call 80490d1

8048e6b: c7 44 24 08 0e 00 00 movl $0xe,0x8(%esp)

8048e72: 00

8048e73: c7 44 24 04 00 00 00 movl $0x0,0x4(%esp)

8048e7a: 00

8048e7b: 8b 45 f4 mov -0xc(%ebp),%eax

8048e7e: 89 04 24 mov %eax,(%esp)

//调用func4函数

8048e81: e8 da fc ff ff call 8048b60

//当phase_4调用func4时,phase_4中的返回地址被压入栈中,形成Phase4的栈帧的末尾。Func4从保存栈指针的值开始。

8048e86: 83 f8 01 cmp $0x1,%eax

8048e89: 75 06 jne 8048e91

8048e8b: 83 7d f0 01 cmpl $0x1,-0x10(%ebp)

//第二个数不为1则跳转8048e91(爆炸)

//为1则成功跳出

8048e8f: 74 0c je 8048e9d

8048e91: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi

8048e98: e8 34 02 00 00 call 80490d1

8048e9d: c9 leave

8048e9e: 66 90 xchg %ax,%ax

8048ea0: c3 ret

与之前一样由movl $0x804a23e,0x4(%esp)句来得到要求,要求输入两个数字

分析题目设要求输入的两个数字为x,y,则0<=x<14,y=1.

调用func4函数,故查看func4的代码:

08048b60 :

8048b60: 55 push %ebp

8048b61: 89 e5 mov %esp,%ebp

8048b63: 83 ec 18 sub $0x18,%esp

8048b66: 89 5d f8 mov %ebx,-0x8(%ebp)

8048b69: 89 75 fc mov %esi,-0x4(%ebp)

//%ebx、%esi是被调用者保存寄存器,func4函数在使用这些寄存器的值之前,必须把他们保存到栈中,并且在返回前回复他们,在本题中保存的这些值没有实际用途。

8048b6c: 8b 55 08 mov 0x8(%ebp),%edx

8048b6f: 8b 45 0c mov 0xc(%ebp),%eax

8048b72: 8b 5d 10 mov 0x10(%ebp),%ebx

8048b75: 89 d9 mov %ebx,%ecx

8048b77: 29 c1 sub %eax,%ecx

8048b79: 89 ce mov %ecx,%esi

// shr是逻辑右移指令

8048b7b: c1 ee 1f shr $0x1f,%esi

8048b7e: 8d 0c 0e lea (%esi,%ecx,1),%ecx

8048b81: d1 f9 sar %ecx

//sar是算数右移指令,只移位一位,算术右移补最高位

8048b83: 01 c1 add %eax,%ecx

8048b85: 39 d1 cmp %edx,%ecx

8048b87: 7e 17 jle 8048ba0

8048b89: 83 e9 01 sub $0x1,%ecx

8048b8c: 89 4c 24 08 mov %ecx,0x8(%esp)

8048b90: 89 44 24 04 mov %eax,0x4(%esp)

8048b94: 89 14 24 mov %edx,(%esp)

8048b97: e8 c4 ff ff ff call 8048b60

8048b9c: 01 c0 add %eax,%eax

8048b9e: eb 20 jmp 8048bc0

8048ba0: b8 00 00 00 00 mov $0x0,%eax

8048ba5: 39 d1 cmp %edx,%ecx

8048ba7: 7d 17 jge 8048bc0

8048ba9: 89 5c 24 08 mov %ebx,0x8(%esp)

8048bad: 83 c1 01 add $0x1,%ecx

8048bb0: 89 4c 24 04 mov %ecx,0x4(%esp)

8048bb4: 89 14 24 mov %edx,(%esp)

//递归调用函数func4

8048bb7: e8 a4 ff ff ff call 8048b60

8048bbc: 8d 44 00 01 lea 0x1(%eax,%eax,1),%eax

8048bc0: 8b 5d f8 mov -0x8(%ebp),%ebx

8048bc3: 8b 75 fc mov -0x4(%ebp),%esi

8048bc6: 89 ec mov %ebp,%esp

8048bc8: 5d pop %ebp

8048bc9: c3 ret

帧堆栈数据记录表:

Phase_4:

Fun4:

第一次调用fun4(),edx为输入的x值,eax=0,ebx=14;根据整个fun4()函数,当x<=7时,调换ebx与esi的值,返回到第四关中,eax!=1,直接跳转最后爆炸。所以,x>7。当输入为8,ecx=7减去1变为6,然后自己调用自己,即为递归函数,此时新的edx=8不变,eax=0不变,ebx=6。根据跟随代入法,最后可以总结成C语言代码:

分析过程:

转化成的C代码:

将机器语言转化为C代码我们可以更直观的来判断和推导未知数的值,的出的结论是这是一个二分法求值。当且仅当下端和中值相等的时候才退出递归过程,只可能出现在上半区,这题有多解。

由此可见,当输入8 1或者9 1或者11 1时,可避开炸弹。

主程序流程:

1.读取参数,调用sscanf函数传入参数;

2.比较输入参数与0的大小,小于等于则引爆;

3.把输入参数传入函数func4,并调用函数func4;

4.若第二个数等于1,则返回,进入下一关,否则引爆炸弹。

Phase_5及其破解过程:

知识点:循环

08048db8 :

8048db8: 55 push %ebp

8048db9: 89 e5 mov %esp,%ebp

8048dbb: 56 push %esi

8048dbc: 53 push %ebx

8048dbd: 83 ec 20 sub $0x20,%esp

8048dc0: 8d 45 f0 lea -0x10(%ebp),%eax

//第二个数

8048dc3: 89 44 24 0c mov %eax,0xc(%esp)

8048dc7: 8d 45 f4 lea -0xc(%ebp),%eax

//第一个数

8048dca: 89 44 24 08 mov %eax,0x8(%esp)

8048dce: c7 44 24 04 3e a2 04 movl $0x804a23e,0x4(%esp)

8048dd5: 08

8048dd6: 8b 45 08 mov 0x8(%ebp),%eax

8048dd9: 89 04 24 mov %eax,(%esp)

8048ddc: e8 5f fa ff ff call 8048840 <__isoc99_sscanf@plt>

//输入数据多于1组,否则引爆

8048de1: 83 f8 01 cmp $0x1,%eax

8048de4: 7f 05 jg 8048deb

8048de6: e8 e6 02 00 00 call 80490d1

8048deb: 8b 45 f4 mov -0xc(%ebp),%eax

//将%eax中的数字取后4位,前面全部用0代替,推导得出后四位必须是1001,所以这题具有多解。

8048dee: 83 e0 0f and $0xf,%eax

8048df1: 89 45 f4 mov %eax,-0xc(%ebp)

//第一个数二进制后四位不能为(1111)2,否则引爆。

8048df4: 83 f8 0f cmp $0xf,%eax

8048df7: 74 29 je 8048e22

8048df9: b9 00 00 00 00 mov $0x0,%ecx

8048dfe: ba 00 00 00 00 mov $0x0,%edx

8048e03: bb c0 a1 04 08 mov $0x804a1c0,%ebx

//以下五行为一个for循环语句

8048e08: 83 c2 01 add $0x1,%edx

//%ebx+4赋值给%edx

8048e0b: 8b 04 83 mov (%ebx,%eax,4),%eax

8048e0e: 01 c1 add %eax,%ecx

8048e10: 83 f8 0f cmp $0xf,%eax

8048e13: 75 f3 jne 8048e08

8048e15: 89 45 f4 mov %eax,-0xc(%ebp)

//上述的for循环要循环15次

8048e18: 83 fa 0f cmp $0xf,%edx

//否则爆炸

8048e1b: 75 05 jne 8048e22

8048e1d: 39 4d f0 cmp %ecx,-0x10(%ebp)

//确定第二个数的值

8048e20: 74 05 je 8048e27

8048e22: e8 aa 02 00 00 call 80490d1

8048e27: 83 c4 20 add $0x20,%esp

8048e2a: 5b pop %ebx

8048e2b: 5e pop %esi

8048e2c: 5d pop %ebp

8048e2d: c3 ret

帧堆栈数据记录表:

与之前一样由movl $0x804a23e,0x4(%esp)句来得到要求,要求输入两个数字

由mov $0x804a1c0,%ebx找到跳转指令,循环十五次

将这个for循环写出:

设i在%edx中,数组a[16]在%ebx中,n在%eax中,sum在%ecx中。sum=0;

for(i=1;n=15;i++)

{

n=a[n];

sum+=n;

推出循环为:

5→12→3→7→11→13→9→4→8→0→10→1→2→14→6→15

由于eax=输入的第一个数&0xf,所以,第一个数可以是5,也可以是21,37,53等等。而第二个数需要等于循环结束后的eax的总和:

12+3+7+11+13+9+4+8+0+10+1+2+14+6+15=115,所以第二个数为115。

运行结果:

将eax中的数字取后4位,前面全部用0代替,推导得出后四位必须是1001,所以这题具有多解。

证明:用21(0x15)测试,测试结果为:

(前面用 5 15测试也可以通过)

可以得出,只要后四位为5,前面的无论是多少,都可以通过第五关,证明了我的猜想是正确的。

Phase_6及其破解过程:

知识点:链表及寻址

08048c89 :

8048c89: 55 push %ebp

8048c8a: 89 e5 mov %esp,%ebp

8048c8c: 57 push %edi

8048c8d: 56 push %esi

8048c8e: 53 push %ebx

8048c8f: 83 ec 5c sub $0x5c,%esp

8048c92: 8d 45 d0 lea -0x30(%ebp),%eax

8048c95: 89 44 24 04 mov %eax,0x4(%esp)

8048c99: 8b 45 08 mov 0x8(%ebp),%eax

8048c9c: 89 04 24 mov %eax,(%esp)

//又是输入六个数字

8048c9f: e8 67 04 00 00 call 804910b

8048ca4: be 00 00 00 00 mov $0x0,%esi

8048ca9: 8d 7d d0 lea -0x30(%ebp),%edi

8048cac: 8b 04 b7 mov (%edi,%esi,4),%eax

//eax--

8048caf: 83 e8 01 sub $0x1,%eax

//eax小于等于5跳过炸弹,即第esi+1个数小于等于6

8048cb2: 83 f8 05 cmp $0x5,%eax

8048cb5: 76 05 jbe 8048cbc 8048cb7: e8 15 04 00 00 call 80490d1 8048cbc: 83 c6 01 add $0x1,%esi

//esi不等于6时不跳转。等于6时跳转至0x8048ce6

8048cbf: 83 fe 06 cmp $0x6,%esi

8048cc2: 74 22 je 8048ce6 //第esi+1个数给ebx

8048cc4: 8d 1c b7 lea (%edi,%esi,4),%ebx

8048cc7: 89 75 b4 mov %esi,-0x4c(%ebp)

//第esi个数给eax。开始内层for循环

8048cca: 8b 44 b7 fc mov -0x4(%edi,%esi,4),%eax 8048cce: 3b 03 cmp (%ebx),%eax

//若eax和ebx不相等则跳过炸弹

8048cd0: 75 05 jne 8048cd7 8048cd2: e8 fa 03 00 00 call 80490d1 8048cd7: 83 45 b4 01 addl $0x1,-0x4c(%ebp)

8048cdb: 83 c3 04 add $0x4,%ebx

//小于等于5时跳转,即能循环6-esi次

8048cde: 83 7d b4 05 cmpl $0x5,-0x4c(%ebp)

8048ce2: 7e e6 jle 8048cca 8048ce4: eb c6 jmp 8048cac 8048ce6: bb 00 00 00 00 mov $0x0,%ebx

8048ceb: 8d 7d d0 lea -0x30(%ebp),%edi

8048cee: eb 16 jmp 8048d06 8048cf0: 8b 52 08 mov 0x8(%edx),%edx

8048cf3: 83 c0 01 add $0x1,%eax

8048cf6: 39 c8 cmp %ecx,%eax

8048cf8: 75 f6 jne 8048cf0 8048cfa: 89 54 b5 b8 mov %edx,-0x48(%ebp,%esi,4) 8048cfe: 83 c3 01 add $0x1,%ebx

8048d01: 83 fb 06 cmp $0x6,%ebx

8048d04: 74 16 je 8048d1c 8048d06: 89 de mov %ebx,%esi

8048d08: 8b 0c 9f mov (%edi,%ebx,4),%ecx

//0x804c0c4查看可知是一个链表

8048d0b: ba c4 c0 04 08 mov $0x804c0c4,%edx

8048d10: b8 01 00 00 00 mov $0x1,%eax

8048d15: 83 f9 01 cmp $0x1,%ecx

8048d18: 7f d6 jg 8048cf0 8048d1a: eb de jmp 8048cfa 8048d1c: 8b 5d b8 mov -0x48(%ebp),%ebx

8048d1f: 8b 45 bc mov -0x44(%ebp),%eax

8048d22: 89 43 08 mov %eax,0x8(%ebx)

8048d25: 8b 55 c0 mov -0x40(%ebp),%edx

8048d28: 89 50 08 mov %edx,0x8(%eax)

8048d2b: 8b 45 c4 mov -0x3c(%ebp),%eax

8048d2e: 89 42 08 mov %eax,0x8(%edx)

8048d31: 8b 55 c8 mov -0x38(%ebp),%edx

8048d34: 89 50 08 mov %edx,0x8(%eax)

8048d37: 8b 45 cc mov -0x34(%ebp),%eax

8048d3a: 89 42 08 mov %eax,0x8(%edx)

8048d3d: c7 40 08 00 00 00 00 movl $0x0,0x8(%eax)

8048d44: be 00 00 00 00 mov $0x0,%esi

8048d49: 8b 43 08 mov 0x8(%ebx),%eax

8048d4c: 8b 13 mov (%ebx),%edx

8048d4e: 3b 10 cmp (%eax),%edx

8048d50: 7d 05 jge 8048d57 8048d52: e8 7a 03 00 00 call 80490d1 8048d57: 8b 5b 08 mov 0x8(%ebx),%ebx

8048d5a: 83 c6 01 add $0x1,%esi

8048d5d: 83 fe 05 cmp $0x5,%esi

8048d60: 75 e7 jne 8048d49 8048d62: 83 c4 5c add $0x5c,%esp

8048d65: 5b pop %ebx

8048d66: 5e pop %esi

8048d67: 5f pop %edi

8048d68: 5d pop %ebp

8048d69: c3 ret

医疗报告生物医学仪器实验报告

数据采集综合性训练 目录 一、科研训练目的以及内容3 二、科研训练设备3 三、采集系统构成3 四、驱动程序说明5 五、程序框架6 六、代码关键算法说明7 七、实验总结及讨论8 八、专题资料总结11 参考文献17 指导教师:邹远文 材料科学与工程学院 生物医学工程专业 0843015044 王夕雨 一、科研训练目的及内容

1、科研训练目的 数据采集是仪器设计中的关键环节,涉及计算机语言、微机原理、操作系统、数字电路、嵌入式系统、数字信号处理等多门课程的内容;同时要求具备计算机编程、设备器件组装等实际操作能力。通过此项训练,能将多门课程的内容融合,加深学生对课程内容的理解,提升学生实际运用课程知识的能力; 同时为学生进入科研训练和毕业论文阶段,打下工程运用的基础。 2、科研训练内容 1、USB和BIOPAC的AD/DA、数字IO的编程(VC++)和使用 2、练习采集数据存储与管理 3、练习示波器和信号发生器 二、科研训练设备 1、计算机 2、USB数据采集卡和BIOPAC数据采集器 3、示波器和信号发生器 三、采集系统的构成 本次数据采集系统主要是USB数据采集与电脑和示波器数据采集,信号发生器用FG-275/FG-273A。 图1数据采集卡 图2信号发生器 图3示波器 USB数据采集系统的构成如下图1所示。[1]

图4、USB数据采集系统 示波器数据采集系统的构成如图5。泰克TDS3000C系列示波器拥有高达500MHz的带宽,在紧凑的电池供电的设计中提供了经济的性能,这一流行的产品系列现在配有USB主机端口和PC连接软件,同时提供了熟悉的操作和简单的导航功能,您可以用更少的时间学习和重新学习怎样使用示波器,用更多的时间完成手头的任务。[2] 图5、示波器数据采集系统 FG-275/FG-273A函数信号发生器。[3] FG-273A/-275函数信号发生器规格 方波特性: 对称性:±3%或更小(100Hz时) 上升及下降时间:最大100ns(最大输出) 正弦波特性: 失真:1%或更小(100KHz时) 三角波特性: 线性:1%或更小(100KHz时) 电源要求:100/120/220/240VAC,50/60Hz,约20VA 尺寸:240(宽)×64(高)×190(长)mm 重量:1.8kg 特点: ·扫描/函数/脉冲信号产生

实验三--单相交流调压电路实验

信息科技大学 电力电子技术实验报告 实验项目:单相交流调压电路实验 学院:自动化 专业:自动化(信息与控制系统) /学号:贾鑫玉/2012010541 班级:自控1205班 指导老师:白雪峰 学期: 2014-2015学年第一学期

实验三单相交流调压电路实验 一.实验目的 1.加深理解单相交流调压电路的工作原理。 2.加深理解交流调压感性负载时对移相围要求。 二.实验容 1.单相交流调压器带电阻性负载。 2.单相交流调压器带电阻—电感性负载。 三.实验线路及原理 本实验采用了锯齿波移相触发器。该触发器适用于双向晶闸管或两只反并联晶闸管电路的交流相位控制,具有控制方式简单的优点。 晶闸管交流调压器的主电路由两只反向晶闸管组成。 四.实验设备及仪器 1.教学实验台主控制屏 2.NMCL—33组件 3.NMEL—03组件 4.NMCL-05(A)组件或NMCL—36组件 5.二踪示波器 6.万用表 五.注意事项 在电阻电感负载时,当α

数据挖掘实验报告

《数据挖掘》Weka实验报告 姓名_学号_ 指导教师 开课学期2015 至2016 学年 2 学期完成日期2015年6月12日

1.实验目的 基于https://www.360docs.net/doc/9017744931.html,/ml/datasets/Breast+Cancer+WiscOnsin+%28Ori- ginal%29的数据,使用数据挖掘中的分类算法,运用Weka平台的基本功能对数据集进行分类,对算法结果进行性能比较,画出性能比较图,另外针对不同数量的训练集进行对比实验,并画出性能比较图训练并测试。 2.实验环境 实验采用Weka平台,数据使用来自https://www.360docs.net/doc/9017744931.html,/ml/Datasets/Br- east+Cancer+WiscOnsin+%28Original%29,主要使用其中的Breast Cancer Wisc- onsin (Original) Data Set数据。Weka是怀卡托智能分析系统的缩写,该系统由新西兰怀卡托大学开发。Weka使用Java写成的,并且限制在GNU通用公共证书的条件下发布。它可以运行于几乎所有操作平台,是一款免费的,非商业化的机器学习以及数据挖掘软件。Weka提供了一个统一界面,可结合预处理以及后处理方法,将许多不同的学习算法应用于任何所给的数据集,并评估由不同的学习方案所得出的结果。 3.实验步骤 3.1数据预处理 本实验是针对威斯康辛州(原始)的乳腺癌数据集进行分类,该表含有Sample code number(样本代码),Clump Thickness(丛厚度),Uniformity of Cell Size (均匀的细胞大小),Uniformity of Cell Shape (均匀的细胞形状),Marginal Adhesion(边际粘连),Single Epithelial Cell Size(单一的上皮细胞大小),Bare Nuclei(裸核),Bland Chromatin(平淡的染色质),Normal Nucleoli(正常的核仁),Mitoses(有丝分裂),Class(分类),其中第二项到第十项取值均为1-10,分类中2代表良性,4代表恶性。通过实验,希望能找出患乳腺癌客户各指标的分布情况。 该数据的数据属性如下: 1. Sample code number(numeric),样本代码; 2. Clump Thickness(numeric),丛厚度;

simtrade实训总结

上海杉达学院 商务流程综合实训总结 单位名称:微科电子有限公司(加盖公章)姓名:陈恩娜 学院:胜祥商学院 专业:国际经济与贸易 班级: f130219 时间: 2016.11.14

工作总结历时10天的跨专业实训圆满落幕,作为国贸专业的我们参加了企业经营的模拟实训,通过这几天的实训,我也算是了解到了企业经营的基本流程和一般模式。前三天,我们基本在忙碌企业创立的事情。我们首先要做的是公司注册登记。公司注册流程共包括名称预先登记、设立登记申请书、准备申请材料、银行开户入资、验资、前置审批、报送申请材料、工商审批发照、刻制公章、开设银行帐户、办理各项登记、股东入资证明、企业机构代码、企业税务登记、企业劳动备案、社会保险登记、企业统计备案、特殊行业备案18类。我们实训时规定了公司类型为制造型企业,开始注册资金为500万元。在实训中,我们注册的公司为微科电子有限公司,地址位于上海市陆家嘴,股东为3人。申请表提交上去后,我们得到了审批,就开始了下面的企业经营规划。我们企业经营过程共分为九个相互联系又相互独立的部门。这十个部门分别为总经办、人力资源部门、物流部门、质检部门、行政部门、营销部门、生产部门、财务部门、采购部门。总经办为CEO代理,也就是我们常说的总经理,其他分别为营销总监、生产总监、物流总监、采购总监、财务总监、采购经理、人事经理、行政主管、质检经理。这九个职位分别为十一个同学完成,我作为采购部经理也参与其中。采购部的岗位职责可归纳为:依照公司生产需要及物资采购计划,全面负责公司的物料采购和供应工作;对初次进行合作的供应商进行调查了解,根据实际掌握的资料与信息做出相应的评价判定。对于符合公司要求的,方可与之开展业务往来与合作;采购工作的开展应当做到精打细算,尽力降低公司的采购成本,避免出现浪费公司资金的情况;负责对所有与公司有业务往来的供应商或供货企业进行定期的资质评价并给出明确的评价等级。针对不同的评价等级给出相应的处理意见;完成公司领导布置的其它各项工作。各岗位要各司其职,填写经营流程表,有序的完成一年的经营。

医疗仪器设计实验报告

电子科技大学生命科学与技术学院标准实验报告 (实验)课程名称医学仪器设计 2014-2015-第1学期 电子科技大学教务处制表

电子科技大学 实验报告 学生姓名:周志洋、易杰瑞、常明、张明 学号:2011092010017、201109101019、2011091010011、2011091030016 指导教师:廖小丽 实验地点:沙河校区 实验时间:2014年12月30日 一、实验室名称:主楼西420 二、实验名称:液晶显示实验 三、实验学时:2学时 1.1 液晶显示器概述 1. 概述 日常生活中,人们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通用器件,如计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。 2.主要优势 1、显示质量高。 由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT),那样需要不断刷新亮点。 2、数字式接口。 3、体质小、重量轻。 4、功耗低。 5、辐射小。(可通过屏蔽电路解决) 1.2 LCD液晶显示器原理 1、液晶显示原理 液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,控制特定的显示区域就可以得到特定的图形。 2、液晶显示器的分类 按颜色区分:黑白显示、彩色显示。

按显示方式区分:段式、字符式、点阵式等。 按驱动方式区分:静态(Static)驱动、单纯矩阵(simple Matrix)驱动、主动矩阵(Active Matrix)驱动。 3、液晶显示器各种图形的显示原理 1)线段显示 点阵图形式液晶由M*N个显示单元组成,假设LCD显示 屏有64行,每行有128列,每8列对应1Byte(字节)的8位, 即每行有16Byte,共16*8=128个点组成,屏上64*16个显示单 元与显示RAM区1024Byte相对应,每一字节的内容与显示 屏上的亮暗相对应。 2)字符显示 每个字符都是由6*8或8*8点阵组成,既要找到和显示屏 相对应的显示RAM区的8Byte,还要使每字节的不同位置为 1,其他的为0,为1点亮,为0不亮。由此组成某个字符。 内部带字符发生器的控制器的液晶显示器,让控制器工作在文本方式,找出显示RAM对应的地址,设立光标,送上某字符对应的代码即可。 3)汉字的显示 一般采用图形的方式,首先提取汉字的点阵码,每个汉字占32Byte,找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一个字节,光标位置加1,送第二个字节······直到32Byte显示完,就可以在LCD上得到一个完整的汉字。 1.3 点阵式液晶显示器 点阵式液晶显示器简介 相对字符型液晶显示器,功能更多,步进可以显示字符数字还可以显示各种图形、曲线及汉字,并且可以实现屏幕上下左右滚动、动画、反转、闪烁等功能,用途十分广泛。 按显示点阵数分类:128W*64H、132W*32H、192W*64H、320W*240H等 12864LCD 128×64点阵液晶显示屏有三种控制器,分别是KS0107(KS0108)、T6963C和ST7920,三种控制器主要区别是:KS0107(KS0108)不带任何字库、T6963C带ASCII码,ST7920带国标二级字库(8千多个汉字)。 模块主要硬件构成

双闭环三相异步电机调压调速系统实验报告

运动控制系统专题实验 实 验 报 告 2016年5月

6.1双闭环三相异步电机调压调速系统 一.实验目的 (1)熟悉晶闸管相位控制交流调压调速系统的组成与工作原理。 (2)熟悉双闭环三相异步电机调压调速系统的基本原理。 (3)掌握绕线式异步电机转子串电阻时在调节定子电压调速时的机械特性。(4)掌握交流调压调速系统的静特性和动态特性。 熟悉交流调压系统中电流环和转速环的作用。 二.实验内容 (1)测定绕线式异步电动机转子串电阻时的人为机械特性。 (2)测定双闭环交流调压调速系统的静特性。 (3)测定双闭环交流调压调速系统的动态特性。 三.实验设备 (1)电源控制屏(NMCL-32); (2)低压控制电路及仪表(NMCL-31); (3)触发电路和晶闸管主回路(NMCL-33); (4)可调电阻(NMCL-03); (5)直流调速控制单元(NMCL-18); (6)电机导轨及测速发电机(或光电编码器); (7)直流发电机M03; (8)三相绕线式异步电机; (9)双踪示波器; (10)万用表。 四.实验原理 1.系统原理 双闭环三相异步电动机调压调速系统的主电路为三相晶闸管交流调压器(TVC)及三相绕线式异步电动机M(转子回路串电阻)。控制系统由零速封锁器(DZS)、电流调节器(ACR)、速度调节器(ASR)、电流变换器(FBC),速度变换器(FBS),触发器(GT),一组桥脉冲放大器(AP1)等组成。其系统原理图如图6-1所示。

整个调速系统采用了速度、电流两个反馈控制环。这里的速度环作用基本上与直流调速系统相同而电流环的作用则有所不同。在稳定运行情况下,电流环对电网波动仍有较大的抗扰作用,但在起动过程中电流环仅起限制最大电流的作用,不会出现最佳起动的恒流特性,也不可能是恒转矩起动。 异步电机调压调速系统结构简单,采用双闭环系统时静差率较小,且比较容易实现正,反转,反接和能耗制动。但在恒转矩负载下不能长时间低速运行,因低速运行时转差功率全部消耗在转子电阻中,使转子过热。 2.三相异步电机的调速方法 交流调速系统按转差功率的处理方式可分为三种类型。 转差功率消耗型:异步电机采用调压、变电阻等调速方式,转速越低时,转差功率的消耗越大,效率越低。 转差功率馈送型:控制绕线转子异步电机的转子电压,利用其转差功率可实现调节转速的目的,这种调节方式具有良好的调速性能和效率,如串级调速。 转差功率不变型:这种方法转差功率很小,而且不随转速变化,效率较高,列如磁极对数调速、变频调速等。 如何处理转差功率在很大程度上影响着电机调速系统的效率。 五.实验方法 双闭环交流调压调速系统主回路和控制回路如图连接,NMCL-32的“三相交流 电源”开关拨向“交流调速”。给定电位器RP1和RP2左旋到最大位置,可调电阻NMCL-03左旋到最大位置。注意:图中主回路中接入的是交流电流表和交流电压表。 VT 3 VT 1 VT 6 VT 4 VT 5 VT 2 A 交流电流表,量程为1A 图2-1 双闭环交流调压调速系统主回路G 直流电机 励磁电源 R G 直流发电机M03V TG 定子 转子NMEL-09的线绕电机起动电阻

数据挖掘实验报告(一)

数据挖掘实验报告(一) 数据预处理 姓名:李圣杰 班级:计算机1304 学号:1311610602

一、实验目的 1.学习均值平滑,中值平滑,边界值平滑的基本原理 2.掌握链表的使用方法 3.掌握文件读取的方法 二、实验设备 PC一台,dev-c++5.11 三、实验内容 数据平滑 假定用于分析的数据包含属性age。数据元组中age的值如下(按递增序):13, 15, 16, 16, 19, 20, 20, 21, 22, 22, 25, 25, 25, 25, 30, 33, 33, 35, 35, 35, 35, 36, 40, 45, 46, 52, 70。使用你所熟悉的程序设计语言进行编程,实现如下功能(要求程序具有通用性): (a) 使用按箱平均值平滑法对以上数据进行平滑,箱的深度为3。 (b) 使用按箱中值平滑法对以上数据进行平滑,箱的深度为3。 (c) 使用按箱边界值平滑法对以上数据进行平滑,箱的深度为3。 四、实验原理 使用c语言,对数据文件进行读取,存入带头节点的指针链表中,同时计数,均值求三个数的平均值,中值求中间的一个数的值,边界值将中间的数转换为离边界较近的边界值 五、实验步骤 代码 #include #include #include #define DEEP 3 #define DATAFILE "data.txt" #define VPT 10 //定义结构体 typedef struct chain{ int num; struct chain *next; }* data; //定义全局变量 data head,p,q; FILE *fp; int num,sum,count=0; int i,j; int *box; void mean(); void medain(); void boundary(); int main () { //定义头指针 head=(data)malloc(sizeof(struc t chain)); head->next=NULL; /*打开文件*/ fp=fopen(DATAFILE,"r"); if(!fp) exit(0); p=head; while(!feof(fp)){

无源医疗器械检测实验报告1-9

日期指导教师胡秀枋成绩 同组同学姓名 《无源医疗器械检测》实验报告一 物理部分 班级 姓名 学号 实验一、一次性注射针刚度检测 实验设备名称与型号 一、实验目的: 二、实验材料方法 供试品名称型号: 操作步骤:

测试人员: 记录人员: 四、操作问答题: 1.一次性使用输液、输血、注射器具的检测标准是什么? 2.说出三个注射针针管测试产品中产品标记的意义。 3.本次注射针针管的刚度检测仪器名称和测试方法。 4.说出注射针针管的刚度检测各项实验数据意义和检测结果判定方法。 实验二、一次性注射器滑动性能检测 实验设备名称与型号 一、实验目的: 二、实验材料方法 供试品名称型号: 操作步骤:

测试人员: 记录人员: 四、操作问答题: 1.本次一次性注射针滑动性能检测仪器名称和测试方法。 2.说出一次性注射针滑动性能检测各项实验数据意义和检测结果判定和计 算方法。 3.如何进行一次性注射针滑动性能检测中行程的设定? 实验三、一次性注射器器身密合性(正压)检测 实验设备名称与型号 一、实验目的: 二、实验材料方法 供试品名称型号: 操作步骤:

测试人员: 记录人员: 四、操作问答题: 1.本次一次性注射器器身密合性(正压)检测仪器名称和测试方法。 2.说出一次性注射器器身密合性(正压)检测各项实验数据意义和检测结果 判定方法。 实验四、基于电阻法原理微粒检测 实验设备名称与型号 一、实验目的: 二、实验材料方法 供试品名称型号:

操作步骤: 三、实验数据记录:输液器型号 测试人员: 记录人员: 四、操作问答题: 1.本次基于电阻法原理微粒检测仪器名称和测试方法。 2.说出基于电阻法原理微粒检测各项实验数据意义和检测结果判定方法。

数据挖掘实验报告资料

大数据理论与技术读书报告 -----K最近邻分类算法 指导老师: 陈莉 学生姓名: 李阳帆 学号: 201531467 专业: 计算机技术 日期 :2016年8月31日

摘要 数据挖掘是机器学习领域内广泛研究的知识领域,是将人工智能技术和数据库技术紧密结合,让计算机帮助人们从庞大的数据中智能地、自动地提取出有价值的知识模式,以满足人们不同应用的需要。K 近邻算法(KNN)是基于统计的分类方法,是大数据理论与分析的分类算法中比较常用的一种方法。该算法具有直观、无需先验统计知识、无师学习等特点,目前已经成为数据挖掘技术的理论和应用研究方法之一。本文主要研究了K 近邻分类算法,首先简要地介绍了数据挖掘中的各种分类算法,详细地阐述了K 近邻算法的基本原理和应用领域,最后在matlab环境里仿真实现,并对实验结果进行分析,提出了改进的方法。 关键词:K 近邻,聚类算法,权重,复杂度,准确度

1.引言 (1) 2.研究目的与意义 (1) 3.算法思想 (2) 4.算法实现 (2) 4.1 参数设置 (2) 4.2数据集 (2) 4.3实验步骤 (3) 4.4实验结果与分析 (3) 5.总结与反思 (4) 附件1 (6)

1.引言 随着数据库技术的飞速发展,人工智能领域的一个分支—— 机器学习的研究自 20 世纪 50 年代开始以来也取得了很大进展。用数据库管理系统来存储数据,用机器学习的方法来分析数据,挖掘大量数据背后的知识,这两者的结合促成了数据库中的知识发现(Knowledge Discovery in Databases,简记 KDD)的产生,也称作数据挖掘(Data Ming,简记 DM)。 数据挖掘是信息技术自然演化的结果。信息技术的发展大致可以描述为如下的过程:初期的是简单的数据收集和数据库的构造;后来发展到对数据的管理,包括:数据存储、检索以及数据库事务处理;再后来发展到对数据的分析和理解, 这时候出现了数据仓库技术和数据挖掘技术。数据挖掘是涉及数据库和人工智能等学科的一门当前相当活跃的研究领域。 数据挖掘是机器学习领域内广泛研究的知识领域,是将人工智能技术和数据库技术紧密结合,让计算机帮助人们从庞大的数据中智能地、自动地抽取出有价值的知识模式,以满足人们不同应用的需要[1]。目前,数据挖掘已经成为一个具有迫切实现需要的很有前途的热点研究课题。 2.研究目的与意义 近邻方法是在一组历史数据记录中寻找一个或者若干个与当前记录最相似的历史纪录的已知特征值来预测当前记录的未知或遗失特征值[14]。近邻方法是数据挖掘分类算法中比较常用的一种方法。K 近邻算法(简称 KNN)是基于统计的分类方法[15]。KNN 分类算法根据待识样本在特征空间中 K 个最近邻样本中的多数样本的类别来进行分类,因此具有直观、无需先验统计知识、无师学习等特点,从而成为非参数分类的一种重要方法。 大多数分类方法是基于向量空间模型的。当前在分类方法中,对任意两个向量: x= ) ,..., , ( 2 1x x x n和) ,..., , (' ' 2 ' 1 'x x x x n 存在 3 种最通用的距离度量:欧氏距离、余弦距 离[16]和内积[17]。有两种常用的分类策略:一种是计算待分类向量到所有训练集中的向量间的距离:如 K 近邻选择K个距离最小的向量然后进行综合,以决定其类别。另一种是用训练集中的向量构成类别向量,仅计算待分类向量到所有类别向量的距离,选择一个距离最小的类别向量决定类别的归属。很明显,距离计算在分类中起关键作用。由于以上 3 种距离度量不涉及向量的特征之间的关系,这使得距离的计算不精确,从而影响分类的效果。

simtrade外贸实务实训报告

宁波职业技术学院 外贸实务 II - 提高 实训报告 指导老师:江彬 班级:国贸3141 学生姓名:肖思洁 学号: 1426263133 日期: 2016-04-25

课程名称:外贸实务II-提高

1 实训目的及要求 1.1 1.2 2 实训内容及步骤(包含简要的实训步骤流程) 2.1 本人所扮演的角色 2.2 贸易资料及实训步骤 2.2.1 2.2.2 2.2.3 2.2.4 3 实训结果(包括实训项目的完成情况,代表性邮件,单据,程序或图表、结论陈述、核算表数据记录及分析等) 3.1 3.1.1 3.1.2 3.1.3 3.2 4 实训中遇到的问题及其解决方法 5 实训总结(包括心得体会、对SimTrade系统的评价、对自己实训效果的评价如实训收获不足及实训改进意见等) 6 实训评价

外贸实训报告 外贸实务实训体会总结,这次是项目过程的完成让我感觉很深刻。短短的32学时已经结束,静下心来回想这次操作模拟学习真是感受颇深。我们知道动手操作是大学教育中一个极为重要的实践性环节,通过实习,可以使我们在实践中接触与本专业相关的一些实际工作,培养和锻炼我们综合运用所学的基础理论、基本技能和专业知识,去独立分析和解决实际问题的能力,把理论和实践结合起来,提高我们的实际动手能力,为将来我们毕业后走上工作岗位打下一定的基础。通过这段时间的学习,从无知到认知,到深入了解,渐渐地我喜欢上这个专业,让我深刻的体会到学习的过程是最美的,在整个实习过程中,我每天都有很多的新的体会,新的想法。 回顾我的实习生活,感触是很深的,收获也是丰硕的。可以模拟出口商与非洲、中东等地方的外国商人做生意,他们在我公司下订单,我们再把订单下到厂里,从中赚取差额,或者作为进口商与出口商讨价还价,去除运费保险费等来赚取利益。当然对工厂的基本流程也有一定的了解。这次的实习经历我对外贸这个专业有了更加理性的认识和更深刻的体会。在这次是学习中,我学到了很多过去两年没有体会到的东西,这不仅仅只是上课模拟,也是一次对真实工作流程经历。 对实践的看法: 在操作过程中,根据本门课程的内容、特点,通过走出去、请进来等方式,精心组织方案。通过听、看、做使一些看起来繁杂的专业知识很快被我们理解和掌握。只有将理论联系实际,教学与实际相结合,才是培养我们能力的一种有效形式。 出口商+进口商+工厂,一共写了78封邮件。一共发布了8封广告和信息。 查了B2B里的多数产品信息。 银行汇率:欧元大多汇率为8.6402,美元大多为6.1463等。保险费:一切险(ALL RISKS)为0.8%,战争险(W AR RISKS)为0.08% 保险费计算方式为 (1)按CIF进口时:保险金额=CIF货价×1.1 (2)按CFR进口时:保险金额=CFR货价×1.1 / (1 - 1.1 ×r),其中r为保险费率,请在"淘金网"的"保险费"页面查找,将所投险别的保险费率相加即可。 (3)按FOB进口时:保险金额=(FOB货价+ 海运费)×1.1 / (1 - 1.1 ×r),其中FOB 货价就是合同金额,海运费请在装船通知中查找,由出口商根据配舱通知填写,如果出口商填写错误,请其查看配舱通知。 实训的基本流程: 第一周完成了进口商,出口商,工厂,进口、出口地银行的基本资料。然后熟悉了下系统的基本轮廓,如B2B里面可以查询写什么,市场,海关等在哪个位置。根据老师的知道,试着去发广告与写邮件。 第二周确定角色,开始寻找有利信息,搜索信息,同业务伙伴建合作关系。 我先进行成本、费用、利润等的核算,若有盈利则进一步磋商合作,若亏损就跟对方进行讨价还价。过程为询盘——发盘——还盘——接受。 第三周之后进入交易准备阶段——交易磋商阶段——签订合同(T/T+FOB)与接收信用证(L/C+CIF)——履行合同阶段。 签订合同之后进行合同履行阶段。 首先作为出口商,与进口商进行磋商商定后确定的价格,之后跟工厂进行合作并进一步签订SALES CONFIRMATON。等工厂交货物发过来后,与工厂的业务就能完成。

药物分析实验报告

实验四苯甲酸钠的含量测定 一、目的 掌握双相滴定法测定苯甲酸钠含量的原理和操作 二、操作 取本品1.5g,精密称定,置分液漏斗中,加水约25mL,乙醚50mL与甲基橙指示液2滴,用盐酸滴定液(0.5mol/L)滴定,随滴随振摇,至水层显持续橙红色,分取水层,置具塞锥形瓶中,乙醚层用水5mL洗涤,洗涤液并入锥形瓶中,加乙醚20mL,继续用盐酸滴定液(0.5mol/L)滴定,随滴随振摇,至水层显持续橙红色,即得,每1mL的盐酸滴定液(0.5mol/L)相当于72.06mg的C7H5O2Na。 本品按干燥品计算,含C7H5O2Na不得少于99.0% 三、说明 1.苯甲酸钠为有机酸的碱金属盐,显碱性,可用盐酸标准液滴定。 COONa +HCl COOH +NaCl 在水溶液中滴定时,由于碱性较弱(Pk b=9.80)突跃不明显,故加入与水不相溶混的溶剂乙醚提除反应生成物苯甲酸,使反应定量完成,同时也避免了苯甲酸在瓶中析出影响终点的观察。 2.滴定时应充分振摇,使生成的苯甲酸转入乙醚层。 3.在振摇和分取水层时,应避免样品的损失,滴定前,应用乙醚检查分液漏斗是否严密。 四、思考题 1.乙醚为什么要分两次加入?第一次滴定至水层显持续橙红色时,是否已达终点?为什么? 2.分取水层后乙醚层用5mL水洗涤的目的是什么? 实验五阿司匹林片的分析 一、目的 1.掌握片剂分析的特点及赋形剂的干扰与排除方法。 2.掌握阿司匹林片鉴别、检查、含量测定的原理及方法。 二、操作 [鉴别] 1.取本品的细粉适量(约相当于阿司匹林0.1g),加水10mL煮沸,放冷,加三氯化铁试液1滴,即显紫堇色。 2.取本品的细粉(约相当于阿司匹林0.5g),加碳酸钠试液10mL,振摇后,放置5分钟,滤过,滤液煮沸2分钟,放冷,加过量的稀硫酸,即析出白色沉淀,并发生醋酸的臭气。 [检查]

数据挖掘实验报告-关联规则挖掘

数据挖掘实验报告(二)关联规则挖掘 姓名:李圣杰 班级:计算机1304 学号:1311610602

一、实验目的 1. 1.掌握关联规则挖掘的Apriori算法; 2.将Apriori算法用具体的编程语言实现。 二、实验设备 PC一台,dev-c++5.11 三、实验内容 根据下列的Apriori算法进行编程:

四、实验步骤 1.编制程序。 2.调试程序。可采用下面的数据库D作为原始数据调试程序,得到的候选1项集、2项集、3项集分别为C1、C2、C3,得到的频繁1项集、2项集、3项集分别为L1、L2、L3。

代码 #include #include #define D 4 //事务的个数 #define MinSupCount 2 //最小事务支持度数 void main() { char a[4][5]={ {'A','C','D'}, {'B','C','E'}, {'A','B','C','E'}, {'B','E'} }; char b[20],d[100],t,b2[100][10],b21[100 ][10]; int i,j,k,x=0,flag=1,c[20]={0},x1=0,i1 =0,j1,counter=0,c1[100]={0},flag1= 1,j2,u=0,c2[100]={0},n[20],v=1; int count[100],temp; for(i=0;i=MinSupCount) { d[x1]=b[k]; count[x1]=c[k]; x1++; } } //对选出的项集中的元素进行排序 for(i=0;i

Simtrade实验报告

国贸专业生产实习报告 随着国际贸易的日益完善,以及中国在国际贸易的地位的不断上升,我们作为未来社会的国贸人员,为了加强社会竞争力,应培养较强的国贸工作的操作能力。于是,在结束了大三的课程后,学校给了我们一个很好的实习锻炼机会,让我们模拟国际贸易实务操作,从而从中掌握国际贸易流程。 一、实习目的 ①熟悉外贸实务的具体操作流程; ②了解、巩固与深化已经学过的理论和方法; ③增强对外贸实务的感性认识; ④提高发现问题、分析问题以及解决问题的能力。 二、实习方法: 通过进入SimTrade模拟平台,进行上机模拟操作 Simtrade外贸实习平台是一个十分成功的国际贸易模拟软件,它在很大程度上解决了学生实习难的问题。学生在网上进行国际货物买卖实务的具体操作,能很快掌握进出口的成本核算、询盘、发盘与还盘等各种基本技巧;熟悉国际贸易的物流、资金流与业务流的运作方式;切身体会到国际贸易中不同当事人面临的具体工作与他们之间的互动关系;学会外贸公司利用各种方式控制成本以达到利润最大化的思路;认识供求平衡、竞争等宏观经济现象,并且能够合理地加以利用。老师通过在网站发布新闻等行为对国际贸易环境实施宏观调控,使学生在实习中充分发挥主观能动性,真正理解并吸收课堂中所学到的知识,为将来走上工作岗位打下良好基础。 三、实习遇到的问题 1、预算错误 这是开始接触Simtrade时所最容易忽略的问题。虽然老师曾多次提醒,做贸易前一定要计算好了一切费用,选好贸易术语,最后再签定合同。但我们经常做出口商的在还没有调查进口商所在地市场的情况下就先去工厂进货了。如果工厂角色也没有做好预算,草草就签订了合同,那么可能出口商和工厂都赚不到钱。在最后交易完成后,我们经常大叫“啊,这个运费怎么比我的货物数量还多啊?”“这个保险费怎么这么贵,我要赔钱了!”

生物医学工程大实验报告

心电检测实验 实验目的 1.复习放大器,滤波器等相关知识, 了解心电测量的原理,并学习用生理信号采集系统记录人体心电图。 2.要求掌握心电测量电路的硬件实现方法,锻炼电路板的焊接与调试能力. 3.学习正常心电图中各波的命名与波形,了解其生理意义。 实验器材 信号发生器,电源,示波器,电机夹,导线若干,电路板一块 实验原理 1.心脏的基本构造和心电图(ECG) 心脏处于人体的循环系统的中心,主要由心肌构成,心肌是可兴奋组织,它的收缩和舒张是人体血液循环的动力;心肌将心脏分隔成左,右心房和心室四个心腔,腔间有瓣膜控制血液在房室间的流动,通过动脉血管将氧和酶等各种营养物质供给全身组织,并将静脉回流带来的组织代谢废物运走。 心脏是自律性器官,有特殊起博心肌细胞和神经传导树支(束),包括窦房结,结间束,房室结,房室束,左右束支;在起博心肌细胞(窦房结内)的自律作用下,通过房、室、神经束的传导使心肌收缩和舒张完成心脏的博动;另外,参于循环系统调节的有:交感神经,兴奋时通过肾上腺素使心率加快,而副交感神经兴奋时使心率变慢,还

有化学性的体液因素也可影响心脏的博动。 神经细胞元的放电过程已得到实验认证,心脏特殊起博心肌细胞博动和神经传导树支(束)的传导过程都是神经细胞元放电和传导的过程,因此,可通过在人体体表层安放灵敏度很高的电极接受这些微弱的心脏电活动,称为ECG(electrocardiogram)---心电图,早在1903年就发现心电图及基本测量方法;心电图机检查人体的ECG,判断心脏活动正常与否仍是医院目前首选的检查手段。 标准ECG及参数如下: 典型心电图波形 目前ECG的测量技术已很成熟,标准ECG都打印在栅格纸上,标明X方向每格0.04秒,Y方向每格0.1mv.一般来说,P波表征心脏收缩期开始;QRS复合波是心室收缩的结果,指示心室收缩期开始;T波是心室舒张的结果,将延续到下一个P波止. ECG测量基本导联三角形(肢体):

交流调压实验报告

电力电子实验四-- 交流调压实验 姓名:肖珂 学号:09291218 班次:电气0907 指导老师:汤钰鹏 合作者:冷凝(09291174)

一、实验目的 熟悉单相交流调压电路的工作原理、分析在电阻负载和电阻电感负载时不同的输出电压和电流的波形及相控特性。加深理解交流调压电路在电阻电感负载时其相控角α应限制在θ≤α≤π的范围内 二、步骤内容 (1) 熟悉实验电路(包括主电路、触发控制电路)。 (2) 熟悉用TCA785集成触发电路芯片构成的集成触发器。 (3) 按实验电路要求接线,用示波器观察移相控制信号α的情况。 (4) 主电路接电阻负载(灯箱),用示波器观察不同α角时输出电压和晶闸管两端的电压波形,并用电压表测出输出电压的有效值。为使读数便利,可取α为30°、60°、90°、120°和150°各特殊角进行观察和分析。 (5) 主电路改接电阻电感负载(灯箱+电抗器),在不同控制角α和不同负载阻抗角θ情况下用示波器观察和记录负载电压和电流的波形。分别观察并画出当α>θ和α<θ情况下负载电压和电流的波形,指出电流临界连续的条件。 (6) 特别注意观察上述α<θ情况下出现较大的直流分量,此时L固定,加大R(减少亮灯个数)直至消除直流分量。

三、电路原理 1、单相交流调压电路 2、晶闸管触发电路 3、相控角发生电路

4、驱动隔离电路 5、DC电源电路 四、实验要求 (1) 估算实验电路负载参数(R、L等)。 (2) 电阻负载时,画出U-α曲线。(U为负载R上的电压有效值),并与理论计算值进行比较。 (3) 电阻电感负载时,画出在不同α值情况下负载电压和电流

大数据挖掘weka大数据分类实验报告材料

一、实验目的 使用数据挖掘中的分类算法,对数据集进行分类训练并测试。应用不同的分类算法,比较他们之间的不同。与此同时了解Weka平台的基本功能与使用方法。 二、实验环境 实验采用Weka 平台,数据使用Weka安装目录下data文件夹下的默认数据集iris.arff。 Weka是怀卡托智能分析系统的缩写,该系统由新西兰怀卡托大学开发。Weka使用Java 写成的,并且限制在GNU通用公共证书的条件下发布。它可以运行于几乎所有操作平台,是一款免费的,非商业化的机器学习以及数据挖掘软件。Weka提供了一个统一界面,可结合预处理以及后处理方法,将许多不同的学习算法应用于任何所给的数据集,并评估由不同的学习方案所得出的结果。 三、数据预处理 Weka平台支持ARFF格式和CSV格式的数据。由于本次使用平台自带的ARFF格式数据,所以不存在格式转换的过程。实验所用的ARFF格式数据集如图1所示 图1 ARFF格式数据集(iris.arff)

对于iris数据集,它包含了150个实例(每个分类包含50个实例),共有sepal length、sepal width、petal length、petal width和class五种属性。期中前四种属性为数值类型,class属性为分类属性,表示实例所对应的的类别。该数据集中的全部实例共可分为三类:Iris Setosa、Iris Versicolour和Iris Virginica。 实验数据集中所有的数据都是实验所需的,因此不存在属性筛选的问题。若所采用的数据集中存在大量的与实验无关的属性,则需要使用weka平台的Filter(过滤器)实现属性的筛选。 实验所需的训练集和测试集均为iris.arff。 四、实验过程及结果 应用iris数据集,分别采用LibSVM、C4.5决策树分类器和朴素贝叶斯分类器进行测试和评价,分别在训练数据上训练出分类模型,找出各个模型最优的参数值,并对三个模型进行全面评价比较,得到一个最好的分类模型以及该模型所有设置的最优参数。最后使用这些参数以及训练集和校验集数据一起构造出一个最优分类器,并利用该分类器对测试数据进行预测。 1、LibSVM分类 Weka 平台内部没有集成libSVM分类器,要使用该分类器,需要下载libsvm.jar并导入到Weka中。 用“Explorer”打开数据集“iris.arff”,并在Explorer中将功能面板切换到“Classify”。点“Choose”按钮选择“functions(weka.classifiers.functions.LibSVM)”,选择LibSVM分类算法。 在Test Options 面板中选择Cross-Validatioin folds=10,即十折交叉验证。然后点击“start”按钮:

病理生理实验报告

实验一组织晶体渗透压改变在水肿发生中 的作用(水肿) 实验目的:通过实验了解组织晶体渗透压的改变在水肿发生中的意义,加深对水肿发生机理的理解。 实验动物:蟾蜍2只,要求体重、大小相仿。 器材与药品: 200克电子天平1台,盛水玻璃缸2个,2m1注射器连4号针头2支,脱脂棉球、纱布块适量。%氯化钠液和20%氯化钠液各10ml。 实验方法: 1. 取蟾蜍2只分别称重,注意观察背部外形。 2. 向一只蟾蜍背部淋巴囊内注入0.65%氯化钠液(即蛙生理盐水)2 m1,向另一只蟾蜍背部淋巴囊内注入20%氯化钠液2ml(蟾蜍皮下淋巴囊分布见图2-1),然后分别放入装有水的玻璃缸内。 3.1小时后由水中取出蟾蜍,擦掉体表浮水后分别称重,同时仔细观察背部外形改变。 4. 解剖蟾蜍:由椎骨孔破坏神经系统。重点观察背部淋巴囊的变化。解剖观察其它脏器和解剖结构。 实验结果:将观测到的各种实验结果记入下表内 注前体重注前背部外 形注后体重注后背部外 形 注%氯化钠正常平坦正常平坦注20%氯化正常平坦变肥

钠 结果分析:实验中这两只蟾蜍分别注射了不同浓度的氯化钠溶液,组织晶体渗透压升高,两只都有一定的吸水能力,注射低浓度氯化钠溶液的青蛙吸水较少,体重只有轻微的增长,体型无明显变化;注射高浓度氯化钠溶液的青蛙吸水较多,体重有大幅度的增长,体型出现明显变化。结果表明晶体在体内的浓度越高,吸水性越强。 心得:

实验二缺氧 实验目的:通过复制外呼吸性缺氧、血液性缺氧及组织中毒性缺氧的动物模型。 实验动物:成年小白鼠4只. 器材与药品: 1.外呼吸性缺氧:带有橡皮塞的250毫升广口瓶1只(见图3—1),搪瓷盘1只、镊子、剪子各2把,100g电子天平1台。钠石灰10g,凡士林1瓶。 2.血液性缺氧:带有管道瓶塞的250m1广口瓶和三角烧瓶各2只,酒精灯1盏,三角架3个,充满一氧化碳的皮球胆1只,弹簧夹4个,lml注射器1支。甲酸、浓硫酸各300ml,2%亚硝酸钠溶液10ml 3.组织中毒性缺氧:1 m1注射器1支。%氰化钾溶液。 实验方法: 一、外呼吸性缺氧 1.取小白鼠重只称重后放入广口瓶内,瓶内预先加入钠石灰5g。观察动物一般状况,如呼吸频率、呼吸状态,皮肤、粘膜色彩、精神状态等。 2.旋紧瓶塞,用弹簧夹夹闭通气胶管,防止漏气。记录时间,观察上述各项指标的变化,直至动物死亡。待本次实验内容全部完成之后,一起剖检动物,对比观察血液颜色的改变和其它变化(以下皆同)。 二、血液性缺氧 (一)一氧化碳中毒

斩控式交流调压电路实验报告

斩控式交流调压电路实验报告 交流调压的控制方式有三种:①整周波通断控制。整周波控制 调压——适用于负载热时间常数较大的电热控制系统。晶闸管导通 时间与关断时间之比,使交流开关在某几个周波连续导通,某几个 周波连续关断,如此反复循环地运行,其输出电压的波形如图1-1 所示。改变导通的周波数和控制周期的周波数之比即可改变输出电压。为了提高输出电压的分辨率,必须增加控制周期的周波数。为 了减少对周围通信设备的干扰,晶闸管在电源电压过零时开始导通。但它也存在一些缺点那就是:在负载容量很大时,开关的通断将引 起对电网的冲击,产生由控制周期决定的奇数次谐波,这些谐波引 起电网电压变化,造成对电网的污染。 图1-1周期控制的电压波形 ②相位控制。相位控制调压——利用控制触发滞后角α的方法, 控制输出电压。晶闸管承受正向电压开始到触发点之间的电角度称 为触发滞后角α。在有效移相范围内改变触发滞后角,即能改变输 出电压。有效移相范围随负载功率因数不同而不同,电阻性负载最

大,纯感性负载最小。图1-2是阻性负载时相控方式的交流调压电路 的输出电压波形。相控交流调压电路输出电压包含较多的谐波分量,当负载是电动机时,会使电动机产脉动转矩和附加谐波损耗。另外 它还会引起电源电压畸变。为减少对电源和负载的谐波影响,可在 电源侧和负载侧分别加滤波网 络。b5E2RGbCAP ③斩波控制。斩波控制调压——使开关在一个电源周期中多次通断,将输入电压切成几个小段,用改变段的宽度或开关通断的周期来调 节输出电压。斩控调压电路输出电压的质量较高,对电源的影响也较小。图1-2为斩波控制的交流调压电路的输出电压波形。 p1EanqFDPw 图1-2相位控制的电压输出波形 在斩波控制的交流调压电路中,为了在感性负载下提供续流通路, 除了串联的双向开关S1外,还须与负载并联一只双向开关S2。当 开关S1导通,S2关断时,输出电压等于输入电压;开关S1关断,S2导通时,输出电压为零。控制开关导通时间与关断时间之比即能

相关文档
最新文档