计算机系组成实验报告_第1页
计算机系组成实验报告_第2页
计算机系组成实验报告_第3页
计算机系组成实验报告_第4页
计算机系组成实验报告_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

⑷ ⑸ ⑹ ⑺$cd

⑻ ⑼

2、用manls,manpasswd,manpwd命令得到ls、passwd、pwd三个命令的帮助内容。用who--help得到who命令信息。3、用帮助了解中表格1-1令,并填写下表 至 对文件 ,及 下的变更文件 为linux的文件 创Vi编辑器文本过滤,以全屏幕的方式按叶显示文本内容,支持vi在linux的 vigedit在自己名字文件夹下创建一个以自己学号命名的文本文件,并输入4)把该文件拷贝到 下morecat5、编辑并用gcc编 根据实验讲义,使用不同令选项,输出 使用Editplus或者其他合适的软件,查看 o文件 使用文本编辑器编写实验讲义中给出的tst.c源码,截图展示 根据实验讲义步骤,学习逐步调试tst程序,掌握GDB常用命令,截图 结合实验操作以及GDB的help,了解以下命令的作用单步,类似step单步,类似step退出四、思考题(请根据自己的理解,能回答多少就答多少提示:从多个方面(如ISA、OS和编译器)来分析。你能在可执行目标文件中找出函数printf对应的机器代码段吗?能的话,不能。因为源程序中printf函数在可执行文件中已转换为机器语言。被翻译的机器语言中有printf函数,但是不知道从哪一段开始翻译。课程名 计算机系统原理实 实验三数据的机器级表示学生专业班 学实验成 指导老师(签名 日 _ _实验 一、实验目的12IEEE754二、实验步骤

0。int是对i直接赋值,i运算结果,并说明为什么是这样的运算结果(intmain(){ 1:07:-1明显大于-8321(1)intx=-(2)short(3)unsigned(1)intx=-(2)short(3)unsigned(4)char(5)floata=-(6)doubleaInt{intx=-32768;shorty=522;unsignedz=65530;charc=’@’;floata=-1.1;doubleb=10.5;}4(选做)C语言程序,输出一个整数对应的有符号值和无符号值。5floatdouble类型的精度(计算机专业必做,软件工程专业;6(选做CIEEE754标准的二进制表示。四、思考题(必做1、你的机器字长多少位?int64;4位 2、在你的机器上,-1用int类型和unsigedint3、float类型和double7位;144、gcc默认的C 实验四数据的学生专业班 学实验成 指导老师(签名 日 _ _实验 一、实验目的二、实验内容1、编译运行给出的show.c三、实验步骤1、编译运行给出的show.c文件,观察并解释程序的执行结果。第一个函数的结果是12345和-12345十六进制的机器数;第二个函数的结果是输出第N组(2个数为一组22个数的内存地址;第四,第五个函数输出的是a(A、b(B)……ASCLL码值手工计算int型数 的机器码,以及对应的float型数/16=%16=/16%16=/16=%16=/16=%16=/16%16=/16=%16=85216=852=45316=53=5/=%=1/=%=4/=%=1857=857=953=353=53 int12345和-12345对应的机器码,写出完整的计算转换过程,并与show.c实验中的结果对照。-unionunion{intcharint{unionnode}intint01四、思考题(必做了解目前市面常见的处理器都有哪些?它们采用的方式是大端方式还是小i3i5i722returnreturn课程名 计算机系统原理实 学生专业班级 实验成 指导老师(签名 日 _ _实验 一、实验目的二、实验内容2、编写程序,测试xor_swap函数;三、实验步骤11的C语言表达式,并输出验证。intmain(){intint}intmain(){intintx=0xFFFFFFFF;inty=x&0xFF;return0;}intmain(){intintinty=((x^~0xFF)>>8)<<8;return0;}intmain(){intintx=0xFFFFFFFF;inty=x|0xFF;}22中的类型转换,并解释程序运行结果。intmain(){shortsi=(short)-12345;Intia=si;unsignedshortusbunsignedintuic=(unsignedint)si;floatfd=si;printf("short-12345=%d\nint-12345=%d\nunsignedshort-12345=%u\nunsignedint-12345=%u\nfloat-12345=%f\n",si,ia,usb,uic,fd);printf("the}intmain(){int shortunsignedshortusb=si;unsignedintuic=si;floatprintf("short=%d\nint=%d\nunsignedshort=%u\nunsignedint=%u\nprintf("the}intmain(){floata=123456.789e5;doubleb=a;printf("double=%d\n",b);printf("the16:\n%x\n",b);}intmain(){doublea=123456.789e5;floatb=a;printf("float=%d\n",b);printf("the16:\n%x\n",b);}intmain(){shorta=(short)-12345>>2;unsignedshortc=(unsignedshort)-12345>>2;unsignedshortd=(unsignedshort)-12345<<2;printf("%d%d%d%d",a,b,c,d);printf("the16:\n%x%x%x}-12345FFFFCFShort转Int强转为unsignedshort之后在小段上表示为CFC7解释为用unsignedintFFFFCFC7解释为转化成float为-12345.000000不解释FFFFFF强转为short在小端上表示为FFFF解释为-强转为unsigned在小端上表示为FFFF解释为强转为unsignedint强转为float由于精度问题表示并3、编写测试程序test1.c3中的xor_swap函数,并使用gdb工具voidxor_swap(int*x,int{}int{intprintf("%d%d\n",a,b);printf("%d%d\n",a,b);return0;}第一步:x为x^y的值第二步:y为原x的值第三步:x为原y的值4、编写测试程序test2.c,调用实验内容4中的reverse_array和实验内容2中的xor_swap函数,并使用gdb工具调试程序,查看每步执行结果,回答实验内容3voidxor_swap(int*x,int{}voidreverse_array(inta[],int{intleft,right=len-1;}int{intfor(inti=0;i<5;i++)printf("%d%c",a[i],i==4?'\n':'');for(inti=0;i<5;i++)printf("%d%c",a[i],i==4?'\n':'');return0;}当left==right时,传入的都是a[left]的值因此在交换函数中第一次时*x*x^此时之后x和y修改后的reverse_arrayvoidxor_swap(int*x,int{}voidreverse_array(inta[],int{intleft,right=len-}int{intfor(inti=0;i<5;i++)printf("%d%c",a[i],i==4?'\n':'');for(inti=0;i<5;i++)printf("%d%c",a[i],i==4?'\n':'');return0;}四、思考题(必做1、无符号数和带符号整数的扩展操作方式是否相同?各是如何进行的?不同。无符号数,补0;带符号数,补符号位。2、补码整数(int型数)float类型数据?为什么?不能。因为int型数据有效位数为32float型数据的尾数部分23位,加上隐藏的高一位实际精度为24所以int精度比float所以int型数据向float3、float型数据是否总能转换成等值的doubleDouble型数据的精度和范围均高于float型,所以float型向double型转换 长数被截断成短数后可能发生什么现象?为什么 C语言中移位操作规则与操作对象的数据类型有关吗?有关。 左移2位和右移2位操作分别相当于扩大和缩小几倍44{{ 实验六整数运算学生专业班 学实验成 指导老师(签名 日 _ _实验 一、实验目的二、实验内容1编写实验内容中编程题的1,2,3,4并编写主程序调用这些函数进试并对25三、实验步骤1编写实验内容中编程题的1,2,3,4并编写主程序调用这些函数进试并对intuadd_ok(unsignedx,unsignedy);inttadd_ok(intx,inty);inttsub_ok(intx,inty);intdiv32(intx);intunsignedx,y;inta,b,n,i;printf("pleasewritethetimes:\n");printf("the%ddata\n",i); printf("writeunsignedxandy:\n");printf("wirteintaandb:\n");printf("writethea,thendiv32:\n");}}intuadd_ok(unsignedx,unsigned{return}inttadd_ok(intx,int{return}inttsub_ok(intx,intreturn}intdiv32(int{Unsignedintre=(unsignedint)(~x)>>31;return(x+31-(int)((re<<5-)-re))>>5;}3:125对于负数的情况需要先+31再右移5位,因此先用位运算判断x的最,然后再进行x4自减原来的x相当于原x因此M若y<-3此时y+3<0y4取整,就是y/4取整y2位相当于原y4取整,就是y/4取整因此N4四、思考题(必做在Cunsigned数,在整数运算时如果容易发生溢出将整数的范围扩课程名 计算机系统原理实 实验八Linux汇编语言初步学生专业班级 实验成 指导老师(签名 日 _ _实验 一、实验目的Linux二、实验内容、 o.s和test.s练习linux汇编语言的汇编、执行、调试过程。10,20,30,40结果存放在eax,写出完整的可执行汇编程序代码,并采用gdb调试,查看寄存、三、实验步骤、 o.s和test.s练习linux汇编语言的汇编、执行、调试过程、10,20,30,40结果存放在eax,写出完整的可执行汇编程序代码,并采用gdb调试,查看寄存 #代码段.global #指定函 #movl$10,%eaxmovlmovlmovl$40,%edxaddl%eax,%ebxaddladdl#movl$0,%ebx #参数一:退出代码movl$1,%eax #系统调用号(sys_exit) #调用内核功能四、思考题(必做的作用。就拿LinuxC语言编写的,但仍然不可避免地在某些关键地方使用了汇编代码。由于这部分代码与硬件的关系非常密切,即使是C语言也会显得力不从心,而汇编语言其次在系程序部分以与系硬件繁交道部分可以用汇语。比操系统的/O课程名 计算机系统原理实 实验九IA32汇编指令系统学生专业班级 实验成 指导老师(签名 日 _ _实验 一、实验目的了解IA32Linux汇编语言的基本语法、汇编语言的编二、实验内容1tets31.s111行程序添加注释,说明操作数的寻址方式,并在GDB下观察每条指令的执行结果。2exchange的CGCC生成的对应的汇编代码。为右侧intintexchange(int*xp,int{intx=*xp=y;} #保护函数返回地址 %esp,%ebp #设置帧指针 8(%ebp),%edx (%edx),%eax 12(%ebp),%ecx %ecx,(%edx)poplebp 3、假设某个C语言函数func的原型如下voidfunc(int*xptr,int*yptr,int函数func的过程体对应的机器级代码用AT&Tmovlmovl8(%ebp),movl12(%ebp),movl16(%ebp),movl(%ebx),movl(%ecx),movl(%eax),movl%edi,movl%edx,movl%esi,根据上述机器级代码写出函数func的CC代码之后,再用gcc-S-O1-otest33.stest33.c命令产生对应的汇编代码进行验证。三、实验步骤movl movl$0x movl$0x804806d,%edi movl$0x4,%ecx movb$0x1234,%al#movl$0x4050,%eax#movw%bp,%sp#movb(%edi,%ecx),%ah movb$-17,(%esp) movl%eax,-12(%ebp) 9:R[esp]<--17调试过程及结果解释(截图exchange %esp,%ebp 8(%ebp),%edx (%edx),%eax 12(%ebp),%ecx %ecx,(%edx) popl%ebp 3CC代码再产生汇编代码进行验证,回答问题。11movl8(%ebp),2movl12(%ebp),#R[ebx]<-3movl16(%ebp),#R[ecx]<-4movl(%ebx),#R[edx]<-5movl(%ecx),#R[esi]<-6movl(%eax),#R[edi]<-7movl%edi,#R[ebx]<-8movl%edx,#R[ecx]<-9movl%esi,#R[eax]<-写出对应的C{inttx;intty;inttz;}C四、思考题(必做IA32的数据传送指令,为什么不允许单元之间直接传送数据?课程名 计算机系统原理实 实验十程序的机器级表示——算术和逻辑操作学生专业班级 实验成 指导老师(签名 日 _ _实验 一、实验目的二、实验内容inttest(intx,int{x<<=%esp,x>>=8(%ebp),inttest(intx,int{x<<=%esp,x>>=8(%ebp),}popl%ebp2suan1C代码,右侧为对应的汇编代码,为右侧已有的汇编语句添加注释。注意参数x,y和z分别存放在器中相对于寄存器%ebp8、1216的地方。intsuan1(intintsuan1(intx,inty,int{intt1=x+y;intt2=z*48;intt3=t1&0xFFFF;intt4=t2*t3;returnt4;} %esp,%ebp 16(%ebp),%eaxleal(%eax,%eax,2),%eaxsall$4,%eax 12(%ebp),%edxaddl8(%ebp),%edxandl$65535,%edx %edx,%eaxpopl%ebp3suan2C代码,右侧为对应的汇编代码,Cx,yz器中相对于寄存器%ebp8、1216intsuan2(intx,inty,int{intt1= intt2 %esp,%ebp12(%ebp),%eax}intt3 intt4= returnt4;xorl8(%ebp),sarl$3,%eaxnotl%eaxsubl16(%ebp),三、实验步骤 #EBP %esp,%ebp 8(%ebp),%eax sall$2,%eax 12(%ebp),%ecx %cl,%eax poplebp #EBP %esp,%ebp 16(%ebp),%eax leal(%eax,%eax,2),%eax sall$4,%eax 12(%ebp),%edx addl8(%ebp), andl$65535, %edx,%eax poplebp 3、补充缺少的Cintsuan2(intx,inty,int{intt1= intt2 intt3= intt4= returnt4;} #EBP %esp,%ebp 12(%ebp),%eax xorl8(%ebp), sarl$3, notl subl16(%ebp), #R[EAX]M[R[EAX]- 课程名 计算机系统原理实 实验十一程序的机器级表示——过程学生专业班级 实验成 指导老师(签名 日 _ _实验 了解IA32Linux汇编语言的基本语法、汇编语言的编二、实验内容1test11_1.c以及对应的反汇编代码,为汇编代码添加注释,并画出2test11_2.c以及对应的汇编代码,为汇编代码添加注释,并补充完整c程序源码。三、实验步骤1test11_1.c以及对应的反汇编代码,为汇编代码添加注释,并画出: %ebp#:89 %esp,%ebp: %ebx#ebx:8b55 0x8(%ebp),%edx 8b4d0c 8b(%edx),%ebx:8b(%ecx),%eax#:89%eax,(%edx)#:89%ebx,(%ecx)#:01%ebx,%eax:%ebx#ebx:%ebp#b%ebp#89%esp,%ebp83ec:c745fc7b0000 c745f8c8010000 8d45f8 89442404 8d45 8904%eax,(%esp) e8c3ffff<swap_add调用 8b55fc 2b55 0f 0faf # #调试过程及结果解释(截图调用swap_addEBPinEBPin&&EBPin

callerEBPinEBPin&&swap_addswap_add为汇编代码每行添加注释;fun在被调用者保存寄存器%ebx中的值是什 %esp,%ebp $4, 8(%ebp),%ebx $0,%eax %ebx,%ebx #test指令的作用:两个操作数按位与,根据与的结果 置相应的标志位,但

%ebx,%eax shrl%eax %eax,(%esp) callfun %ebx,%edx $1, leal(%edx,%eax), $4,%esp 填写上述cintintfun(unsigned{ return z= intresult=fun(z);return }描述fun四、思考题(必做函数调用时,实参在哪个函数的栈帧中?函数调用过程中,为什么必须保持%ebp和%esp的值?课程名 计算机系统原理实 实验十二程序的机器级表示——分支与循环学生专业班级 实验成 指导老师(签名 日 _ _实验 一、实验目的二、实验内容1、阅读实验讲义程序1,回答实验内容中问题,并填写下面实验步骤中2、阅读实验讲义程序2,回答实验内容中问题,并填写下面实验步骤中三、实验步骤1、阅读实验讲义给出的test1.c3点“分支、循环结构对应的汇ielseb部分示例风格,用C语言为本程序的sc中的od函数写一个goocond函数的goto版本gotodonegotodone为汇编代码每行添加注释,说明每条语句的功能根据实验讲义给出的操作说明,截图展示从test1.c到汇编代码的操作过程为汇编代码每行添加注释,说明程序执行的操作 %esp, 8(%ebp),%edx 12(%ebp),%eax %eax, #ifx==0goto%edx,jle#ify<=0goto%edx,请说明为什么C语言代码中只有一个if编代码包含两个条件分支2、阅读实验讲义给出的test2.c阅读汇编程序,填写如下寄存器使用表对应变x5y4n3B)C代码中的test-expr(测试条件表达式)和body-statement(循环体, %edx,%edx %edx,

%esp,%ebp 8(%ebp),%eax 12(%ebp),%ecx 16(%ebp), %edx,%eax %edx,%ecx $1,%edxC)为汇编代码每条指令添加注释,描述程序的操作 %esp,%ebp 8(%ebp),%eax 12(%ebp), 16(%ebp),%edx, %edx,$1,%edx,jle#ifX1<=0goto %edx, #ifX2<0goto截图展示GDB调试过程中,上述dw_loop函数的汇编代码段,需要注释的每行课程名 计算机系统原理实 实验十三程序的机器级表示——数组学生专业班级 实验成 指导老师(签名 日 _ _实验 一、实验目的了解IA32Linux汇编语言的基本语法、汇编语言的编二、实验内容1Cmain函数,使程序可运行,验证你的MN的值。三、实验步骤1Cmain函数,使程序可运行,验证你的MN的值。 # %esp, 8(%ebp), 0(,%ecx,8), %ecx, %eax, leal(%eax,%eax,4),%eaxaddl%ecx,%eaxmovlmat2(,%eax,4),%eax#R[EAX]M[R[EAX]*4+MAT2]addlmat1(,%e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论