第3章程序的机器级表示:——数据计算机组成与结构2016年4月主讲教师赵欢******@-dimensionalMulti-dimensional(nested)Multi-essAlignmentUnionsBasicDataTypesIntegralStored&operatedoningeneral(integer) ASM Bytes Cbyte b 1 [unsigned]charword w 2 [unsigned]shortdoubleword l 4 [unsigned]intquadword q 8 [unsigned]longint(x86-64)FloatingPointStored&operatedoninfloatingpointregistersIntel ASM Bytes CSingle s 4 floatDouble l 8 doubleExtended t 10/12/16 longdoubleArrayAllocationBasicPrincipleTA[L];ArrayofdatatypeTandlengthLContiguouslyallocatedregionofL*sizeof(T)bytescharstring[12];xx+12intval[5];xx+4x+8x+12x+16x+20doublea[3];x+24xx+8x+16char*p[3];xx+8x+16x+24xx+4x+8x+12IA32x86-essBasicPrincipleTA[L];ArrayofdatatypeTandlengthLIdentifierAcanbeusedasapointertoarrayelement0:TypeT*Reference Type Valueval[4] int 3val int* xval+1 int* x+4&val[2] int* x+8val[5] int ??*(val+1) int 5val+i int* x+4iintval[5];15213xx+4x+8x+12x+16x+20ArrayExampleDeclaration“zip_digcmu”equivalentto“intcmu[5]”essive20byteblocksNotguaranteedtohappeningeneral#defineZLEN5typedefintzip_dig[ZLEN];zip_digcmu={1,5,2,1,3};zip_digmit={0,2,1,3,9};zip_digucb={9,4,7,2,0};zip_digcmu;15213162024283236zip_digmit;02139364044485256zip_digucb;essingExampleRegister%edxcontainsstartingaddressofarrayRegister%eaxcontainsarrayindexDesireddigitat4*%eax+%edxUsememoryreference(%edx,%eax,4)intget_digit(zip_digz,intdig){returnz[dig];}#%edx=z#%eax=digmovl(%edx,%eax,4),%eax#z[dig]IA32zip_digcmu;15213162024283236#edx=z movl $0,%eax #%eax=: #loop: addl $1,(%edx,%eax,4) #z[i]++ addl $1,%eax #i++ cmpl $5,%eax #i:5 jne .L4 #if!=,gotoloopArrayLoopExample(IA32)voidzincr(zip_digz){inti;for(i=0;i<ZLEN;i++)z[i]++;}Multidimensional(Nested)ArraysDeclarationTA[R][C];olumnsTypeTelementrequiresKbytesArraySizeR*C*KbytesArrangementRow-MajorOrderingA[0][0]A[0][C-1]A[R-1][0]• • •• • •A[R-1][C-1]••••••intA[R][C];• • •A[0][0]A[0][C-1]• • •A[1][0]A[1][C-1]• • •A[R-1][0]A[R-1][C-1]• • •4*R*CBytesNestedArrayExampl
计算机组成与结构08-程序的机器级表达:数据 来自淘豆网www.taodocs.com转载请标明出处.