计算机系统基础
根目录什么意思 时间:2021-01-30 阅读:(
)
ProgrammingAssignment2017年9月8日PA1数据的表示、存取和运算1"一名优秀的厨师应当首先对各种食材了如指掌并掌握各种基本的烹饪技巧.
"——L.
Wang2数据=食材PA1–目录PA1-1数据的类型和存取PA1-2整数的表示和运算PA1-3浮点数的表示和运算3PA1–路线图45PA1-1数据的类型和存取PA1-1数据的类型和存取数据基本可以分为两个大类非数值型数据各类文字的编码指令的操作码数值型数据(重点关注)整数浮点数在计算机内,所有类型的数据(包括代码)都表现为01串6PA1-1数据的类型和存取NEMU模拟的是i386体系结构数据存储的最小单位是比特(bit)数据存储的基本单位是字节(byte)典型长度为:1字节、2字节、4字节内存中采用小端方式存储对于超过一个字节的数据低有效位的字节在前(低地址),高有效位的字节在后(高地址)7想表达的数字内存中的数字0x123456780x780x560x340x12低地址高地址PA1-1数据的类型和存取8"巧妇难为无米之炊,没有锅她也不行.
"——L.
Wang我们首先要为待处理的各类数据找到摆放它们的场所,在计算机中,这些场所就是各种类型的存储器PA1-1数据的类型和存取9计算机餐厅程序菜谱数据食材CPU大厨CPU内部的寄存器灶台上的锅主存厨房里的冰箱硬盘仓库解决计算问题的步骤做菜的步骤程序处理的对象做菜加工的对象执行程序的器件执行菜谱的人储存正在处理的数据放置正在加工的食材储存马上要用的数据储存马上用的菜谱和食材存储大量的数据啥都放这里PA1-1数据的类型和存取10寄存器主存/内存硬盘存储器的层次结构越来越大越来越慢PA1-1数据的类型和存取NEMU模拟的是i386体系结构8个32位通用寄存器11GeneralPurposeRegisters:31231570EAXAHAXALEDXDHDXDLECXCHCXCLEBXBHBXBLEBPBPESISIEDIDIESPSP用C语言怎么模拟PA1-1数据的类型和存取NEMU模拟的是i386体系结构框架代码中nemu/include/cpu/reg.
h12//definethestructureofregisterstypedefstruct{//generalpurposeregistersstruct{struct{struct{uint32_t_32;uint16_t_16;uint8_t_8[2];};uint32_tval;}gpr[8];struct{//donotchangetheorderoftheregistersuint32_teax,ecx,edx,ebx,esp,ebp,esi,edi;};};//EFLAGS…}CPU_STATE;要实现和前面图中一样的结构PA1-1数据的类型和存取NEMU模拟的是i386体系结构框架代码中nemu/include/cpu/reg.
h13//definethestructureofregisterstypedefstruct{//generalpurposeregistersunion{union{union{uint32_t_32;uint16_t_16;uint8_t_8[2];};uint32_tval;}gpr[8];struct{//donotchangetheorderoftheregistersuint32_teax,ecx,edx,ebx,esp,ebp,esi,edi;};};//EFLAGS…}CPU_STATE;教程中直接给了答案PA1-1数据的类型和存取在教程§1-1.
3中提出的实验过程及要求:1.
修改CPU_STATUS结构体中的通用寄存器结构体;2.
使用make编译项目;3.
在项目根目录通过.
/nemu/nemu命令执行nemu并通过reg_test()测试用例.
在实验报告中,简要叙述:1.
C语言中的struct和union关键字都是什么含义,寄存器结构体的参考实现为什么把部分struct改成了union14regtest========reg_test()pass~PA1-1顺利完成~PA1-1数据的类型和存取除了寄存器之外,还要熟悉主存的模拟方式及其接口以字节为基本编址单位通过地址直接访问某个字节怎么来模拟数组!
nemu/src/memory/memory.
c中hw_mem[]模拟内存多大nemu/include/memory/memory.
h中MEM_SIZE_B模拟内的对外提供的读写接口memory.
h声明memory.
c中实现150x110x120xAB0xEF0x1C0x49…0xFF012345…N~要熟悉这些接口~16PA1-2整数的表示和运算PA1-2整数的表示和运算17大厨灵巧的双手,拥有处理各类食材的扎实基本功.
NEMU强大的CPU,则拥有处理各类数据(整数、浮点数)实现各种运算的功能.
我们要赋予计算机的CPU进行各种基本数值计算的能力,才好让它执行更为复杂的计算过程PA1–路线图18PA1-2整数的表示和运算整数无符号整数32位整数:0x0~0xFFFFFFFF(32个1)带符号整数(归于某种无符号整数的表示方法)原码表示法:最高位为符号位补码表示法(普遍采用)各位取反末位加一用加法来实现减法可以试试X+(-X)等于多少,其中X为某一32位正整数,-X为其补码表示,运算结果截取低32位19PA1-2整数的表示和运算在NEMU中模拟各类整数运算的部件ALU–算术逻辑单元能进行各类算术运算:加减乘除、移位能进行各种逻辑运算:与或非对应代码:nemu/src/cpu/alu.
c得到运算结果的同时设置标志位EFLAGS指示运算结果的标志位:CF,PF,AF,ZF,SF,OF,…指示机器状态的标志位:IF,…对应代码:nemu/include/cpu/reg.
h20目前只关心这个炒整数之菜油温几成热菜炒糊了没有PA1-2整数的表示和运算怎么来完成模拟呢nemu/src/cpu/alu.
c21uint32_talu_add(uint32_tsrc,uint32_tdest){printf("\e[0;31mPleaseimplementmeatalu.
c\e[0m\n");assert(0);return0;}第一步:找到需要实现的函数执行.
/nemu/nemu遇到错误提示PA1-2整数的表示和运算怎么来完成模拟呢nemu/src/cpu/alu.
c找到i386手册Sec.
17.
2.
2.
11有关ADD指令的描述p.
g.
261of421看FlagsAffected:OF,SF,ZF,AF,CF,andPFasdescribedinAppendixC找到AppendixC并仔细体会(AF不模拟)22第二步:掏出i386手册PA1-2整数的表示和运算怎么来完成模拟呢nemu/src/cpu/alu.
c23第三步:按照手册规定的操作进行实现uint32_talu_add(uint32_tsrc,uint32_tdest){uint32_tres=0;res=dest+src;set_CF_add(res,src);set_PF(res);//set_AF();set_ZF(res);set_SF(res);set_OF_add(res,src,dest);returnres;}voidset_CF_add(uint32_tresult,uint32_tsrc){cpu.
eflags.
CF=result尾数加减乘除法:阶码加减->尾数乘除尾数规格化和舍入31炒浮点数之菜禁止采用利用FLOAT将uint32_t表示的浮点数转换成float再进行运算得到结果(及其类似)的实现方案,比如fpu.
c中被注释掉的部分PA1-3浮点数的表示和运算浮点数的加减法(以internal_float_add()为例)nemu/src/cpu/fpu.
c第一步:处理各类边界条件:零、NaN、无穷大框架代码已经做好了第二步:提取符号、阶码和尾数框架代码也做好了,关键是尾数是否要加上隐藏位32PA1-3浮点数的表示和运算浮点数的加减法(以internal_float_add()为例)nemu/src/cpu/fpu.
c第三步:对阶小阶向大阶看齐,中间运算结果的阶码是大的那个阶小的那个数的尾数向右移shift位shift=大的阶码–小的阶码.
计算时有些细节问题看教程将尾数进行右移,这时候需要谈到保护位(guard,G)、舍入位(round,R)、和粘位(sticky,S)右移的时候尾数的低位进入GRSbits,注意sticky位的处理规则3323220|*|Fraction|G|R|S|*-ImpliedInteger框架代码中的实现技巧:将运算过程中间结果的尾数(不计隐藏位)扩展为26位,即,在提取尾数后,将尾数左移3位,最低3位表示GRSbitsPA1-3浮点数的表示和运算浮点数的加减法(以internal_float_add()为例)nemu/src/cpu/fpu.
c第四步:以无符号数加法计算尾数中间结果假设两个参与运算的尾数已经扩展了GRSbits根据浮点数符号位得到尾数的补码表示进行无符号数加法得到尾数的中间结果,根据尾数中间结果的符号确定结果浮点数的符号,并将尾数转回原码表示GRSbits自然参与运算得到的中间结果仍假设为具有26位尾数(不计隐藏位)3423220|*|Fraction|G|R|S|*-ImpliedInteger若中间结果隐藏位后面恰好为26位,自然天下太平.
但是!
若两个数的阶码恰好相等,这时候尾数加法的结果可能是:1xxxxx(26个x)+1yyyyy(26个y)=10zzzzz(26个z)隐藏位后面有27位了,怎么办PA1-3浮点数的表示和运算浮点数的加减法(以internal_float_add()为例)nemu/src/cpu/fpu.
c第五步:尾数规格化将尾数右移1位,同时阶码加1uint32_tinternal_normalize(uint32_tsign,int32_texp,uint64_tsig_grs)35若中间结果隐藏位后面恰好为26位,自然天下太平.
但是!
若两个数的阶码恰好相等,这时候尾数加法的结果可能是:1xxxxx(26个x)+1yyyyy(26个y)=10zzzzz(26个z)隐藏位后面有27位了,怎么办中间结果符号中间结果阶码,带符号数以方便后续乘除法的处理中间结果尾数(低3位是GRSbits)约定尾数不计隐藏位的长度为26位(传入时可能不满足),64位以方便后续乘除法的处理PA1-3浮点数的表示和运算浮点数的加减法(以internal_float_add()为例)nemu/src/cpu/fpu.
c第五步:尾数规格化uint32_tinternal_normalize(uint32_tsign,int32_texp,uint64_tsig_grs)函数功能:尾数规格化,顺便把舍入一起做了,返回一个符合IEEE754标准的浮点数(放在一个32位无符号整型数中)36Single-precisionFloatingPoint313023220|s|exponent|fraction|s-signPA1-3浮点数的表示和运算浮点数的加减法(以internal_float_add()为例)nemu/src/cpu/fpu.
c第五步:尾数规格化uint32_tinternal_normalize(uint32_tsign,int32_texp,uint64_tsig_grs)分情形讨论符号位不去管它,规格化和舍入都不会改变符号首先,对于加减法,中间结果的exp必然>=0第二,根据sig_grs的情况,要对其进行必要的左规和右规操作Case1:exp>0,且,sig_grs隐藏位后面超过了26位条件:sig_grs>>(23+3)>1且exp>0操作:将尾数右移1位,exp++,直至sig_grs>>(23+3)==1注意stickybit的操作例外:exp加过了头(>=0xFF了),阶码上溢Case2:exp>0,且,sig_grs隐藏位后面不足26位(例如:1.
xxx+(–1.
0))条件:sig_grs>>(23+3)==0且exp>0操作:尾数左移1位,exp--,直至sig_grs>>(23+3)==1例外:exp减过了头(==0了),得到了非规格化数注意为了配合非规格化数的阶码为0表示2-126,需要额外将尾数右移一次,注意stickybit的操作Case3:exp==0,且,sig_grs>>(23+3)==1额外将尾数右移一次,注意stickybit的操作其它情形:无需进行规格化(有哪些情形)37理解教程中的伪代码PA1-3浮点数的表示和运算浮点数的加减法(以internal_float_add()为例)nemu/src/cpu/fpu.
c第六步:舍入uint32_tinternal_normalize(uint32_tsign,int32_texp,uint64_tsig_grs)如果没有产生溢出,根据GRSbits的取值情况进行舍入就近舍入到偶数舍入若产生尾数加1,有可能出现破坏规格化的情况此时需要进行额外的一次右规并判断阶码上溢的情况第七步:得到返回结果简单问题,框架代码已经给出38实现完浮点数加法浮点数减法自然同时实现PA1-3浮点数的表示和运算浮点数的乘除法nemu/src/cpu/fpu.
c第一步:处理各类边界条件:零、NaN、无穷大第二步:提取符号、阶码和尾数(尾数采用64位表示比较方便)第三步:以无符号数加法计算尾数中间结果符号位的处理:简单阶码的处理:乘法:阶码相加,扣除多加的偏置常数除法:阶码相减,加上多减掉的偏置常数(可能减出负数来,所以exp中间结果用带符号数比较方便)尾数的处理(与加减法不同,先不预留出给GRSbits的3位)乘法:尾数做无符号整数乘法,中间结果不计隐藏位有46位尾数除法:被除数左移23位,除以除数,中间结果不计隐藏位有23位尾数我们约定包含GRSbits的尾数中间结果不计隐藏位是26位,因此需要将尾数因整数乘除法运算而多出来的尾数归到阶码上去39PA1-3浮点数的表示和运算浮点数的乘除法nemu/src/cpu/fpu.
c第三步:以无符号数加法计算尾数中间结果尾数的处理(与加减法不同,先不预留出给GRSbits的3位)乘法:尾数做无符号整数乘法,中间结果不计隐藏位有46位尾数除法:被除数左移23位,除以除数,中间结果不计隐藏位有23位尾数我们约定包含GRSbits的尾数中间结果不计隐藏位是26位,因此需要将尾数因整数乘除法运算而多出来的尾数位数归到阶码上去乘法:阶码额外减去46–26=20位除法:如果按照上述处理,则无需调整.
但是,为了保证精度,框架代码做了额外的移位处理(左移加右移共移了shift位),因此,阶码额外减去shift–26位4000001xxxx/1yyy000左移至高位无0右移至低位无01xxxx*1yyyy=1zzzz23个x,23个y,46个zPA1-3浮点数的表示和运算浮点数的乘除法nemu/src/cpu/fpu.
c第四步:尾数规格化,在加减法基础上的额外情形uint32_tinternal_normalize(uint32_tsign,int32_texp,uint64_tsig_grs)额外情形:exp>(23+3)>1的情形一样,需要右规,直至得到非规格化数:exp==0且sig_grs>>(23+3)0(舍入之后仍大于0)在while循环外多右移一次配合非规格化数阶码的约定或,得到规格化数:exp>0且sig_grs>>(23+3)==1例外:已经无法右规了sig_grs<=4(舍入后就是0了),exp仍然小于0,产生阶码下溢其它情况已在做加减法时列举了第五步:舍入第六步:得到返回结果41PA1-3浮点数的表示和运算§1-3.
3实验过程及要求1.
实现nemu/src/cpu/fpu.
c中的各个整数运算函数;2.
将internal_normalize()函数补完;3.
使用make命令编译项目;4.
使用.
/nemu/nemu命令执行NEMU并通过各个浮点数运算测试用例.
在实验报告中,回答以下问题:为浮点数加法和乘法各找两个例子:1)对应输入是规格化或非规格化数,而输出产生了阶码上溢结果为正(负)无穷的情况;2)对应输入是规格化或非规格化数,而输出产生了阶码下溢结果为正(负)零的情况.
是否都能找到若找不到,说出理由.
42fputest========fpu_test_add()passfpu_test_sub()passfpu_test_mul()passfpu_test_div()pass~PA1-3顺利完成~请通过makesubmit命令打包代码并上传cms,同时打包实验报告和调查问卷,谢谢!
测试用例位于nemu/src/cpu/test/fpu_test.
cPA1-3浮点数的表示和运算实现FPU的目的巩固理论知识,备战小测验在fpu.
c中实现的这些internal函数,用于实现fpu.
c中的浮点数运算功能,进而实现x87浮点数指令,框架代码已经给出了这些指令的实现,位于nemu/src/cpu/instr/x87.
c有关x87指令的详细说明,i386手册上没有在古代对于没有FPU的CPU,是采用软件浮点数(直接编译出基于整数运算的浮点数处理过程)来实现的在某些嵌入式系统上,使用binaryscaling这样的定点小数表示法x87指令参见:http://www.
felixcloutier.
com/x86/43PA1数据的表示、存取和运算44PA1数据的表示、存取和运算45我了解到了厨房里面有锅和冰箱.
同时学会了整数和浮点数两种食材的处理方法!
新东方初级班毕业PA1数据的表示、存取和运算PA1不设置小阶段整个PA1的提交截止时间2017年9月20日(周三)24点46祝大家学习快乐,身心健康!
欢迎大家踊跃参加问卷调查(量表一和二今天就要做一次,量表一、二、三到PA1截止时再做一次)47PA1到此结束
halocloud怎么样?halocloud是一个于2019下半年建立的商家,主要提供日本软银VPS,广州移动VDS,株洲联通VDS,广州移动独立服务器,Halo邮局服务,Azure香港1000M带宽月抛机器等。日本软银vps,100M/200M/500M带宽,可看奈飞,香港azure1000M带宽,可以解锁奈飞等流媒体,有需要看奈飞的朋友可以入手!点击进入:halocloud官方网站地址日本vp...
HostKvm也发布了开年促销方案,针对香港国际和美国洛杉矶两个机房的VPS主机提供7折优惠码,其他机房业务提供8折优惠码。商家成立于2013年,提供基于KVM架构的VPS主机,可选数据中心包括日本、新加坡、韩国、美国、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。下面列出几款主机配置信息。美国洛杉矶套餐:美国 US-Plan1CPU:1core内存:2GB硬盘...
RAKsmart 虽然是美国主机商,但是商家的主要客户群还是在我们国内,于是我们可以看到每次的国内节日促销活动期间商家也会发布促销。包括这次年中大促活动,RAKsmart商家也有发布为期两个月的年终活动,其中有商家擅长的独立服务器和便宜VPS主机。服务器包括站群服务器、特价服务器、高达10G带宽不限制流量的美国服务器。商家优惠活动,可以看到对应商品的优惠,同时也可以使用 优惠码 RAKBL9 同时...
根目录什么意思为你推荐
软银支付日本支付平台骁龙750g和765g哪个好骁龙768g什么水平天气预报哪个好用哪个最准确最准天气预报软件排行是怎样的?集成显卡和独立显卡哪个好集成显卡和独立显卡是什么区别呢哪个好?宝来和朗逸哪个好大众朗逸和宝来,哪个好点?手机管家哪个好有哪些人下了手机管家,最好的是哪个?电动牙刷哪个好电动牙刷和普通牙刷哪个好,有何区别?百度空间登录百度空间登陆qq空间登录不了为什么我的QQ登陆不了QQ空间辽宁联通网上营业厅网中国联通的初始服务密码一般是多少
深圳主机租用 免费试用vps 国外vps租用 三级域名网站 hkbn 息壤主机 优惠码 国外bt 网页背景图片 国内加速器 云全民 qq数据库下载 godaddy域名证书 空间出租 789电视 速度云 qq对话框 如何用qq邮箱发邮件 电信虚拟主机 中国电信测速器 更多