翻译文献-深入理解计算机系统_第1页
翻译文献-深入理解计算机系统_第2页
翻译文献-深入理解计算机系统_第3页
翻译文献-深入理解计算机系统_第4页
翻译文献-深入理解计算机系统_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

外文原文FROMJ2EEINTHEREALWORLDAUTHORJACKJONEYCOMPUTERSYSTEMSAPROGRAMMERSPERSPECTIVE深入理解计算机系统原文STACKFRAMEFORCALLINGPROCEDURE8844EBP0EBP0STACKFRAMEFORFIB_REC2020ESP2424ESP40AFTERSETUPBEFOREFIRSTRECURSIVECALLFIGURE321STACKFRAMEFORRECURSIVEFIBONACCIFUNCTIONSTATEOFFRAMEISSHOWNAFTERINITIALSETUPLEFT,ANDJUSTBEFORETHEFIRSTRECURSIVECALLRIGHTFORTHENONTERMINALCONDITION,INSTRUCTIONS10TO12SETUPTHEFIRSTRECURSIVECALLTHISINVOLVESALLOCATING12BYTESONTHESTACKTHATARENEVERUSED,ANDTHENPUSHINGTHECOMPUTEDVALUEN2ATTHISPOINT,THESTACKFRAMEWILLHAVETHEFORMSHOWNONTHERIGHTSIDEOFFIGURE321ITTHENMAKESTHERECURSIVECALL,WHICHWILLTRIGGERANUMBERNRETURNADDRESSSAVEDEBPUNUSEDSAVEDESISAVEDEBXNRETURNADDRESSSAVEDEBPUNUSEDSAVEDESISAVEDEBXUNUSEDN2OFCALLSTHATALLOCATESTACKFRAMES,PERFORMOPERATIONSONLOCALSTORAGE,ANDSOONASEACHCALLRETURNS,ITDEALLOCATESANYSTACKSPACEANDRESTORESANYMODIFIEDCALLEESAVEREGISTERSTHUS,WHENWERETURNTOTHECURRENTCALLATLINE14WECANASSUMETHATREGISTEREAXCONTAINSTHEVALUERETURNEDBYTHERECURSIVECALL,ANDTHATREGISTEREBXCONTAINSTHEVALUEOFFUNCTIONPARAMETERNTHERETURNEDVALUELOCALVARIABLEPREV_VALINTHECCODEISSTOREDINREGISTERESILINE14BYUSINGACALLEESAVEREGISTER,WECANBESURETHATTHISVALUEWILLSTILLBEAVAILABLEAFTERTHESECONDRECURSIVECALLINSTRUCTIONS15TO17SETUPTHESECONDRECURSIVECALLAGAINITALLOCATES12BYTESTHATARENEVERUSED,ANDPUSHESTHEVALUEOFN1FOLLOWINGTHISCALLLINE18,THECOMPUTEDRESULTWILLBEINREGISTEREAX,ANDWECANASSUMETHATTHERESULTOFTHEPREVIOUSCALLISINREGISTERESITHESEAREADDEDTOGIVETHERETURNVALUEINSTRUCTION19THECOMPLETIONCODERESTORESTHEREGISTERSANDDEALLOCATESTHESTACKFRAMEITSTARTSLINE24BYSETTINGTHESTACKFRAMETOTHELOCATIONOFTHESAVEDVALUEOFEBXOBSERVETHATBYCOMPUTINGTHISSTACKPOSITIONRELATIVETOTHEVALUEOFEBP,THECOMPUTATIONWILLBECORRECTREGARDLESSOFWHETHERORNOTTHETERMINALCONDITIONWASREACHED38ARRAYALLOCATIONANDACCESSARRAYSINCAREONEMEANSOFAGGREGATINGSCALARDATAINTOLARGERDATATYPESCUSESAPARTICULARLYSIMPLEIMPLEMENTATIONOFARRAYS,ANDHENCETHETRANSLATIONINTOMACHINECODEISFAIRLYSTRAIGHTFORWARDONEUNUSUALFEATUREOFCISTHATONECANGENERATEPOINTERSTOELEMENTSWITHINARRAYSANDPERFORMARITHMETICWITHTHESEPOINTERSTHESEARETRANSLATEDINTOADDRESSCOMPUTATIONSINASSEMBLYCODEOPTIMIZINGCOMPILERSAREPARTICULARLYGOODATSIMPLIFYINGTHEADDRESSCOMPUTATIONSUSEDBYARRAYINDEXINGTHISCANMAKETHECORRESPONDENCEBETWEENTHECCODEANDITSTRANSLATIONINTOMACHINECODESOMEWHATDIFFICULTTODECIPHER381BASICPRINCIPLESFORDATATYPETANDNINTEGERCONSTANTN,THEDECLARATIONTAN;HASTWOEFFECTSFIRST,ITALLOCATESACONTIGUOUSREGIONOFLNBYTESINMEMORY,WHERELISTHESIZEINBYTESOFDATATYPETLETUSDENOTETHESTARTINGLOCATIONASXASECOND,ITINTRODUCESANIDENTIFIERATHATCANBEUSEDASAPOINTERTOTHEBEGINNINGOFTHEARRAYTHEVALUEOFTHISPOINTERWILLBEXATHEARRAYELEMENTSCANBEACCESSEDUSINGANINTEGERINDEXRANGINGBETWEEN0ANDN1ARRAYELEMENTIWILLBESTOREDATADDRESSXALIASEXAMPLES,CONSIDERTHEFOLLOWINGDECLARATIONSCHARA12CHARB8DOUBLEC6DOUBLED5THESEDECLARATIONSWILLGENERATEARRAYSWITHTHEFOLLOWINGPARAMETERSARRAYACONSISTSOF12SINGLEBYTECHARELEMENTSARRAYCCONSISTSOF6DOUBLEPRECISIONFLOATINGPOINTVALUES,EACHREQUIRING8BYTESBANDDAREBOTHARRAYSOFPOINTERS,ANDHENCETHEARRAYELEMENTSARE4BYTESEACHTHEMEMORYREFERENCINGINSTRUCTIONSOFIA32AREDESIGNEDTOSIMPLIFYARRAYACCESSFOREXAMPLE,SUPPOSEEISANARRAYOFINTS,ANDWEWISHTOCOMPUTEEIWHERETHEADDRESSOFEISSTOREDINREGISTEREDXANDIISSTOREDINREGISTERECXTHENTHEINSTRUCTIONMOVLEDX,ECX,4,EAXWILLPERFORMTHEADDRESSCOMPUTATIONXE4I,READTHATMEMORYLOCATION,ANDSTORETHERESULTINREGISTEREAXTHEALLOWEDSCALINGFACTORSOF1,2,4,AND8COVERTHESIZESOFTHEPRIMITIVEDATATYPESPRACTICEPROBLEM317CONSIDERTHEFOLLOWINGDECLARATIONSSHORTS7SHORTT3SHORTU6ARRAYELEMENTSIZETOTALSIZESTARTADDRESSELEMENTIABCD112432848420XAXAIXBXB4IXCXC8IXDXD4ILONGDOUBLEV8LONGDOUBLEW4FILLINTHEFOLLOWINGTABLEDESCRIBINGTHEELEMENTSIZE,THETOTALSIZE,ANDTHEADDRESSOFELEMENTIFOREACHOFTHESEARRAYSARRAYELEMENTSIZETOTALSIZESTARTSIZEELEMENTISXSTXTUXUVXVWXW382POINTERARITHMETICCALLOWSARITHMETICONPOINTERS,WHERETHECOMPUTEDVALUEISSCALEDACCORDINGTOTHESIZEOFTHEDATATYPEREFERENCEDBYTHEPOINTERTHATIS,IFPISAPOINTERTODATAOFTYPET,ANDTHEVALUEOFPISXP,THENTHEEXPRESSIONPIHASVALUEXPLIWHERELISTHESIZEOFDATATYPETTHEUNARYOPERATORSISEQUIVALENTTOTHEDECLARATIONTYPEDEFINTROW3_T3ROW3_TA4CODE/ASM/DECIMAL5CCODE/ASM/DECIMAL5C1INTDECIMAL5INTX1INTDECIMAL5_OPTINTX223INTI3INTVAL04INTVAL04INTXENDX4556FORI0I01516RETURNRESULT17CODE/ASM/ARRAYCBOPTIMIZEDCCODEFIGURE323ORIGINALANDOPTIMIZEDCODETOCOMPUTEELEMENTI,KOFMATRIXPRODUCTFORFIXEDLENGTHARRAYSTHECOMPILERPERFORMSTHESEOPTIMIZATIONSAUTOMATICALLYWEHAVESHOWNTHECCODEFIX_PROD_ELE_OPTTOILLUSTRATETHEOPTIMIZATIONSMADEBYTHECCOMPILERINGENERATINGTHEASSEMBLYTHEACTUALASSEMBLYCODEFORTHELOOPISSHOWNBELOWAPTRISINEDX,BPTRINECX,RESULTINESI,CNTINEBX1L23LOOP2MOVLEDX,EAXCOMPUTETAPTR3IMULLECX,EAXCOMPUTEVBPTRT4ADDLEAX,ESIADDVRESULT5ADDL64,ECXADD64TOBPTR6ADDL4,EDXADD4TOAPTR7DECLEBXDECREMENTCNT8JNSL23IF,GOTOLOOPNOTETHATINTHEABOVECODE,ALLPOINTERINCREMENTSARESCALEDBYAFACTOROF4RELATIVETOTHECCODEPRACTICEPROBLEM320THEFOLLOWINGCCODESETSTHEDIAGONALELEMENTSOFAFIXEDSIZEARRAYTOVAL1/SETALLDIAGONALELEMENTSTOVAL/2VOIDFIX_SET_DIAGFIX_MATRIXA,INTVAL34INTI5FORI0I0,GOTOLOOPOBSERVETHATINTHEABOVECODE,VARIABLESBANDNMUSTBERETRIEVEDFROMMEMORYONEACHITERATIONTHISISANEXAMPLEOFREGISTERSPILLINGTHEREARENOTENOUGHREGISTERSTOHOLDALLOFTHENEEDEDTEMPORARYDATA,ANDHENCETHECOMPILERMUSTKEEPSOMELOCALVARIABLESINMEMORYINTHISCASETHECOMPILERCHOSETOSPILLVARIABLESBANDNBECAUSETHEYAREREADONLYTHEYDONOTCHANGEVALUEWITHINTHELOOPSPILLINGISACOMMONPROBLEMFORIA32,SINCETHEPROCESSORHASSOFEWREGISTERS39HETEROGENEOUSDATASTRUCTURESCPROVIDESTWOMECHANISMSFORCREATINGDATATYPESBYCOMBININGOBJECTSOFDIFFERENTTYPES中文翻译调用程序的栈帧8844EBP0EBP0FIB_REC的栈帧2020ESP2424ESP40初始后的栈帧第一次递归调用前的栈帧图321递归的FIBONACCI函数栈帧初始后的栈帧左第一次递归调用前的栈帧右在无终端的条件下,10到12行初始化第一次递归调用。这包括在栈的未使用空间分配12字节,然后把计算的结果N2压入栈中。此时栈帧如图321中右面表格所示。然后开始递归调用,将触发一系列的调用如分配栈帧,在内存上进行操作,等等。当每次调用返回时,会自动释放栈空间并恢复所有被修改的被调用者保存寄存器。这样,当我们返回当前调用14行时,我们可以认为寄存器EAX的值是递归调用返回的值,而寄存器EBX中的值是函数参数N的值。该返回值C代码中的局部变量PREV_VAL存储于寄存器ESI中14行。通过使用被调用者保存寄存器,我们可以确定在第二次递归调用后这个值仍是有效的。代码15行到17行初始化第二次递归调用,再一次在未使用的栈空间上分配12字节并把N1的值压入。接下来的调用18行之后,计算结果存入寄存器EAX,我们可以认为前一次的调用结果在寄存器ESI中。他们相加给出返回值19行。N返回地址保留的EBP未使用保留的ESI保留的EBXN返回地址保留的EBP未使用保留的ESI保留的EBX未使用N2结束代码复位所有寄存器并释放栈帧。它首先将栈帧设置为保存的寄存器EBX值的位置。注意,通过计算相应的EBP值的栈位置,计算结果将是正确的,不管是否满足终端条件。38数组分配和访问C语言中数组是一种把标量型数据集合成更大型数据类型的方式。C用一种特别简单的方法来实现数组,因此转译成机器语言简单明确。C的一个不寻常的特点是可以用指针指向数组元素,并用指针进行计算。这些会在汇编代码中转为地址计算。优化编译器非常善于简化数组索引使用的地址计算,但是这使C代码与它转化的机器代码之间的对应很难理解。381基本原则对于数据类型T和整型常量N,声明TAN;有两个效用。首先,它在内存中分配一个长度为LN字节连续的区域,L是数据类型T的长度单位为字节。我们把起始位置标记为XA。其次,它引用一个识别符A作为指针指向数组的起始位置。这个指针的值就是XA。这样访问数组元素就可以使用0N1之间的整型索引。数组元素I的存放地址为XALI。示例,如下面声明CHARA12CHARB8DOUBLEC6DOUBLED5这些声明会产生带以下参数的数组数组A是由12个单字节CHAR型元素组成。数组C有六个双精度浮点型值,每个需要8字节。数组B和D都是指针数组,因此每个元素是4字节。数组元素大小总长度起始地址元素IABCD112432848420XAXAIXBXB4IXCXC8IXDXD4IIA32的存储器引用指令被设计用来简化数组访问。举例来说,E是一个整型数组,我们想要计算EI的地址,E的地址存在寄存器EDX中,而I存在寄存器ECX中。然后指令MOVLEDX,ECX,4,EAX会完成地址计算XE4I,读存储器该位置,并将结果存入寄存器EAX中。提示伸缩因子1,2,4和8适用于基本数据类型大小。练习317考虑如下声明SHORTS7SHORTT3SHORTU6LONGDOUBLEV8LONGDOUBLEW4在下面的表格中填入每个数组中元素大小,总大小,和每个数组中第I个元素的地址。数组元素大小总大小起始地址元素ISXSTXTUXUVXVWXW382指针运算C允许对指针进行运算,计算的值的大小与指针涉及的数据类型大小相一致。也就是说,如果P是一个指向数据类型为T指针,并且P的值为XP,那么当L的大小为数据类型T的大小时,表达式PI的运算结果为XPLI。单目运算符等价于声明TYPEDEFINTROW3_T3ROW3_TA4CODE/ASM/DECIMAL5CCODE/ASM/DECIMAL5C1

温馨提示

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

评论

0/150

提交评论