Sie sind auf Seite 1von 226

27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina1

Pgina2

Sistemasdecomputador

Aperspectivadeumprogramador

Pgina3

https://translate.googleusercontent.com/translate_f#202 1/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Estapginafoiintencionalmentedeixadaembranco

Pgina4

Sistemasdecomputador

Aperspectivadeumprogramador

RandalE.Bryant

UniversidadeCarnegieMellon

DavidR.O'Hallaron

UniversidadeCarnegieMelloneLaboratriosIntel
https://translate.googleusercontent.com/translate_f#202 2/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

PrenticeHall
BostonColumbusIndianapolisNovaIorqueSoFranciscoUpperSaddleRiver
AmsterdCidadedoCaboDubaiLondresMadridMiloMuniqueParisMontrealToronto
DelhiCidadedoMxicoSoPauloSydneyHongKongSeulSingapuraTaipeiTquio

Pgina5

DireoEditorial:MarciaHorton
Editorchefe:MichaelHirsch
EditordeAquisies:MattGoldstein
Assistenteeditorial:ChelseaBell
DiretordeMarketing:MargaretWaples
CoordenaodeMarketing:KathrynFerranti
EditorGerente:JeffHolcomb
ManufaturaoemaltaCarolMelville
DireodeArte:LindaKnowles
CapaDesigner:ElenaSidorova
ImageInteriorPermissoCoordenador:RichardRodrigues
Artedatampa:RandalE.BryanteDavidR.O'Hallaron
ProdutordeMdia:KatelynBoller
GestodeProjetoseDesigndeInteriores:PaulC.Anagnostopoulos,WindfallSoftware
Composio:JoeSnowden,CoventryComposio
Impressora/Pasta:EdwardsBrothers
Impressoradecapa:LehighPhoenixColor/Hagerstown
Copyright2011,2003porRandalE.BryanteDavidR.O'Hallaron.Todososdireitosreservados.
FabricadonosEstadosUnidosdaAmrica.Estapublicaoprotegidapordireitosautorais,
Eapermissodeveserobtidadoeditorantesdequalquerreproduoproibida,
Armazenamentoemumsistemaderecuperao,outransmissoemqualquerformaouporqualquermeio,eletrnico,
Mecnico,fotocpia,gravao,oudamesmaforma.Paraobterpermisso(s)parausarmaterial
Destetrabalho,envieumpedidoporescritoPearsonEducation,Inc.,Permisses
Departamento,501BoylstonStreet,Suite900,Boston,Massachusetts02116.
Muitasdasdesignaesdosfabricantesedovendedorparadistinguirosseusprodutosso
Reivindicadascomomarcasregistradas.Quandoessasdesignaesaparecemnestelivro,eoeditor
Estavacientedeumareivindicaodemarcaregistrada,asdesignaesforamimpressasem
cpsulas.
DadosdeCatalogaonaPublicaodaBibliotecadoCongresso
Bryant,Randal.
Sistemasdecomputador:aperspectivadeumprogramador/RandalE.Bryant,DavidR.
O'Hallaron.2aed.
P.cm.
Incluirefernciasbibliogrficasendice.
ISBN13:9780136108047(papelalcalino)
ISBN10:0136108040(papelalcalino)
1.Sistemasinformticos.2.Computadores.3.Telecomunicaes.4.Interfacesdousurio
(Sistemasdecomputador)I.O'Hallaron,DavidRichard.II.Ttulo.
QA76.5.B7952010
004dc22
2009053083
10987654321EB1413121110

https://translate.googleusercontent.com/translate_f#202 3/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

ISBN10:0136108040
ISBN13:9780136108047

Pgina6

Paraosalunoseinstrutoresdo15213
CursonaCarnegieMellonUniversity,porinspirar
Nsparadesenvolvererefinaromaterialparaestelivro.

Pgina7

https://translate.googleusercontent.com/translate_f#202 4/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Estapginafoiintencionalmentedeixadaembranco

Pgina8

Contedo

Prefcioxix

Sobreosautoresxxxiii

Umpasseiodesistemasdecomputador1

1.1 InformaoBits+Contexto3
1.2 Programassotraduzidosporoutrosprogramasemformulriosdiferentes4
1,3 Pagaparaentendercomofuncionamossistemasdecompilao6
1,4 ProcessadoresLereInterpretarInstruesArmazenadasnaMemria7

https://translate.googleusercontent.com/translate_f#202 5/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
1.4.1OrganizaodeHardwaredeumSistema7
1.4.2ExecutandooOlPrograma10
1,5 CachesMatter12
1,6 Dispositivosdearmazenamentoformamumahierarquia13
1,7 Osistemaoperacionalgerenciaohardware14
1.7.1Processos16
1.7.2Threads17
1.7.3MemriaVirtual17
1.7.4Ficheiros19
1,8 Sistemasdecomunicaocomoutrossistemasusandoredes20
1,9 TemasImportantes21
1.9.1Concorrnciaeparalelismo21
1.9.2AImportnciadasAbstraesemSistemasComputacionais24
1,10 Resumo25
Notasbibliogrficas26

ParteIEstruturaeExecuodoPrograma

RepresentandoeManipulandoInformaes29

2.1 Armazenamentodeinformaes33
2.1.1Notaohexadecimal34
2.1.2Palavras38
2.1.3Tamanhosdedados38
Vii

Pgina9

Viii Contedo

2.1.4EndereamentoeOrdenaodeBytes39
2.1.5Representaodestrings46
2.1.6RepresentandooCdigo47
2.1.7Introduolgebrabooleana48
2.1.8OperaesemnveldebitemC51
2.1.9OperaesLgicasemC54
2.1.10OperaesdedeslocamentoemC54
2.2 RepresentaesInteiras56
2.2.1TiposdeDadosIntegrados57
2.2.2Codificaessemsinal58
2.2.3CodificaesdeComplementodeDois60
2.2.4Conversesentreassinadosenoassinados65
2.2.5Assinadovs.NoassinadoemC69
2.2.6Expansodarepresentaodebitsdeumnmero71
2.2.7TruncandoNmeros75
2.2.8Conselhossobreassinadovs.noassinado76
2,3 Aritmticadenmerosinteiros79
2.3.1Adionoassinada79
2.3.2AdiodeComplementodeDois83
2.3.3NegaodeComplementodeDois87
2.3.4Multiplicaonoassinada88
2.3.5MultiplicaodoDoisComplemento89
2.3.6MultiplicaoporConstantes92
2.3.7DivisoporPoderesdeDois95
2.3.8ConsideraesFinaissobreAritmticaInteira98
2,4 Pontoflutuante99
2.4.1NmerosBinriosFracionrios100
2.4.2RepresentaoIEEEdePontoFlutuante103
2.4.3NmerosdeExemplo105
2.4.4Arredondamento110
2.4.5Operaesdepontoflutuante113
2.4.6PontoflutuanteemC114
2,5 Resumo118
Notasbibliogrficas119
Problemascomastarefasdomsticas119
SoluesparaProblemasdePrtica134

https://translate.googleusercontent.com/translate_f#202 6/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
3

Representaoemnveldemquinadosprogramas153
3.1 Umaperspectivahistrica156
3.2 CodificaesdeProgramas159

Pgina10

Contedo Ix

3.2.1Cdigodonveldemquina160
3.2.2ExemplosdeCdigo162
3.2.3Notassobreaformatao165
3,3 Formatosdedados167
3,4 Acessandoinformaes168
3.4.1EspecificadoresdeOperandos169
3.4.2InstruesdeMovimentodeDados171
3.4.3ExemplodeMovimentodeDados174
3,5 Operaesaritmticaselgicas177
3.5.1Endereodecargaefetiva177
3.5.2OperaesUnriaseBinrias178
3.5.3OperaesdeMudana179
3.5.4Discusso180
3.5.5OperaesEspeciaisdeAritmtica182
3.6 Controlo185
3.6.1Cdigosdecondio185
3.6.2AcessandoosCdigosdeCondio187
3.6.3Instruesdesaltoesuascodificaes189
3.6.4TraduzindoSucursaisCondicionais193
3.6.5Loops197
3.6.6InstruesdeMovimentoCondicional206
3.6.7Instruesdecomutao213
3,7 Procedimentos219
3.7.1Estruturadeestruturadepilha219
3.7.2TransfernciadoControle221
3.7.3Registrarconvenesdeutilizao223
3.7.4ProcedimentoExemplo224
3.7.5Procedimentosrecursivos229
3,8 AlocaodeArrayeAcesso232
3.8.1PrincpiosBsicos232
3.8.2Aritmticadoponteiro233
3.8.3Arraysaninhados235
3.8.4Matrizesdetamanhofixo237
3.8.5Matrizesdetamanhovarivel238
3.9 EstruturasdeDadosHeterogneas241
3.9.1Estruturas241
3.9.2Unies244
3.9.3Alinhamentodedados248
3.10 Juntandoos:CompreendendoPonteiros252
3.11 Avidanomundoreal:usandoodepuradorgdb254
3.12 RefernciasdememriaOutofBoundseestourodebuffer256
3.12.1Ataqueaosataquesdeestourodobuffer261

Pgina11

https://translate.googleusercontent.com/translate_f#202 7/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

X Contedo

3.13 X8664:EstendendoIA32para64Bits267
3.13.1HistriaeMotivaoparax8664268
3.13.2Umavisogeraldex8664270
3.13.3AcessosInformaes273
3.13.4Control279
3.13.5EstruturasdeDados290
3.13.6Observaesfinaissobrex8664291
3.14 Representaesemnveldemquinadeprogramasdepontoflutuante292
3.15 Resumo293
Notasbibliogrficas294
Problemascomastarefasdomsticas294
SoluesparaProblemasdePrtica308

Arquiteturadoprocessador333
4.1 AarquiteturadoconjuntodeinstruesY86336
4.1.1EstadoVisveldoProgramador336
4.1.2Y86Instrues337
4.1.3Codificaodeinstrues339
4.1.4Y86Excepes344
4.1.5ProgramasY86345
4.1.6AlgunsdetalhesdainstruoY86350
4,2 DesignLgicoeaLinguagemdeControledeHardwareHCL352
4.2.1PortesLgicos353
4.2.2CircuitosCombinacionaiseExpressesBoleanasHCL354
4.2.3CircuitoscombinadosWordLeveleHCLInteger
Expresses355
4.2.4Definirassociao360
4.2.5Memriaesincronizao361
4.3 ImplementaesY86Seqenciais364
4.3.1Organizaodatransformaoemfases364
4.3.2EstruturadeHardwareSEQ375
4.3.3SEQTiming379
4.3.4ImplementaesdaEtapaSEQ383
4.4 Princpiosgeraisdecanalizao391
4.4.1Pipelinescomputacionais392
4.4.2UmaVisoDetalhadadaOperaodoPipeline393
4.4.3LimitaesdePipelining394
4.4.4PipelagemdeumSistemacomFeedback398
4,5 ImplementaesPipelineY86400
4.5.1SEQ+:Reorganizandoosestgiosdeclculo400

Pgina12

Contedo XI

4.5.2Inseroderegistrosdepipeline401
4.5.3ReorganizandoeRelabilizandoSinais405
4.5.4PrximaPCPrediction406
4.5.5Riscosdatubulao408
4.5.6Evitandoosperigosdedadosporbloqueio413
4.5.7EvitandoRiscosdeDadosporEncaminhamento415
4.5.8PerigosdeDadosdeCarga/Utilizao418
4.5.9ManipulaodeExcees420
4.5.10ImplementaesdoStagePIPE423
4.5.11LgicadeControledePipeline431
4.5.12AnlisedeDesempenho444
4.5.13Negciosinacabados446
4.6 Resumo449
4.6.1SimuladoresY86450

https://translate.googleusercontent.com/translate_f#202 8/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Notasbibliogrficas451
Problemascomastarefasdomsticas451
SoluesparaProblemasdePrtica457

OtimizandooDesempenhodoPrograma473
5.1 CapacidadeseLimitaesdeOtimizarCompiladores476
5.2 ExpressandooDesempenhodoPrograma480
5,3 ExemplodePrograma482
5.4 Eliminandoineficinciasdeloop486
5.5 Chamadasdeprocedimentodereduo490
5,6 EliminandomemriadesnecessriaReferncias491
5,7 Compreendendoprocessadoresmodernos496
5.7.1Operaogeral497
5.7.2DesempenhodaUnidadeFuncional500
5.7.3Ummodeloabstratodeoperaodoprocessador502
5,8 LoopUnrolling509
5,9 Melhorandooparalelismo513
5.9.1Acumuladoresmltiplos514
5.9.2Transformaodareassociao518
5,10 Resumodosresultadosparaotimizarocdigodecombinao524
5.11 AlgunsFatoresLimitadores525
5.11.1RegistoDerramamento525
5.11.2PrevenodeSubdivisoePenalidadesdeMispredio526
5,12 CompreendendooDesempenhodaMemria531
5.12.1Desempenhodecarga531
5.12.2DesempenhodaLoja532

Pgina13

Xii Contedo

5,13 AVidanoMundoReal:TcnicasdeMelhoriadoDesempenho539
5,14 IdentificandoeEliminandoGargalosdeDesempenho540
5.14.1PerfisdeProgramas540
5.14.2UsandoumProfilerparaorientaraotimizao542
5.14.3LeideAmdahl545
5,15 Resumo547
Notasbibliogrficas548
ProblemascomaCasa549
SoluesparaProblemasdePrtica552

Ahierarquiadememria559
6.1 Tecnologiasdearmazenamento561
6.1.1MemriadeAcessoAleatrio561
6.1.2Armazenamentoemdisco570
6.1.3Discosdeestadoslido581
6.1.4Tendnciasdatecnologiadearmazenamento583
6.2 Localidade586
6.2.1LocalidadedasRefernciasaosDadosdoPrograma587
6.2.2LocalidadedainstruoFetches588
6.2.3ResumodaLocalidade589
6.3 Ahierarquiadememria591
6.3.1ArmazenamentoemCachenaHierarquiadeMemria592
6.3.2SumriodosConceitosdeHierarquiadeMemria595
6,4 MemriasemCache596
6.4.1Organizaogenricadememriaemcache597
6.4.2Cachescommapeamentodireto599
6.4.3DefinirCachesAssociativos606
6.4.4CachesTotalmenteAssociativos608
6.4.5Problemascomescrita611
6.4.6AnatomiadeumaHierarquiadeCacheReal612
6.4.7Impactonodesempenhodosparmetrosdecache614

https://translate.googleusercontent.com/translate_f#202 9/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
6.5
6,6 EscrevercdigoCachefriendly615
Juntandoo:OImpactodasCachesnoDesempenhodoPrograma620
6.6.1AMemriaMontanha621
6.6.2ReorganizandoLoopsparaAumentaraLocalidadeEspacial625
6.6.3ExplorandoaLocalidadeemseusProgramas629
6,7 Resumo629
Notasbibliogrficas630
Problemascomastarefasdomsticas631
SoluesparaProblemasdePrtica642

Pgina14

Contedo Xiii

ParteIIExecutandoProgramasemumSistema

Ligao653
7.1 CompiladorDrivers655
7,2 Ligaoesttica657
7.3 Arquivosdeobjeto657
7,4 Arquivosdeobjetosremontveis658
7,5 SmbolosesmbolosQuadros660
7,6 SmboloResoluo663
7.6.1ComoosLinkersResolvemSmbolosGlobaisMultiplicados664
7.6.2Vinculaocombibliotecasestticas667
7.6.3Comoosvinculadoresusambibliotecasestticaspararesolverreferncias670
7,7 Realocao672
7.7.1Entradasderealocao672
7.7.2Relocaoderefernciasdesmbolos673
7,8 Arquivosdeobjetosexecutveis678
7,9 CarregandoArquivosdeObjetoExecutvel679
7,10 Vinculaodinmicacombibliotecascompartilhadas681
7,11 Carregandoevinculandobibliotecascompartilhadasdeaplicativos683
7,12 Cdigodeposioindependente(PIC)687
7,13 FerramentasparaManipularArquivosdeObjeto690
7,14 Resumo691
Notasbibliogrficas691
Problemascomastarefasdomsticas692
SoluesparaProblemasdePrtica698

FluxodeControleExcepcional701
8.1 Excepes703
8.1.1ManipulaodeExcees704
8.1.2ClassesdeExcees706
8.1.3ExceesemsistemasLinux/IA32708
8.2 Processos712
8.2.1FluxodeControleLgico712
8.2.2FluxosConcorrentes713
8.2.3Espaodeendereosprivado714
8.2.4ModosdeUsurioeKernel714
8.2.5InterruptoresdeContexto716

Pgina15

https://translate.googleusercontent.com/translate_f#202 10/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Xiv Contedo

8,3 TratamentodeErrosdeChamadadoSistema717
8,4 Controledeprocesso718
8.4.1ObtendoIDsdeProcesso719
8.4.2Criandoeterminandoprocessos719
8.4.3ProcessosdeReapingChild723
8.4.4ColocarProcessosparaDormir729
8.4.5Carregandoeexecutandoprogramas730
8.4.6Usandogarfo eexecveexecutarprogramas733
8,5 Sinais736
8.5.1Terminologiadosinal738
8.5.2Enviarsinais739
8.5.3Recepodesinais742
8.5.4ProblemasdeManuseiodeSinal745
8.5.5Manuseioporttildesinais752
8.5.6Bloqueioedesbloqueioexplcitodesinais753
8.5.7SincronizandofluxosparaevitarbugsdesagradveisConcurrency755
8,6 Saltosnolocais759
8,7 FerramentasparaManipularProcessos762
8,8 Resumo763
Notasbibliogrficas763
Problemascomastarefasdomsticas764
SoluesparaProblemasdePrtica771

MemriaVirtual775
9,1 Endereamentofsicoevirtual777
9,2 EspaosdeEndereo778
9,3 VMcomoumaferramentaparacache779
9.3.1OrganizaodeCacheDRAM780
9.3.2Tabelasdepgina780
9.3.3Acessosdepgina782
9.3.4FalhasdePgina782
9.3.5AlocaodePginas783
9.3.6Localidadeparaoresgatenovamente784
9,4 VMcomoumaferramentaparagerenciamentodememria785
9,5 VMcomoumaferramentaparaproteodememria786
9,6 Traduodeendereos787
9.6.1IntegrandoCacheseVM791
9.6.2AceleraraconversodeendereoscomumTLB791
9.6.3TabelasdePginasdeNveisMltiplos792
9.6.4Juntandoa:Conversodeendereosdepontaaponta794
9,7 EstudodeCaso:OSistemadeMemriaIntelCorei7/Linux799

Pgina16

Contedo Xv

9.7.1Corei7Conversodeendereos800
9.7.2SistemadememriavirtualLinux803
9,8 MapeamentodeMemria807
9.8.1Objetoscompartilhadosrevisitados807
9.8.2Afunofork Revisited809
9.8.3AfunoexecveRevisited810
MapeamentodeMemria9.8.4emnveldeusuriocomafunommap 810
9,9 Alocaodinmicadememria812
9.9.1OsmallocefreeFunes814
9.9.2Porqueaalocaodinmicadememria?816
9.9.3RequisitoseObjetivosdoAlocador817

https://translate.googleusercontent.com/translate_f#202 11/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
9.9.4Fragmentao819
9.9.5QuestesdeImplementao820
9.9.6ListasImplcitasLivres820
9.9.7Colocandoblocosalocados822
9.9.8Divisodeblocoslivres823
9.9.9ObtendomemriaHeapadicional823
9.9.10Blocoslivrescoalescentes824
9.9.11CoalescnciacomEtiquetasdeLimite824
9.9.12Colocandoemconjunto:ImplementandoumAlocadorSimples827
9.9.13ListasLivresExplcitas835
9.9.14Listaslivressegregadas836
9,10 ColetadeLixo838
9.10.1Princpiosbsicosdocoletordelixo839
9.10.2ColetoresdeLixoMark&Sweep840
9.10.3MarcaConservadoraeVarreduraparaProgramasC842
9,11 ErroscomunsrelacionadosmemriaemprogramasC843
9.11.1DereferenciandoBadPointers843
9.11.2Leituradememrianoinicializada843
9.11.3Permissodeestourodobufferdepilha844
9.11.4SupondoqueosPonteiroseosObjetosaquese
MesmaEsfera844
9.11.5FazendoErrosOffbyOne845
9.11.6Fazendorefernciaaumponteiroemvezdoobjetoapontapara845
9.11.7Malentendidoaritmticadeponteiros846
9.11.8ReferenciandoVariveisInexistentes846
9.11.9Referenciandodadosemblocosdeheapgratuitos847
9.11.10Introduoaosvazamentosdememria847
9,12 Resumo848
Notasbibliogrficas848
Problemascomastarefasdomsticas849
Soluesparaproblemasdeprtica853

Pgina17

Xvi Contedo

ParteIIIInteraoecomunicaoentre
Programas

10

E/Sdonveldosistema861
10,1 UnixI/O862
10,2 Abrindoefechandoarquivos863
10,3 Leituraegravaodearquivos865
10,4 LeituraeEscritaRobustacomoPacoteRio867
10.4.1FunesdeEntradaeSadaUnbuffereddaRio867
10.4.2FunesdeentradadebufferdoRio868
10,5 Leiturademetadadosdearquivos873
10,6 Compartilhandoarquivos875
10,7 RedirecionamentodeE/S877
10,8 E/Spadro879
10,9 Juntandoo:QuaisfunesdeI/Odevousar?880
10.10Resumo881
Notasbibliogrficas882
Problemascomastarefasdomsticas882
Soluesparaproblemasdeprtica883

11

Programaoderede885
11,1 OmodelodeprogramaoClienteServidor886
11,2 Redes887
11,3 OGlobalIPInternet891
11.3.1EndereosIP893
11.3.2NomesdeDomnionaInternet895
https://translate.googleusercontent.com/translate_f#202 12/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
11.3.3LigaesInternet899
11,4 OSocketsInterface900
11.4.1Estruturasdeendereodesoquete901
11.4.2Afunodesoquete902
11.4.3Afunodeconexo 903
11.4.4AFunoopen_clientfd 903
11.4.5Afunodeligao 904
11.4.6AFuno905ouvir
11.4.7AFunoopen_listenfd 905
11.4.8Oaceito Funo907
11.4.9ExemploEchoClienteeServidor908

Pgina18

Contedo Xvii

11,5 ServidoresWeb911
11.5.1NoesbsicasdaWeb911
11.5.2ContedodaWeb912
11.5.3TransaesHTTP914
11.5.4ServindoContedoDinmico916
11,6 Juntandoo:OpequenoservidordaWeb919
11,7 Resumo927
Notasbibliogrficas928
Problemascomastarefasdomsticas928
SoluesparaProblemasdePrtica929

12

ProgramaoConcorrente933
12,1 ProgramaoConcorrentecomProcessos935
12.1.1Umservidorconcorrentebaseadoemprocessos936
12.1.2Prsecontrasdosprocessos937
12,2 ProgramaoConcorrentecomMultiplexaodeE/S939
12.2.1UmservidorconcorrentecomeventosbaseadoemE/S
Multiplexao942
12.2.2PrsecontrasdamultiplexaodeE/S946
12,3 ProgramaoConcorrentecomThreads947
12.3.1Modelodeexecuodethread948
12.3.2FiosPosix948
12.3.3CriandoThreads950
12.3.4Fiosdeterminao950
12.3.5ColhendoFiosTerminados951
12.3.6DesanexandoThreads951
12.3.7InicializandoThreads952
12.3.8Umservidorconcorrentebaseadoemthreads952
12,4 Variveiscompartilhadasemprogramascomlinhas954
12.4.1MemriadeThreadsModelo955
12.4.2MapeandoVariveisparaaMemria956
12.4.3Variveiscompartilhadas956
12,5 Sincronizaodesegmentoscomsemforos957
12.5.1Grficosdeprogresso960
12.5.2Semforos963
12.5.3Usandosemforosparaexclusomtua964
12.5.4Usandosemforosparaplanejarrecursoscompartilhados966
12.5.5Juntandoo:UmServidorConcorrenteBaseadoem
Prethreading970
12,6 UsandoThreadsparaParalelismo974

https://translate.googleusercontent.com/translate_f#202 13/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina19

Xviii Contedo

12,7 Outrosassuntosdesimultaneidade979
12.7.1SeguranadeThread979
12.7.2Reentrncia980
12.7.3UsandoFunesdeBibliotecaExistentesemProgramascomRoscas982
12.7.4Raas983
12.7.5Deadlocks985
12,8 Resumo988
Notasbibliogrficas989
Problemascomastarefasdomsticas989
SoluesparaProblemasdePrtica994

UMA

Tratamentodeerros999
A.1 TratamentodeerrosemsistemasUnix1000
A.2 Wrappersdemanipulaodeerros1001

Referncias1005

ndice1011

Pgina20

Prefcio

Estelivro(CS:APP)paracientistasdacomputao,engenheirosdecomputadoreseoutros
Quequeremsercapazesdeescrevermelhoresprogramasaprendendooqueestacontecendo
Ocap"deumsistemadecomputador.

https://translate.googleusercontent.com/translate_f#202 14/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Onossoobjectivoexplicarosconceitosduradourossubjacentesatodosossistemasinformticos,
Emostrarlheasformasconcretaspelasquaisessasidiasafetamacorreo,
Eutilidadedeseusprogramasdeaplicao.Outroslivrosdesistemassoescritos
daperspectivadeumconstrutor,quedescrevecomoimplementarohardwareouosis
Incluindoosistemaoperacional,ocompiladoreainterfacederede.
Estelivrofoiescritoapartirdaperspectivadeumprogramador,descrevendocomoaplicativo
Osprogramadorespodemusarseuconhecimentodeumsistemaparaescreverprogramasmelhores.Do
Curso,aprenderoqueumsistemasupostofazerforneceumbomprimeiropassoemaprender
Comoconstruirum,eassimestelivrotambmservecomoumaintroduovaliosapara
Aquelesquepassamaimplementarsistemasdehardwareesoftware.
Sevocestudareaprenderosconceitosnestelivro,vocestarnoseucaminhopara
Tornandoseoraro"programadordepoder"quesabecomoascoisasfuncionamecomo
Paracorrigilosquandoelesquebram.Onossoobjectivoapresentarosconceitos
Maneirasquevocvaiencontrartilimediatamente.Voctambmestarpreparadoparaaprofundar,
Estudandotpicoscomocompiladores,arquiteturadecomputadores,sistemasoperacionais,
Sistemasdecamaseredes.

PressupostossobreoFundodoLeitor
Aapresentaodocdigomquinanolivrobaseadaemdoisformatosrelacionados
SuportadopelaInteleseusconcorrentes,coloquialmenteconhecidocomo"x86."IA32o
Mquinaquesetornouopadrodefactoparaumavastagamadesistemas.
X8664umaextensodoIA32parapermitirqueosprogramasoperememdados
Umaamplagamadeendereosdememria.Comoossistemasx8664socapazesdeexecutar
CdigoIA32,ambasestasformasdecdigomquinairoverusogeneralizadoparao
Futuroprevisvel.ConsideramoscomoessasmquinasexecutamprogramasCnoUnix
OuUnixlike(comoLinux)sistemasoperacionais.(Parasimplificarnossaapresentao,
Usaremosotermo"Unix"comoumtermoabrangenteparasistemascomUnixcomo
IncluindoSolaris,MacOSeLinux.)Otextocontminmeras
ExemplosdeprogramaoqueforamcompiladoseexecutadosemsistemasLinux.Ns
Assumirquevoctemacessoatalmquinaecapazdefazerloginefazersimples
Coisascomoamudanadediretrios.
SeseucomputadorexecutaoMicrosoftWindows,voctemduasopes.Primeirovoc
podeobterumacpiadoLinux(www.ubuntu.com)einstallocomoumaopode"dualboot",
Paraquesuamquinapossaexecutarqualquersistemaoperacional.Alternativamente,instalando
umacpiadasferramentasCygwin(www.cygwin.com),vocpodeexecutarumshellUnixlikesob
Xix

Pgina21

Xx Prefcio

WindowseterumambientemuitoprximoaofornecidopeloLinux.Notudo
OsrecursosdoLinuxestodisponveisnoCygwin,noentanto.
TambmassumimosquevoctemalgumafamiliaridadecomCouC++.Seoseu
ExperinciaanteriorcomJava,atransioexigirmaisesforodesuaparte,
Masvamosajudlo.JavaeCcompartilhaminstruessemelhantesdesintaxeecontrole.
Noentanto,existemaspectosdeC,particularmenteponteiros,memriadinmicaexplcita
AlocaoeI/Oformatada,quenoexistememJava.Felizmente,Cumpequeno
Linguagem,eclaramenteelindamentedescritonoclssico"K&R"texto
PorBrianKernighaneDennisRitchie[58].Independentementedasuaprogramao
Fundo,considereK&Rumaparteessencialdasuabibliotecadesistemaspessoais.
Vriosdosprimeiroscaptulosdolivroexploramasinteraesentre
Ceseusequivalentesemlinguagemdemquina.Alinguagemmquina
ForamgeradostodososexemplospelocompiladorGNUgccexecutadoemIA32ex86
64processadores.Nsnoassumimosqualquerexperinciaanteriorcomhardware,mquina
Linguagemoulinguagemassembly.

NovoparaC?ConselhossobrealinguagemdeprogramaoC
ParaajudarosleitorescujosantecedentesnaprogramaoemCsofracos(ouinexistentes),tambminclumos
EstasnotasespeciaispararealarcaractersticasquesoespecialmenteimportantesemC.Suponhoquevocestfamiliarizado
ComC++ouJava.

Comolerolivro
Aprendercomoossistemasdecomputadorfuncionamdaperspectivadeumprogramadortimo
Divertido,principalmenteporquevocpodefazloativamente.Semprequevocaprenderalgonovo,
Vocpodeexperimentloimediatamenteeveroresultadoemprimeiramo.Naverdade,acreditamosque
anicamaneiradeaprendersistemasfazersistemas,sejatrabalhandoproblemasconcretos
Ouescrevereexecutarprogramasemsistemasreais.
Estetemapermeiatodoolivro.Quandoumnovoconceito

https://translate.googleusercontent.com/translate_f#202 15/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
seguidonotextoporumoumaisprticaproblemasquevocdevetrabalhar
Imediatamenteparatestarsuacompreenso.Soluesparaosproblemasdeprticaso
Nofinaldecadacaptulo.Comovocl,tenteresolvercadaproblemaporcontaprpria,
Edepoisverificarasoluoparasecertificardequevocestnocaminhocerto.Cadacaptulo
seguidoporumconjuntodeproblemasdecasadedificuldadevariada.Seuinstrutor
TemassoluesparaosproblemasdeliodecasaemumManualdoInstrutor.Paracada
Problemadetrabalhodecasa,mostramosumaavaliaodaquantidadedeesforoquesentimosquevaiexigir:
Casonecessitedeapenasalgunsminutos.Poucaounenhumaprogramaonecessria.
Podeexigirat20minutos.Muitasvezesenvolveescreveretestaralgumcdigo.
Muitosdestessoderivadosdeproblemasquetemosdadoemexames.
Requerumesforosignificativo,talvez12horas.Envolvegeralmenteescrever
Etestarumaquantidadesignificativadecdigo.
Adesignaodolaboratrio,exigindoat10horasdeesforo.

Pgina22

Prefcio Xxi

Code/intro/hello.c
1 #include<stdio.h>
2
3 Intmain()
4 {
5 Printf("Ol,mundo\n")
6 Return0
7 }
Code/intro/hello.c
Figura1Umexemplodecdigotpico.

Cadaexemplodecdigonotextofoiformatadodiretamente,semqualquermanual
Interveno,apartirdeumprogramaCcompiladocomgccetestadoemumsistemaLinux.
Naturalmente,seusistemapodeterumaversodiferentedogcc,ouumcompiladordiferente
Completamente,eassimseucompiladorpodegerarcdigodemquinadiferente,maso
Comportamentogeraldeveseromesmo.Todoocdigofonteestdisponvelno
CS:PginadaWebdoAPPemcsapp.cs.cmu.edu.Notexto,osnomesdearquivodafonte
Programassodocumentadosembarrashorizontaisquecircundamocdigoformatado.
Porexemplo,oprogramanaFigura1podeserencontradonoarquivohello.cnodiretrio
Code/intro/.Recomendamosquevoctenteexecutarosprogramasdeexemploemseu
Comovocencontrlos.
Paraevitarterumlivroqueesmagadora,tantoemmassaeemcontedo,
crimosumasriedeapartesdaWebquecontenhammaterialquesuplementa
Aprincipalapresentaodolivro.Estesasidessoreferenciadosdentrodolivro
comumanotaodaCHAPforma:TOP,ondeCHAPumacurtacodificaodo
captuloassuntoeTOPcurtocdigoparaotpicoquecoberto.Porexemplo,
WebAsidedata:boolcontmmaterialsuplementarsobrelgebrabooleanapara
AapresentaosobrerepresentaesdedadosnoCaptulo2,enquantoWebAsidearch:vlog
ContmmaterialdescrevendoprojetosdeprocessadorusandoadescriodehardwareVerilog.
ComplementaraapresentaododesenhodoprocessadornoCaptulo4.
TodosestesWebasidesestodisponveisapartirdapginaWebCS:APP.

Almqueumaparte?
Vocencontraroutraspartesdesteformulrioemtodootexto.Asnotassoparntesesquedo
Vocalgumaintrospecoadicionalnotpicoatual.Osservosservemaumasriedepropsitos.Algunssopequenos
Liesdehistria.Porexemplo,deondesurgiuC,LinuxeaInternet?Outrosladossosignificados
Paraesclareceridiasqueosalunosmuitasvezesachamconfuso.Porexemplo,qualadiferenaentreumcache
Linha,conjuntoebloco?Outrosexemplosdoexemplosdomundoreal.Porexemplo,comoumerrodepontoflutuante
Caiuumfoguetefrancs,ouoqueageometriadeumaunidadedediscoSeagaterealparece.Finalmente,alguns
Asidessoapenascoisasdivertidas.Porexemplo,oqueum"hoinky"?

https://translate.googleusercontent.com/translate_f#202 16/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina23

Xxii Prefcio

Visogeraldolivro
OlivroCS:APPconsisteem12captulosprojetadosparacapturarasidias
sistemasdecomputador:
. Captulo1:UmTourdeSistemasdeComputador.Estecaptuloapresentaasprincipais
Idiasetemasemsistemasdecomputador,rastreandoociclodevidadeum
"Ol,mundo"doprograma.
. Captulo2:RepresentandoeManipulandoInformaes.Eucubroocomputador
Aritmtica,enfatizandoaspropriedadesdeunsignedetwo'scomplement
Nmerorepresentaesqueafetamprogramadores.Consideramoscomoosnmeros
Sorepresentadose,portanto,qualgamadevalorespodesercodificadaparaumdado
Tamanhodapalavra.Consideramosoefeitodafundioentrenmerosassinadosenoassinados.
BersCobrimosaspropriedadesmatemticasdasoperaesaritmticas.Novato
Osprogramadoresficammuitasvezessurpresosaosaberqueasoma(doiscomplementos)
Ouprodutodedoisnmerospositivospodesernegativo.Poroutrolado,dois
Aritmticadocomplementosatisfazaspropriedadesalgbricasdeumanel,
Compiladorpodetransformarcomseguranaamultiplicaoporumaconstanteemuma
Mudanaseadies.UsamosasoperaesbitleveldeCparademonstraroprin
Princpioseaplicaesdalgebrabooleana.CobrimosopontoflutuanteIEEE
Formatoemtermosdecomorepresentavaloreseaspropriedadesmatemticas
Deoperaesdepontoflutuante.
Terumacompreensoslidadaaritmticacomputacionalfundamentalparaaescrita
Confiveis.Porexemplo,programadoresecompiladoresnopodemsubstituir
Aexpresso(x<y)com(xy<0),devidopossibilidadedetransbordamento.Eles
Nopodemesmosubstitulocomaexpresso(y<x),devidoassimetria
Denmerospositivosenegativosnarepresentaodocomplementodedois
Tao.Oestouroaritmticoumafontecomumdeerrosdeprogramaoe
Segurana,pormpoucosoutroslivroscobremaspropriedadesdocomputador
Aritmticadopontodevistadoprogramador.
. Captulo3:Representaoemnveldemquinadosprogramas.Nsensinamoslhecomo
LeiaalinguagemassemblyIA32ex8664geradaporumcompiladorC.Ns
Cobremospadresdeinstruobsicosgeradosparadiferentesconstruesdecontrolo,
Comocondicionais,loopseinstruesswitch.Cobrimosaimplementao
Procedimentos,incluindoaatribuiodepilhas,asconvenesde
Epassagemdeparmetros.Cobrimosaformacomodiferentesestruturasdedados
Estruturas,sindicatosearrayssoalocadoseacessados.Tambmusamoso
Visodenveldemquinadosprogramascomoumamaneiradeentender
Curityvulnerabilidades,comobufferoverflow,easetapasqueoprogramador,
Ocompiladoreosistemaoperacionalpodemtomarparamitigaressasameaas.
Aprenderosconceitosnestecaptuloajudavocasetornarummelhorprogramador,
Porquevocvaientendercomoosprogramassorepresentadosemumamquina.
Umbenefciocertoquevocvaidesenvolverumprofundoeconcretosub
Posiodosponteiros.
. Captulo4:ArquiteturadoProcessador.Estecaptuloabrangeas
Eelementosdelgicaseqenciale,emseguida,mostracomoesseselementospodemser

Pgina24

Prefcio Xxiii

CombinadoemumdatapathqueexecutaumsubconjuntosimplificadodoIA32instru
"Y86".Comeamoscomodesenhodeumdatapathdeciclonico.este
Concepomuitosimples,masnoseriamuitorpido.Emseguida,introduzimos
ducecanalizao,ondeosdiferentespassosnecessriosparaprocessarumainstruo
Soimplementadascomoetapasseparadas.Emqualquermomento,cadaestgiopode
Emumainstruodiferente.Nossopipelinedeprocessadordecincoestgiosmuitomaisre
Alistic.Algicadecontroleparaosprojetosdeprocessadordescritausandoum

https://translate.googleusercontent.com/translate_f#202 17/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
LinguagemdedescriodehardwarechamadaHCL.ProjetosdehardwareescritosemHCL
Podemsercompiladoseligadosemsimuladoresfornecidoscomomanual,e
ElespodemserusadosparagerardescriesVerilogadequadasparasnteseem
Hardwaredetrabalho.
. Captulo5:OtimizandooDesempenhodoPrograma.Estecaptuloapresentaum
Tcnicasparamelhorarodesempenhodocdigo,comaidiade
ProgramadoresaprendemaescreverseucdigoCdetalformaqueumcompiladorpode
Emseguida,gerarcdigodemquinaeficiente.Comeamoscomtransformaesquere
Otrabalhoaserfeitoporumprogramae,portanto,deveserprticapadro
Aoescreverqualquerprogramaparaqualquermquina.Progredimosentopara
esqueaumentamograudeparalelismononveldeinstruo
Mquina,melhorandoassimoseudesempenhoem"superscalar"
Processadores.Paramotivaressastransformaes,introduzimosumaoperao
Modelodecomoosmodernosprocessadoresforadeordemfuncionamemostrarcomo
Medirodesempenhopotencialdeumprogramaemtermosdoscaminhoscrticos
Atravsdeumarepresentaogrficadeumprograma.Vocficarsurpreso
MuitovocpodeacelerarumprogramaporsimplestransformaesdocdigoC.
. Captulo6:AHierarquiadeMemria.Osistemadememriaumdosmaisvisi
Partesdeumsistemadecomputadorparaprogramadoresdeaplicaes.Atesteponto,voc
Baseadosemummodeloconceitualdosistemadememriacomoumamatrizlinear
Temposdeacessouniformes.Naprtica,umsistemadememriaumahierarquiadearmazenamento
Dispositivoscomdiferentescapacidades,custosetemposdeacesso.Cobrimosasdiferenas
TiposdememriasRAMeROMeageometriaeorganizaode
Discosmagnticoseunidadesdeestadoslido.Descrevemoscomoessesdispositivosdearmazenamento
Soorganizadosemumahierarquia.Mostramoscomoessahierarquiapossvel
Localidadedereferncia.Estasideiassoconcretizadasatravsdaintroduodeum
Visodeumsistemadememriacomouma"montanhadememria"comcumesdetemporal
Localidadeedeclivesdalocalidadeespacial.Finalmente,mostramoscomomelhorara
Desempenhodosprogramasdeaplicaomelhorandooseudesempenhotemporale
localidade.
. Captulo7:Vinculao.Estecaptuloabrangeligaesestticasedinmicas,
Incluindoasidiasdearquivosdeobjetosremotoseexecutveis,resoluodesmbolos,
Relocalizao,bibliotecasestticas,bibliotecasdeobjetoscompartilhadose
cdigo.Avinculaonoabordadanamaioriadostextosdesistemas,mas
Outrasrazes.Primeiro,algunsdoserrosmaisconfusosqueosprogramadorespodem
Encontroestorelacionadosafalhasdurantealigao,especialmenteparagrandes
Pacotes.Emsegundolugar,osarquivosobjetoproduzidosporvinculadoresestoligadosaconceitos
taiscomoocarregamento,amemriavirtual,emapeamentodememria.

Pgina25

xxiv Prefcio

. Captulo8:Fluxodecontroleexcepcional.Nestapartedaapresentao,
iralmdomodelodeprogramanico,introduzindooconceitogeral
dofluxoexcepcionalcontrole(ouseja,mudanasnofluxodecontrolequeestoforado
ramosnormaisechamadasdeprocedimento).Nscobrimosexemplosdeexcepcional
fluxodecontrolequeexisteemtodososnveisdosistema,apartirdehardwaredebaixonvel
exceeseinterrupes,paratrocasdecontextoentreosprocessossimultneos,
amudanasbruscasnofluxodecontrolecausadospelaentregadesinaisdoUnix,a
ossaltosnolocaisemCquequebramadisciplinapilha.
Estaapartedolivroondensintroduziraideiafundamentalde
umprocesso,umaabstraodeumprogramaemexecuo.Vocvaiaprendercomopro
processosfuncionamecomoelespodemsercriadosemanipuladosdaaplicao
programas.Nsmostramoscomoprogramadoresdeaplicativospodemfazerusodemltiplos
processosatravsdechamadasdosistemaUNIX.Quandoterminarestecaptulo,vocsercapaz
paraescreverumshelldoUnixcomcontroledetrabalho.tambmsuaprimeiraintroduoao
comportamentonodeterminsticoquesurgecomaexecuodoprogramaconcorrente.
. Captulo9:Memriavirtual.Nossaapresentaodosistemadememriavirtual
procuradaralgumacompreensodecomoelefuncionaesuascaractersticas.Ns
queroquevocsaibacomoqueosdiferentesprocessossimultneospodecada
usarumintervaloidnticodeendereos,apartilhadealgumaspginas,mastendoindivduo
cpiasdeoutros.Nstambmabrangerasquestesenvolvidasnagestoemanipulao
memriavirtual.Emparticular,abrangeraoperaodosalocadoresdearmazenamento
taiscomoomallocUnixeoperaeslivres.Cobrindoestematerialserve
vriosfins.Issoreforaoconceitodequeoespaodememriavirtual
apenasumamatrizdebytesqueoprogramapodesubdividiremarmazenamentodiferente
unidades.Eleajudaaentenderosefeitosdosprogramasquecontenhammemriarncia
erencingerros,comovazamentosdearmazenamentoerefernciasponteiroinvlido.Finalmente,
muitosprogramadoresdeaplicativosescrevamsuasprpriasalocadoresdearmazenamentootimizada
paraasnecessidadeseascaractersticasdaaplicao.Estecaptulo,mais

https://translate.googleusercontent.com/translate_f#202 18/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
doquequalqueroutro,demonstraobenefciodecobrirtantoohardwaree
osaspectosdesoftwaredesistemasdecomputadoremumaformaunificada.comtradicional
informticosarquiteturaeoperaodesistemastextosapresentamapenaspartedovirtual
histriamemria.
. Captulo10:SistemadenvelI/O.NscobrimososconceitosbsicosdeUnixI/O,tais
comoarquivosedescritores.Nsdescrevemoscomoosarquivossocompartilhados,comoeuredirecionamento/O
funciona,ecomoacessarmetadadosdoarquivo.DesenvolvemostambmumItamponadarobusta/O
pacotequelidacorretamentecomumcomportamentocuriosoconhecidocomocontagemdecurtas,
ondeafunodebibliotecalapenasumapartedosdadosdeentrada.NscobrimosoC
bibliotecapadrodeI/OesuarelaocomUnixI/O,concentrandoseemlimitaes
dopadrodeI/Oqueotornaminadequadoparaaprogramaoderede.Emgeral,
ostemasabordadosnestecaptulosoblocosdeconstruoparaosprximosdoiscaptulos
emredeeprogramaoconcorrente.
. Captulo11:Programaoderede.AsredessodispositivosdeE/Sinteressantespara
programa,amarrandojuntosmuitasdasideiasqueestudamosnoinciodo
texto,taiscomoprocessos,sinais,ordenaodebytes,mapeamentodememriaedinmica

Pgina26

Prefcio xxv

alocaodearmazenamento.programasderedetambmfornecemumcontextoatraentepara
simultaneidade,queotemadoprximocaptulo.Estecaptuloumafatiafina
atravsdaprogramaoderedequevocrecebeparaopontoondevocpodeescrever
umservidorWeb.Nscobrimosomodeloclienteservidorqueestsubjacenteatodaarede
Aplicaes.ApresentamosvistadeumprogramadordaInternet,emostrarcomo
paraescreverosclientesdaInterneteservidoresusandoainterfacesockets.Finalmente,ns
introduzirHTTPedesenvolverumservidorWebiterativosimples.
. Captulo12:ProgramaoConcorrente.Estecaptuloapresentaconcorrente
programaousandooprojetodeservidordeInternetcomooexmotivacionalexecutando
amplo.Nscompararecontrastarostrsmecanismosbsicosparaescrevercon
atuaisprogramasdeprocessos,I/Odemultiplexaoetpicosemostrarcomo
parauslosparaconstruirservidoresdeInternetsimultneas.Nscobrimososprincpiosbsicosda
sincronizaousandoPeVoperaesdesemforo,seguranadothreadereen
,condiesdecorridadeTrancyeimpasses.Escrevercdigoconcorrenteessencial
paraamaioriadasaplicaesdeservidor.Descrevemostambmousodeprononveldethread
gramaoparaexpressaroparalelismoemumprogramaaplicativo,permitindomaisrpido
execuoemprocessadoresmulticore.Recebendotodososncleosquetrabalhamemumpecado
problemacomputacionalgleexigeumacoordenaocuidadosadoconcorrente
tpicos,tantoparacorreoeparaatingiraltodesempenho.

Novoparaestaedio
Aprimeiraediodestelivrofoipublicadocomumcopyrightde2003.Considerando
ingarpidaevoluodatecnologiadecomputador,ocontedodolivrorealizouse
surpreendentementebem.mquinasx86daIntelqueexecutamsistemasoperacionaisUnixlikee
programadaemCprovouserumacombinaoquecontinuaaabrangermuitas
sistemasdehoje.Mudanasnatecnologiadehardwareecompiladoreseaexperincia
demuitosinstrutoresqueensinamomaterialtersolicitadoumarevisosubstancial.
Aquiestoalgumasdasmudanasmaissignificativas:

. Captulo2:RepresentaoeManipulaodeInformao.Temostentadofazer
estematerialmaisacessvel,comexplicaesmaiscuidadosasdeconceitos
ecommuitosmaisproblemasprticosetrabalhosdecasa.Nsnosmudamosalgunsdos
osaspectosmaistericosparaapartesWeb.Tambmdescrevemosalgumasdas
vulnerabilidadesdeseguranaquesurgemdevidospropriedadesdeestourodecomputador
aritmtica.
. Captulo3:NvelMquinaRepresentaodeProgramas.Nsestendemosnossa
coberturaparaincluirx8664,aextensodosprocessadoresx86paraumapalavrade64bits
Tamanho.Nstambmusamosocdigogeradoporumaversomaisrecentedegcc.Nstemos
reforadaanossacoberturadevulnerabilidadesdeestourodebuffer.Crimos
Webapartesemduasclassesdiferentesdeinstruesdepontoflutuantee
tambmemvistadastransformaesmaisexticosfeitaquandocompiladorestentar
grausmaiselevadosdeotimizao.OutroWebladodescrevecomoincorporar
cdigodemontagemx86dentrodeumprogramaC.

https://translate.googleusercontent.com/translate_f#202 19/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina27

xxvi Prefcio

. Captulo4:Arquiteturadoprocessador.Nsinclumosumaexposiomaiscuidadosade
detecodeexceoemanipulaoemnossodesigndoprocessador.Temostambmcria
ciadoumWebdeladoquemostraummapeamentodosnossosdesignsdeprocessadoresemVerilog,
permitindoasnteseemhardwaredetrabalho.
. Captulo5:Otimizandoodesempenhodoprograma.Nsmudarammuitoonosso
descriodecomoumprocessadordeoutoforderopera,ecriamos
umatcnicasimplesparaanalisarodesempenhodoprogramacombasenoscaminhos
numarepresentaoemgrficodefluxodedadosdeumprograma.AWebdescrevelado
comoprogramadoresCpodeescreverprogramasquefazemusodoSIMD(single
instruo,vriosdados)instruesencontradasemversesmaisrecentesdox86
processadores.
. Captulo6:Ahierarquiadememria.Nsadicionamosmaterialsolidstate
discos,ensatualizamosnossaapresentaoasercombasenamemria
hierarquiadeumprocessadorIntelCorei7.
. Captulo7:Ligando.Estecaptulomudouapenasligeiramente.
. Captulo8:Fluxodecontroleexcepcional.Temosmelhoradoanossadiscussode
comoomodelodeprocessointroduzalgunsconceitosfundamentaisdaconcorrncia,
taiscomonodeterminismo.
. Captulo9:Memriavirtual.Nsatualizamosnossoestudodecasodosistemadememriapara
descreveroprocessadorIntelCorei7de64bits.Tambmatualizamosnossaamostra
implementaodemallocparatrabalharparaambosos32biteexecuode64bits.
. Captulo10:SistemadenvelI/O.Estecaptulomudouapenasligeiramente.
. Captulo11:Programaoderede.Estecaptulomudouapenasligeiramente.
. Captulo12:ProgramaoConcorrente.Nsaumentamosanossacoberturado
princpiosgeraisdaconcorrncia,equetambmdescrevemcomoprogramadores
podeusaroparalelismononveldethreadparafazerprogramascorrermaisrpidoemmulticore
mquinas.

Almdisso,nsadicionamoserevistoumasriedeprticasetrabalhosdecasa
Problemas.

OrigensdoLivro
OlivroresultadeumcursointrodutrioquedesenvolvemosnoCarnegieMel
Universidadelon,nooutonode1998,achamada15213:IntroduoaosSistemasdeComputao
(ICS)[14].OcursoICSfoiensinadoacadasemestredesdeento,cadavezpara
cercade150250estudantes,quevodesdesophomoresaosmestresestudantesdegraduaoe
comumagrandevariedadedecursos.umcursoobrigatrioparatodososalunosdegraduaona
departamentosCSeECEdaCarnegieMellon,etornouseumprrequisito
paraamaioriadoscursosdesistemasdenvelsuperior.
AidiacomICSfoiapresentaraosalunososcomputadoresdeumamaneiradiferente.
Algunsdosnossosalunosteriamaoportunidadedeconstruirumsistemadecomputador.Em
Poroutrolado,amaioriadosestudantes,incluindotodososcientistasecomputadordecomputador
engenheiros,serobrigadoausareprogramarcomputadoresemumabasediria.Entons

Pgina28

Prefcio xxvii

decidiuensinarsobreossistemasdopontodevistadoprogramador,usando
oseguintefiltro:nscobrirumtpicosomenteseissoafetouodesempenho,
exatidoouutilidadedosprogramasemnveldeusurioC.
Porexemplo,temascomooadicionadorhardwareenibusprojetosestavamfora.Tpicos

https://translate.googleusercontent.com/translate_f#202 20/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
taiscomolinguagemdemquinaestavam,masemvezdeseconcentraremcomoescrevercho
linguagemBlymo,olhaparansseriacomoumcompiladorCtraduzconstruesC
emcdigodemquina,incluindoponteiros,loops,chamadasdeprocedimento,ealternardeclarao
Mentos.Almdisso,gostaramosdeterumavisomaisamplaeholsticadosistema
comohardwareesoftwaredesistemas,queabrangetemascomoaligao,carregamento,
processos,sinais,otimizaodeperformance,memriavirtual,I/O,ederede
eprogramaoconcorrente.
EstaabordagempermitiunosparaensinarocursoICSdeumaformaqueprtico,
concreto,handson,eemocionanteparaosalunos.Arespostadenossosestudantes
ecolegasdefaculdadefoiimediataeextremamentepositiva,ensreal
izedqueoutraspessoasforadaCMUpodebeneficiardousodenossaabordagem.Conseqentemente
Estelivro,quefoidesenvolvidoapartirdasnotasdeaulaICSequetemos
agorarevisadopararefletirasmudanasnatecnologiaecomoossistemasdecomputadorsoim
mentado.

Parainstrutores:Cursosbaseadonolivro
OsinstrutorespodemusaroCS:LivroAPPparaensinarcincotiposdiferentesdesistemas
cursos(Figura2).Ocursoparticulardependederequisitoscurriculares,
gostopessoal,easorigensehabilidadesdosalunos.Daesquerdaparaa
direitanafigura,oscampossocaracterizadosporumanfasecrescentena
perspectivadoprogramadordeumsistema.Aquiestumabrevedescrio:
. ORG:Umcampodeorganizaodecomputadorescomtemastradicionaiscobertoporum
estilonotradicional.temastradicionais,comoaconcepolgica,arquiteturalprocessador
tura,linguagemassembly,ememriasistemassocobertos.Noentanto,existe
maisnfasenoimpactoparaoprogramador.Porexemplo,osdadosrepresen
taesestorelacionadascomostiposdedadoseoperaesdeprogramasemC,
eaapresentaodecdigodemontagembaseadaemcdigodemquinagerado
porumcompiladorCaoinvsdecdigoassemblyescritomo.
. ORG+:OcursoORGcomnfaseadicionalsobreoimpactodohardware
sobreodesempenhodeprogramasdeaplicao.EmcomparaocomORG,estudantes
sabermaissobreotimizaodecdigoesobrecomomelhoraramemriaper
desempenhodeseusprogramasemC.
. ICS:OcursoICSbase,destinadasaproduzirprogramadoresiluminados
queentendemoimpactodohardware,sistemaoperacionalecompilao
sistemaosobreodesempenhoecorreodeseusprogramasdeaplicao.
UmadiferenasignificativadoORG+queaarquiteturadoprocessadordebaixonvel
nocoberto.Emvezdisso,osprogramadorestrabalharcomummodelodenvelsuperiordeummo
ernoutoforder.OcursoICSseencaixamuitobememumade10semanastrimestre,
etambmpodeseresticadoparaumsemestrede15semanas,secobriucomummaisvagaroso
ritmo.

Pgina29

xxviii Prefcio

Curso
Captulo Tema ORG ORG+ ICS ICS+ SP
1 Postodesistemas
2 Representaodedados (d)
3 Alinguagemdemquina
4 Aarquiteturadoprocessador
5 otimizaodecdigo
6 hierarquiadememria (um) (um)
7 vinculao (c) (c)
8 fluxodecontroleexcepcional
9 Memriavirtual (b)
10 NonveldosistemaI/O
11 programaoderede
12 programaoconcorrente
AFigura2CincocursosdesistemasbaseadosnoCS:LivroAPP.Notas:(a)Hardwareapenas,
(B)Semaalocaodearmazenamentodinmico,(c)Semligaodinmica,(d)Nopontoflutuante.ICS+
ocurso15213deCarnegieMellon.

. ICS+:OcursoICSlinhadebasecomcoberturaadicionaldesistemasdeprogramao
tpicosming,comoaonveldosistemaI/O,programaoderede,econcorrente

https://translate.googleusercontent.com/translate_f#202 21/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
programao.EsteocursodeCarnegieMellonsemestrelongo,quecobre
cadacaptuloCS:APPexcetoarquiteturadeprocessadordebaixonvel.
. SP:Umcursodeprogramaodesistemas.SemelhanteaoICS+claro,masgotas
pontoeotimizaodedesempenhoflutuante,ecolocamaisnfasena
programaodesistemas,incluindocontroledeprocessos,avinculaodinmica,sistema
nvelI/O,programaoderedeeprogramaoconcorrente.instrutores
podequerercomplementardeoutrasfontesparatpicosavanadoscomo
daemons,controledeterminal,eUnixIPC.

AprincipalmensagemdaFigura2queoCS:LivroAPPdummontedeopes
paraalunoseinstrutores.Sevocdesejaqueseusestudantessejamexpostosalower
arquiteturadoprocessadornvel,entoessaopoestdisponvelatravsdoORGeORG+
cursos.Poroutrolado,sevocquisermudarapartirdoseucomputadoratual
ClaroorganizaoparaumICSouICS+claro,massocautelososestofazendotais
umamudanadrsticadeumasvez,entovocpodemoverseemdireoICSdeformaincremental.Voc
podecomearcomORG,queensinaostemastradicionaisdeumaformanotradicional.
Umavezquevocestconfortvelcomessematerial,entovocpodemoverseparaORG+,e
eventualmente,aoICS.SeosalunosnotmexperinciaemC(porexemplo,elestm
nicaprogramadoemJava),vocpodepassarvriassemanasemCedepoiscobri
omaterialdeORGouICS.

Pgina30

Prefcio xxix

Finalmente,observamosqueoORG+ecursosSPfariaumbomdoismandatos
(Sejatrimestresousemestres)sequncia.OuvocpodeconsideraroferecendoICS+como
umtermodeICSeumprazodeSP.

ExercciosTestadoemlaboratrioemsaladeaula
OICS+cursonaCarnegieMellonrecebemuitoaltasavaliaesdosalunos.
Pontuaesmedianasde5.0/5.0eosmeiosdequatro.6/5.0sotpicosparaocursodoestudante
Avaliaes.Estudantescitarexercciosdelaboratrioadiverso,emocionanteserelevantescomo
aprincipalrazo.OslaboratriosestodisponveisapartirdoCS:pginaWebAPP.Aquiesto
exemplosdoslaboratriosquesofornecidoscomolivro:

. Labdados.Estelaboratrioexigequeosalunosparaimplementarsimpleslgicaearith
meticfunes,masutilizandoumsubconjuntoaltamenterestritodeC.Porexemplo,eles
devecalcularovalorabsolutodeumnmerousandoapenasoperaesdenveldebits.
EstelaboratrioajudaosalunosacompreenderasrepresentaesdenveldebitdedadosC
tiposeocomportamentodenvelpoucodasoperaessobreosdados.
. Labbombabinria.Abombabinriaumprogramafornecidoaosalunoscomoum
arquivodoobjetocdigo.Quandoexecutado,elesolicitaqueousuriodigiteseiscordasdiferentes.
Sealgumdestesestiverincorreto,obomba"explode",imprimindoumamensagemdeerro
eregistraroeventoemumservidordeclassificao.Osestudantesdevem"acalmar"asua
prpriasbombasnicaspordesmontareengenhariareversadosprogramas
paradeterminarquaisasseiscordasdevemser.Olaboratrioensinaosalunosa
entenderalinguagemassembly,etambmobrigaosaaprenderausarum
depurador.
. BufferOverflowLab.Osalunossoobrigadosamodificarocomportamentodetempodeexecuo
deumbinrioexecutvel,explorandoumavulnerabilidadedebufferoverflow.estelaboratrio
ensinaosalunossobreadisciplinadepilha,eensinalossobrea
perigodeescrevercdigoquevulnervelaataquesdebufferoverflow.
. ArchitectureLab.MuitosdosproblemasdecasadeCaptulo4podeser
combinadasemumaatribuiodelaboratrio,ondeosalunosmodificaradescriodoHCL
deumprocessadorparaadicionarnovasinstrues,alterarapolticadeprevisodedesvios,
ouadicionarouremovercaminhosignorandoeregistrarportos.Osprocessadoresresultantes
podesersimuladoeexecutadoatravsdetestesautomatizadosqueirodetectaramaiorpartedo
possveiserros.Estelaboratriopermitequeosalunosexperimentamaspartesemocionantesdoprocessador
projetosemanecessidadedeumfundocompletaemprojetolgicoehardware
linguagensdedescrio.
. Labdesempenho.Osestudantesdevemotimizarodesempenhodeumaaplicao
funodekernel,comoconvoluooutransposiodematriz.Estelaboratriofornece
umademonstraomuitoclaradaspropriedadesdememriascache,ed
estudantesexperimentarcomotimizaodoprogramadebaixonvel.
. ShellLab.EstudantesimplementaroseuprprioprogramadeshelldoUnixcomcontroledetrabalho,
incluindothectrlcandctrlzkeystrokes,fg,bg,andjobscommands.este
aprimeiraintroduodoalunoparaasimultaneidade,edlhesumaideiaclara
docontroleUnixprocesso,sinaisetratamentodesinal.

https://translate.googleusercontent.com/translate_f#202 22/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina31

xxx Prefcio

. MallocLab.Estudantesimplementarassuasprpriasversesdomalloc,livree
(Opcionalmente)realloc.Estelaboratriodaosalunosumacompreensoclaradosdados
layouteorganizao,eosobrigaaavaliardiferentestradeoffs
entreespaoeeficinciadetempo.
. LabProxy.EstudantesimplementarumproxyWebconcorrentequeficaentre
seusnavegadoreseorestodaWorldWideWeb.Estelaboratrioexpea
alunosparatemascomoosclientesdaWebeservidores,erelacionadoaosdiversos
osconceitosdocurso,taiscomoaordenaodebytes,I/O,ocontroledoprocessodearquivo,
sinais,demanipulaodesinal,mapeamentodememria,soquetes,esimultaneidade.estudantes
comosercapazdeverosseusprogramasemaocomnavegadoreswebrealeWeb
servidores.
OCS:ManualdoInstrutorAPPtemumadiscussodetalhadadoslaboratrios,bem
comoindicaesparaodownloaddosoftwaredesuporte.

Agradecimentosparaasegundaedio
Estamosprofundamentegratossmuitaspessoasquenosajudaramaproduzirestasegunda
ediodoCS:textoAPP.
Emprimeirolugar,gostaramosdereconhecerosnossoscolegasqueensinarama
ICScursodaCarnegieMellonparaoseufeedbackperspicazeencorajamento:
GuyBlelloch,RogerDannenberg,DavidEckhardt,GregGanger,SethGoldstein,
GregKesden,BruceMaggs,ToddMowry,AndreasNowatzyk,FrankPfenning,
eMarkusPueschel.
Agradecemostambmaosnossosleitorescomolhosafiadosquecontriburamrelatrioserrata
Apginaparaaprimeiraedio:DanielAmelang,RuiBaptista,QuarupBarreirinhas,
MichaelBombyk,JOrgBrauer,JordanBrough,YixinCao,JamesCaroll,RuiCar
valho,HyoungKeeChoi,AlDavis,GrantDavis,ChristianDufour,MaoFan,
TimFreeman,IngeFrick,MaxGebhardt,JeffGoldblat,ThomasGross,Anita
Gupta,JohnHampton,HiepHong,GregIsraelsen,RonaldJones,HaudyKazemi,
BrianKell,ConstantinoKousoulis,SachaKrakowiak,ArunKrishnaswamy,Mar
tinKulas,MichaelLi,ZeyangLi,RickyLiu,MarioLoConte,DirkMaas,Devon
Macey,CarlMarcinik,WillMarrero,SimoneMartins,TaoHomens,MarkMorris
sey,VenkataNaidu,BhasNalabothula,ThomasNiemann,EricPeskin,DavidPo,
AnneRogers,JohnRoss,MichaelScott,Seiki,RayShih,DarrenShultz,Erik
Silkensen,Suryanto,EmilTarazi,NawananTheeraAmpornpunt,JoeTrdinich,
MichaelTrigoboff,JamesTroup,MartinVopatek,AlanOeste,BetsyWolff,Tim
Wong,JamesWoodruff,ScottWright,JackieXiao,GuanpengXu,QingXu,Caren
Yang,YinYongsheng,WangYuanxuan,StevenZhangeDiaZhong.Especial
GraasaIngeFrick,queidentificouumbugcpiaprofundasutilemnossolockandcpia
exemplo,eRickyLiu,porsuasincrveishabilidadesdereviso.
NossosIntelLabscolegasAndrewChieneLimorFixforamexcepcionalmente
apoioduranteaelaboraodotexto.SteveSchlossergraciosamentedesde
algumascaracterizaesdaunidadededisco.CaseyHelfricheMichaelRyaninstalado
emantidoanossanovacaixaCorei7.MichaelKozuch,BabuPillai,eJason
Campbellforneceuinformaesvaliosassobreodesempenhodosistemadememria,multicore

Pgina32

Prefcio xxxi

sistemaseaparededeenergia.PhilGibbonseShiminChencompartilharamsuaconside

https://translate.googleusercontent.com/translate_f#202 23/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
especializaoerableemprojetosdediscodeestadoslido.
Temossidocapazesdecontratarostalentosdemuitos,incluindoWenMeiHwu,
MarkusPueschel,eJiriSimsa,parafornecerambososcomentriosdetalhadosedealta
conselhosnvel.JamesHoenosajudouacriarumaversoVerilogdoprocessadorY86
efeztodootrabalhonecessrioparasintetizarhardwaretrabalhando.
Muitasgraasaosnossoscolegasqueforneceramcomentriosdoprojectocantes
script:JamesArchibald(BrighamYoungUniversity),RichardCarver(George
MasonUniversity),MirelaDamian(UniversidadeVillanova),PeterDinda(Norte
Universidadeocidental),JohnFiore(TempleUniversity),JasonFritts(St.LouisUni
versidade),JohnGreiner(UniversidadeRice),BrianHarvey(UniversidadedaCalifrnia,
Berkeley),DonHeller(PennStateUniversity),WeiChungHsu(Universidadede
Minnesota),MichelleHugue(UniversidadedeMaryland),JeremyJohnson(Drexel
University),GeoffKUENNING(HarveyMuddCollege),RickyLiu,Sammad
den(MIT),FredMartin(UniversidadedeMassachusetts,Lowell),AbrahamMatta
(BostonUniversity),MarkusPueschel(CarnegieMellonUniversity),Norman
Ramsey(TuftsUniversity),GlennReinmann(UCLA),MichelaTaufer(Univer
sidadedeDelaware),eCraigZilles(UIUC).
PaulAnagnostopoulosdeWindfallSoftwarefezumexcelentetrabalhodetipo
definindoolivroelderdaequipedeproduo.MuitoobrigadoaPaulesua
excelenteequipe:RickCamp(copyeditor),JoeSnowden(compositor),MaryEllenN.
Oliver(revisor),LaurelMuller(artista)eTedLaux(indexador).
Finalmente,gostaramosdeagradeceraosnossosamigosemPrenticeHall.MarciaHortontem
sempreestevelparans.NossoeditorMattGoldsteinfornecidalideranaestelar
docomeoaofim.Somosprofundamentegratosporsuaajuda,incentivo,
einsights.

Reconhecimentosdaprimeiraedio
Estamosprofundamentegratoamuitosamigosecolegasparaasuacrucialdisporpensativo
icismseencorajamento.Umagradecimentoespecialanossos15213alunos,cujasinfeces
energiainfecciosaeentusiasmoestimulounosno.NickCartereVinnyFuriage
amentedesdequeoseupacotedemalloc.
GuyBlelloch,GregKesden,BruceMaggs,eToddMowryministrouocurso
aolongodevriossemestres,nosdeuincentivo,eajudouamelhorarocurso
material.HerbDerbyfornecidaorientaoespiritualcedoeencorajamento.Al
lanFisher,GarthGibson,ThomasGross,Satya,PeterSteenkiste,eHuiZhang
encorajounosadesenvolverocursodesdeoincio.UmasugestodeGarth
logonoinciotemtodaabolarolar,eissofoipegoerefinadocomo
ajudadeumgrupolideradoporAllanFisher.MarkStehlikePeterLeetmsidomuito
apoiosobreaconstruodestematerialnocurrculodegraduao.Greg
KesdenforneceramfeedbacktilsobreoimpactodoICSnocursoOS.Greg
GangereJiriSchindlerfornecidosgraciosamentealgumascaracterizaesdaunidadededisco
erespondeusnossasperguntasemdiscosmodernos.TomStrickernosmostrouomem
montanhaory.JamesHoeidiasteisefeedbacksobrecomoapresentar
arquiteturadoprocessador.

Pgina33

xxxii Prefcio

UmgrupoespecialdealunosKhalilAmiri,AngelaDemkeBrown,Chris
Colohan,JasonCrawford,PeterDinda,JulioLopez,BruceLowekamp,Jeff
Pierce,SanjayRao,BalajiSarpeshkar,BlakeScholl,SanjitSeshia,GregStef
ventilador,TiankaiTu,KipWalker,eYinglianXiesefundamentalparaajudar
nosadesenvolverocontedodocurso.Emparticular,ChrisColohanestabelecidauma
divertido(eengraado)tomquepersisteathoje,einventouobinriolendrio"
bomba"quetemprovadoserumagrandeferramentaparaocdigodemquinadeensinaredepurao
conceitos.
ChrisBauer,AlanCox,PeterDinda,SandhyaDwarkadas,JohnGreiner,
BruceJacob,BarryJohnson,DonHeller,BruceLowekamp,GregMorrisett,
BrianNoble,BobbieOthmer,BillPugh,MichaelScott,MarkSmotherman,Greg
Steffan,eBobWierlevoutempoqueelesnotemquelereaconselharnos
sobreosprimeirosrascunhosdolivro.UmagradecimentomuitoespecialaAlDavis(Universidadede
Utah),PeterDinda(NorthwesternUniversity),JohnGreiner(UniversidadeRice),
WeiHsu(UniversityofMinnesota),BruceLowekamp(CollegeofWilliam&
Mary),BobbieOthmer(UniversityofMinnesota),MichaelScott(Universidadede
Rochester),eBobWier(RockyMountainCollege)paraaclassetestaroBeta
verso.Umagradecimentoespecialaseusalunos,bem!
TambmgostaramosdeagradeceraosnossoscolegasdaPrenticeHall.MarciaHorton,
EricFrank,eHaroldpedratersidoincansvelnoseuapoioeviso.
HaroldtambmnosajudouaapresentarumaperspectivahistricaexataemRISCe
arquiteturasdeprocessadoresCISC.JerryRalyaforneceupercepesntidasenosensinou

https://translate.googleusercontent.com/translate_f#202 24/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
muitosobreaboaescrita.
Finalmente,gostaramosdeagradecerasgrandesescritorestcnicosBrian
KernighanedofalecidoW.RichardStevens,pornosmostrarqueoslivrostcnicos
podeserbonito.
Obrigadoatodos.

RandyBryant
DaveO'Hallaron
Pittsburgh,Pensilvnia

Pgina34

sobreosautores

RandalE.Bryantrecebeuseudiplomadebacharel
daUniversidadedeMichiganem1973e,emseguida,participou
psgraduaonoInstitutodeMassachusetts
Tecnologia,recebendoumPh.D.licenciaturaemscicomputador
ciaem1981.Elepassoutrsanoscomoassistente
ProfessordoInstitutodeTecnologiadaCalifrnia,
etemsidonafaculdadeemCarnegieMellondesde
1984.AtualmenteProfessordaUniversidadedepeia
putadorCinciaedecanodaFaculdadedeComputao
Cincia.Eletambmtemumcompromissodecortesiacom
doDepartamentodeEngenhariaElectrotcnicaedeComputadores.
Eletemministradocursosemsistemasdecomputadores,tantodegraduaoe
nveldepsgraduaoparamaisde30anos.AolongodemuitosanosdearquiComputadordeensino
cursostecture,elecomeouamudarofocodecomooscomputadoressoprojetadospara
umdecomoosprogramadorespodemescrevermaiseficienteeconfivelprogramasseeles
compreendermelhorosistema.JuntamentecomoProfessorO'Hallaron,eledesenvolveu
ocurso15213"IntroduoaosSistemasdeComputao"naCarnegieMellonque
abaseparaestelivro.Eletambmministroucursosdealgoritmos,programao,
redesdecomputadoresedesignVLSI.
AmaioriadepesquisadoprofessorBryantdizrespeitoconcepodeferramentasdesoftware
paraajudarasoftwareehardwaredesignersdeverificararegularidadedeseussistemas.
Estesincluemvriostiposdesimuladores,bemcomoferramentasdeverificaoformaisque
provaracorreodeumprojetousandomtodosmatemticos.Elepublicou
maisde150trabalhostcnicos.Seusresultadosdainvestigaosousadosporgrandescantecomputador
cantes,incluindoIntel,Freescale,IBMeFujitsu.Elejganhouvriosgrandes
prmiosporsuaspesquisas.Estesincluemdoisprmiosdereconhecimentoinventoreuma
prmiorealizaotcnicadoSemiconductorResearchCorporation,a
TeoriaKanellakisePracticeAward,daAssociaoparaocomputadorMa
Chinery(ACM),eoPrmioBakerWRG,oPrmioEmmanuelPioree
oPrmioPhilKaufmandoInstituteofElectricalandElectronicsEnge
https://translate.googleusercontent.com/translate_f#202 25/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
nheiros(IEEE).ElemembrotantodaACMeIEEEeummembroda
oUSNationalAcademyofEngineering.
xxxiii

Pgina35

xxxiv sobreosautores

DavidR.O'HallaronodiretordaIntelLabs
Pittsburgheprofessorassociadonocomputador
CinciaeEngenhariaEltricaedeComputao
UniversidadeCarnegieMellon.ElerecebeuseuPh.D.
daUniversidadedeVirginia.
Eletemministradocursosdesistemasdecomputadorna
nveisdegraduaoepsgraduaosobretemascomo
arquiteturadecomputadores,siscomputadorintrodutria
tems,designprocessadorparalelo,eserviosdeInternet.
JuntamentecomoProfessorBryant,eledesenvolveuo
cursonaCarnegieMellonquelevouaestelivro.Dentro
2004,elefoipremiadocomoSimonPrmioHerbertdeEnsinoExcellencepela
EscolaCMUdeCinciadaComputao,umprmioparaqueovencedorescolhidocombase
emumapesquisadosalunos.
ProfessorO'Hallarontrabalhanareadesistemasdecomputador,comespecfica
interessesemsistemasdesoftwareparacomputaocientfica,computaodedadosintensivos,
evirtualizao.OexemplomaisconhecidodeseutrabalhooprojetoQuake,
grupodecientistasdacomputao,engenheiroscivis,esismlogosquetmvolvimento
volveuacapacidadedepreveromovimentodosolodurantesismosviolentos.Dentro
2003,oProfessorO'HallaroneosoutrosmembrosdaequipeQuakeganhouo
PrmiodeBellGordon,oprmiointernacionaldetopoemcomputaodealtodesempenho.

Pgina36

https://translate.googleusercontent.com/translate_f#202 26/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

CAPTULO

ATourofComputerSystems

1.1 AinformaoBits+Contexto3
1.2 Programassotraduzidasporoutrosprogramasemdiferentesformas4
1,3 Elepagaparaentendercomoossistemasdecompilaodetrabalho6
1,4 Processadoresdelereinterpretarinstruesarmazenadasnamemria7
1,5 Cachesimporta12
1,6 DispositivosdeArmazenamentoformamumahierarquia13
1,7 Osistemaoperacionalgerenciaohardware14
1,8 Sistemasdecomunicarcomoutrossistemasusarredes20
1,9 Temasimportantes21
1,10 resumo25
BibliogrficasNotas26

Pgina37

2 Captulo1ATourofComputerSystems

Umsistemadecomputadorcompostoporhardwareesoftwaredesistemasquetrabalhamemconjunto
paraexecutarprogramasaplicativos.implementaesespecficasdossistemasmudaraolongodo
tempo,masosconceitosdebasenofazer.Todosossistemasdecomputadortmsemelhante
componentesdehardwareedesoftwarequeexecutamfunessemelhantes.Estelivro
escritoparaprogramadoresquedesejamobtermelhoremseuofciopelacompreenso
comoessescomponentesfuncionamecomoelesafetamaexatidoedesempenho
deseusprogramas.
Vocestprontaparaumaviagememocionante.Sevocsededicaraaprendera
conceitosdestelivro,entovocestaremseucaminhoparasetornarumarara"poderpro
gramtica,"iluminadaporumacompreensodosistemainformticosubjacente
eseuimpactosobreosseusprogramasdeaplicao.
Vocvaiaprenderhabilidadesprticas,taiscomoaformadeevitarnumricaestranha
erroscausadospelamaneiraqueoscomputadoresrepresentamnmeros.Vocvaiaprendercomo
paraotimizaroseucdigoCusandotruquesinteligentesqueexploramosdesenhosdemoderna
processadoresesistemasdememria.Vocvaiaprendercomoosimplementosdocompilador
chamadasdeprocedimentoecomousaresseconhecimentoparaevitarasfalhasdeseguranade
tampovulnerabilidadesdeestouroqueafligemsoftwarederedeeInternet.Vocir
aprenderareconhecereevitaroserrosdesagradveisdurantealigaoqueconfundem
oprogramadormdio.VocvaiaprenderaescreverseuprprioshelldoUnix,oseu
prpriopacotedealocaodearmazenamentodinmico,eatmesmooseuprprioservidorWeb.Vocir
https://translate.googleusercontent.com/translate_f#202 27/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
aprenderaspromessaseasarmadilhasdaconcorrncia,umtemadeimportnciacrescentecomo
vriosncleosdeprocessadorsointegradosemchipsindividuais.
EmseutextoclssicosobrealinguagemdeprogramaoC[58],Kernighane
RitchieintroduzirleitoresparaCutilizandooprogramaOlmostradonaFigura1.1.
EmboraOlumprogramamuitosimples,cadagrandepartedosistemadeve
trabalharemconjuntoparaqueelesejaexecutadoataconcluso.Emcertosentido,oobjetivodeste
livroajudarvocaentenderoqueaconteceeporisso,quandovocexecutarOlon
seusistema.
ComeamosnossoestudodesistemastraandoavignciadoprogramaOl,
apartirdomomentoemquecriadoporumprogramador,atqueelefiqueemumsistema,imprimeseu
mensagemsimples,etermina.Comoseguimosavignciadoprograma,iremos
brevementeapresentarosprincipaisconceitos,terminologiaecomponentesqueentramem
Toque.Osltimoscaptulosirexpandirsobreessasidias.

Cdigo/intro/hello.c
1 #include<stdio.h>
2
3 intmain()
4 {
5 printf("Ol,mundo\n")
6 }
Cdigo/intro/hello.c
Figura1.1OOlprograma.

Pgina38

3
Seo1.1InformaesBits+Contexto

1.1InformaoBits+Contexto

NossoprogramaOlcomeaavidacomoumprogramadeorigem(ouarquivodeorigem)queo
programadorcriacomumeditoresalvaemumarquivodetextochamadohello.c.o
programafonteumasequnciadebits,cadaumcomumvalorde0ou1,organizado
emblocosde8bitschamadosbytes.Cadabyterepresentaalgunscaracteresdetextona
programa.
AmaioriadossistemasmodernosrepresentarcaracteresdetextousandoopadroASCIIque
representacadapersonagemcomumvalornicointeirodetamanhodebyte.Porexemplo,
Figura1.2mostraarepresentaoASCIIdoprogramahello.c.
Oprogramaola.carmazenadonumficheirocomoumasequnciadebytes.Cadabytetem
umvalorinteiroquecorrespondeaalgumpersonagem.Porexemplo,oprimeirobyte
temovalorinteirode35,quecorrespondeaocaractere'#'.Osegundobyte
temovalorinteiro105,quecorrespondeaocaractere'i',eassimpordiante.Avisoprvio
quecadalinhadetextoencerradopeloinvisvelnovalinhadecaracteres'\n',que
representadopelovalorinteiro10.Arquivoscomohello.cqueconsistemexclusivamente
deASCIIcaracteressoconhecidoscomoarquivosdetexto.Todososoutrosarquivossoconhecidoscomobinrio
arquivos.
Arepresentaodahello.cilustraumaideiafundamental:Todasasinformaes
emumarquivosdedisco,incluindosistemas,programasarmazenadosnamemria,osdadosdousurioarmazenadosem
memriaeosdadostransferidosatravsdeumarederepresentadocomoumgrupodebits.
Anicacoisaquedistingueosdiferentesobjetosdedadosocontextoemque
osvemos.Porexemplo,emdiferentescontextos,amesmasequnciadebytes
poderepresentarumnmerointeiro,nmerodepontoflutuante,cadeiadecaracteres,oudamquina
instruo.
Comoprogramadores,precisamosentenderrepresentaesmquinadenmeros
porquenosoosmesmoscomonmerosinteirosereais.Elessofinitos
aproximaesquepodemsecomportardeformasinesperadas.Estaideiafundamental
exploradosemdetalhenoCaptulo2.

# Eu N C eu voc D E <Sp>< S T D Eu O .
35105110 99108117100101 32 60115116100105111 46

H > \n \n Eu N T <Sp>m uma Eu N ( ) \n {


104 62 10 10105110116 32109 97105110 40 41 10123

\N<sp><sp><sp><sp>p R Eu N T F ( " H E eu
10 32 32 32 32112114105110116102 40 34104101108
https://translate.googleusercontent.com/translate_f#202 28/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

eu O , <Sp>w O R eu D \ N " ) \n }
108111 44 32119111114108100 92110 34 41 59 10125
Figura1.2ArepresentaodetextoASCIIdehello.c.

Pgina39

4 Captulo1ATourofComputerSystems

AlmOrigensdalinguagemdeprogramaoC
Cfoidesenvolvido19691973porDennisRitchie,dosLaboratriosBell.AAmericanNational
StandardsInstitute(ANSI)ratificouopadroANSICem1989,eessapadronizaomaistardesetornou
aresponsabilidadedaOrganizaoInternacionaldeNormalizao(ISO).AsnormasdefinemoC
linguagemeumconjuntodefunesdebibliotecaconhecidacomoabibliotecapadroC.KernighaneRitchiedescrever
ANSICnoseulivroclssico,queconhecidocarinhosamentecomo"K&R"[58].NaspalavrasdeRitchie[88],C
"peculiar,falho,eumenormesucesso."Ento,porqueosucesso?

. CestavaintimamenteligadacomosistemaoperacionalUnix.Cfoidesenvolvidodesdeoinciocomoo
linguagemdeprogramaodosistemaparaUnix.AmaiorpartedokerneldoUnix,etodasassuasferramentasdeapoio
ebibliotecas,foramescritosemC.ComoUnixtornousepopularemuniversidadesnofinalde1970einciode
Dcadade1980,muitaspessoasforamexpostasaCedescobriramqueelesgostaram.DesdeUnixfoiescritoquase
inteiramenteemC,podeserfacilmenteportadaparanovasmquinas,oquecriouumpblicoaindamaiorpara
CeUnix.
. Cumalinguagempequena,simples.Oprojetofoicontroladoporumanicapessoa,aoinvsdeumacomisso,
eoresultadofoiumdesignlimpoeconsistentecompoucabagagem.OlivroK&Rdescreveo
linguagemcompletaebibliotecapadro,comnumerososexemploseexerccios,emapenas261pginas.
AsimplicidadedeCtornaramrelativamentefcildeaprenderedeportoparacomputadoresdiferentes.
. Cfoiprojetadoparaumafinalidadeprtica.CfoiconcebidoparaimplementarosistemaoperacionalUnix.
Maistarde,outraspessoasdescobriramqueelespoderiamescreverosprogramasqueelesqueriam,semalngua
ficandonocaminho.
Calinguagemdeescolhaparaaprogramaoemnveldesistema,ehumaenormebaseinstaladade
programasdenveldeaplicativotambm.Noentanto,elenoperfeitoparatodososprogramadoresetodasassituaes.
ponteirosCsoumafontecomumdeerrosdeconfusoedeprogramao.Ctambmnotemapoioexplcito
paraabstraesteis,taiscomoclasses,objetoseexcees.novaslinguagenscomoC++eJava
abordarestasquestesparaosprogramasdenveldeaplicativo.

1.2Programassotraduzidasporoutrosprogramasem
diferentesformas

OprogramaOlcomeaavidacomoumprogramadealtonvelCporquepodeserlido
ecompreendidoporsereshumanosemqueaforma.Noentanto,afimdeexecutarola.c
nosistema,asdemonstraesindividuaisCdevemsertraduzidosporoutrosprogramas
emumaseqnciadebaixonvelemlinguagemdemquinainstrues.Estasinstruesso
emseguida,embaladaemumaformachamadaumprogramaobjectoexecutvelearmazenadocomoumbinrio
arquivodedisco.Programasdeobjetotambmsoreferidoscomoarquivosdeobjetosexecutveis.
EmumsistemaUnix,atraduodoarquivodeorigemparaobjetodearquivoexecutado
porummotoristadecompilador:

unix>gccoOlhello.c

Pgina40

https://translate.googleusercontent.com/translate_f#202 29/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

5
Seo1.2Programassotraduzidasporoutrosprogramasemdiferentesformas

printf.o

hello.c Pr hello.i hello.s assembler hello.o


Compilador linker Ol
processador (CC1) (Como) (Ld)
Fonte (CPP) Modificado Montagem Relocatable Executvel
programa fonte programa objeto objeto
(texto) programa (texto) Programas programa
(texto) (binrio) (binrio)
Figura1.3Osistemadecompilao.

Aqui,omotoristadocompiladorgcclohello.carquivodeorigemeconverteoem
umarquivodeobjetoexecutvelOl.Atraduorealizadanasequncia
dequatrofasesmostradasnaFigura1.3.Osprogramasqueexecutamasquatrofases
(Prprocessador,compilador,assemblerelinker)soconhecidoscoletivamentecomoo
sistemadecompilao.

. Fasedeprprocessamento.Oprprocessador(CPP)modificaoprogramaoriginalC
deacordocomasdirectivasquecomeamcomocaractere#.Porexemplo,a
#include<stdio.h>comandonalinha1dohello.cdizaoprprocessador
paralerocontedodoarquivostdio.hcabealhodosistemaeinserilodiretamente
notextodoprograma.OresultadoumoutroprogramaC,tipicamentecomo.i
sufixo.
. Fasedecompilao.Ocompilador(CC1)traduzohello.iarquivodetextoem
ohello.sarquivodetexto,quecontmumprogramaemlinguagemassembly.Cada
declaraoemumprogramaemlinguagemdemontagemdescreveexatamenteumbaixonvel
deinstruesemlinguagemdemquinaemformadetextopadro.linguagemassembly
til,poisforneceumalinguagemcomumdesadaparadiferentescompiladores
paradiferenteslinguagensdealtonvel.Porexemplo,compiladoresCeFortran
compiladoresambosgeramarquivosdesadanamesmalinguagemassembly.
. Fasedemontagem.Emseguida,omontador(as)traduzhello.semmquina
instruesdelinguagem,ospacoteslosemumaformaconhecidacomoumobjetorelocatable
programa,earmazenaoresultadonahello.oarquivoobjeto.Oarquivohello.o
umarquivobinriocujosbytescodificarinstruesemlinguagemdemquina,emvezde
personagens.Sefssemosparaverhello.ocomumeditordetexto,eleparece
serrabiscos.
. Ligandofase.Notesequeourhelloprogramchamatheprintffunction,que
fazpartedabibliotecapadroCfornecidoportodocompiladorC.oprintf
funoresideemumarquivoprcompiladoobjetoseparadochamadoprintf.o,que
devedealgumaformasermescladocomonossoprogramahello.o.Osligantes(LD)alas
estafuso.OresultadooarquivoOl,queumarquivoobjetoexecutvel(ou
simplesmenteexecutvel)queestprontoparasercarregadoparaamemriaeexecutadaspor
osistema.

Pgina41

6 Captulo1ATourofComputerSystems

AlmdoprojetoGNU
GCCumadasmuitasferramentasteisdesenvolvidaspelaGNU(abreviaodeGNUnoUnix)projeto.o
projetoGNUumainstituiodecaridadeisentadeimpostosiniciadoporRichardStallmanem1984,comoobjetivoambiciosode
desenvolvimentodeumsistemaUnixlikecompletacujocdigofontelivrederestriessobrecomo
elepodesermodificadooudistribudo.OprojetoGNUdesenvolveuumambientecomtodososprincipais
componentesdeumsistemaoperacionalUNIX,excetoparaokernel,quefoidesenvolvidaseparadamentepor
oprojetoLinux.OambienteGNUincluioeditorEmacs,ocompiladorGCC,depuradorgdb,
assembler,linker,utilitriosparabinriosmanipular,eoutroscomponentes.Ocompiladorgcctem
crescidoparaapoiarmuitaslnguasdiferentes,comacapacidadedegerarcdigoparamuitosdiferentes
mquinas.OsidiomassuportadosincluemC,C++,Fortran,Java,Pascal,ObjectiveCeAda.
OprojetoGNUumfeitonotvel,eaindamuitasvezesesquecido.Aaberturamoderna
movimentodecdigo(comumenteassociadocomLinux)devesuasorigensintelectuaisparaoprojetoGNUda
noodesoftwarelivre("free"comoem"liberdadedeexpresso",noem"cervejagrtis").Almdisso,oLinuxdevemuitodesua
popularidadeparaasferramentasGNU,queproporcionamoambienteparaokernelLinux.

https://translate.googleusercontent.com/translate_f#202 30/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

1.3PagaparaentendercomoossistemasdecompilaoTrabalho
Paraprogramassimples,comohello.c,podemoscontarcomosistemadecompilaode
produzircdigomquinacorretaeeficiente.Noentanto,existemalgunsimportante
razespelasquaisosprogramadoresprecisamentendercomoossistemasdecompilaotrabalhar:

. Otimizandoodesempenhodoprograma.Compiladoresmodernossoferramentassofisticadas
quenormalmenteproduzemumbomcdigo.Comoprogramadores,noprecisasaber
ofuncionamentointernodocompilador,afimdeescrevercdigoeficiente.Contudo,
afimdetomardecisesboascodificaoemnossosprogramasemC,nsprecisamosdeuma
compreensobsicadocdigodenveldemquinaecomoocompiladortraduz
diferentesdeclaraesCemcdigodemquina.Porexemplo,umainstruoswitch
sempremaiseficientedoqueumasequnciadeifelse?Quantos
sobrecargaincorridaporumachamadadefuno?umloopwhilemaiseficientedoque
umloop?Sorefernciasponteiromaiseficientedoqueosndicesdematriz?Porqu
Onossoloopdeexecuomuitomaisrpidoseresumiremumavarivellocalemvezdeum
argumentoquepassadoporreferncia?Comoumafunopodecorrermaisrpidoquandons
simplesmentereorganizarosparntesesemumaexpressoaritmtica?
NoCaptulo3,vamosintroduzirduaslinguagensdemquinarelacionados:IA32,o
cdigode32bitsquesetornouonipresenteemmquinasrodandoLinux,Windows,
e,maisrecentemente,ossistemasoperativosMacintoshex8664,um64bit
extensoencontradaemmicroprocessadoresmaisrecentes.Nsdescrevemoscomocompiladores
traduzirdiferentesconstruesCemlnguas.NoCaptulo5,vocvai
aprenderaafinarodesempenhodeseusprogramasemC,tornandosimples
transformaesnocdigoCqueajudamocompiladorfazeroseutrabalhomelhor.Dentro
Captulo6,vocvaiaprendersobreanaturezahierrquicadosistemadememria,
comomatrizesdedadosCcompiladoresarmazenarnamemria,ecomoseusprogramasCpode
exploraresseconhecimentoparafuncionarmaiseficientemente.

Pgina42

7
Seo1.4Processadoresdelereinterpretarinstruesarmazenadasnamemria

. Entendererroslinktempo.Emnossaexperincia,algunsdosmaisperplex
errosdeprogramaoingestorelacionadoscomofuncionamentodoligante,especialmente
quandovocesttentandoconstruirgrandessistemasdesoftware.Porexemplo,oquefaz
quesignificaquandoovinculadorrelataqueelenopoderesolverumareferncia?Oque
diferenaentreumavarivelestticaeumavarivelglobal?Oqueacontecese
definirduasvariveisglobaisemdiferentesarquivosCcomomesmonome?oque
adiferenaentreumabibliotecaestticaeumabibliotecadinmica?Porquefazisso
importaqueordemlistamosbibliotecasnalinhadecomando?Emaisassustadordetodos,
porquealgunserrosrelacionadoscomovinculadornoapareceratqueotempodeexecuo?Vocvaiaprender
asrespostasaessestiposdeperguntasnoCaptulo7.
. Evitandofalhasdesegurana.Pormuitosanos,asvulnerabilidadesdeestourodebuffertm
foiresponsvelpelamaioriadasfalhasdeseguranaemservidoresderedeedeInternet.
Estasvulnerabilidadesexistemporquemuitopoucosprogramadoresentendemanecessidade
pararestringircuidadosamenteaquantidadeetiposdedadosqueaceitardenoconfivel
fontes.Umprimeiropassoparaaprenderaprogramaoseguraentenderocon
sequnciasdasviasdedadoseinformaodecontrolosoarmazenadosnoprograma
pilha.Cobrimosasdisciplinaspilhaeestourodebufferdevulnerabilidadesem
Captulo3comopartedonossoestudodalinguagemassembly.Nstambmaprendersobre
mtodosquepodemserutilizadospeloprogramador,compilador,esistemaoperativo
parareduziraameaadeataque.

1.4ProcessadoreslereinterpretarInstrues
Armazenadosnamemria
Nesteponto,onossoprogramadecdigohello.cfoitraduzidapelacompilao
sistemaemumarquivoobjetoexecutvelchamadoOl,quearmazenadonodisco.Paracorrer
oarquivoexecutvelemumsistemaUnix,quedigitaroseunomeaumprogramadeaplicao
conhecidocomoumescudo:
unix>./hello
OlMundo
unix>
Oshelluminterpretadordelinhadecomandoqueimprimeumprompt,esperaquevocdigiteum
linhadecomandoe,emseguida,executaocomando.Seaprimeirapalavradocomando
linhanocorrespondeaumcomandobuiltinshell,ashellassumeque
onomedeumarquivoexecutvelqueeledevecarregareexecutar.Portanto,nestecaso,
ascargasdeshelleexecutaoprogramaOle,emseguida,aguardaoparaterminar.o
https://translate.googleusercontent.com/translate_f#202 31/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Olprogramaimprimeasuamensagemparaatelaedepoistermina.Oshell,emseguida,
imprimeumprompteaguardaaprximalinhadecomandodeentrada.

1.4.1OrganizaodehardwaredeumSistema
ParaentenderoqueacontececomonossoprogramaOlquandoexecutlo,precisamos
compreenderaorganizaodeumsistematpico,oqualmostradoemhardware
Figura1.4.EstaimagememparticularmodeladoapsafamliadeprocessadoresIntelPentium

Pgina43

8 Captulo1ATourofComputerSystems

Figura1.4 CPU
organizaohardware Registrearquivo
deumsistematpico.CPU:
Unidadecentraldeprocessamento,PC ALU
ALU:Aritmtica/lgica
Unidade,PC:contadordeprograma, busdesistema
barramentodememria
USB:UniversalSerialBus.
I/O
interfacedebarramento ponte aPrincipal
memria

I/Onibus
slotsdeexpansopara
outrosdispositivos,tais
USB Grficos Disco comoadaptadoresderede
controlador adaptador controlador

mouseTeclado Exibio Olexecutvel


Disco armazenadonodisco

sistemas,mastodosossistemastmumaaparnciasemelhante.Nosepreocupecomo
acomplexidadedessafiguraagora.Nsvamoschegaraseusvriosdetalhesemfases
durantetodoocursodolivro.

nibus
Correndoaolongodosistemaumconjuntodecondutaselctricaschamadosautocarros
quecarregambytesdeinformaeseparatrsentreoscomponentes.nibus
sonormalmenteconcebidosparatransferirpartesdetamanhofixodebytesconhecidoscomopalavras.o
nmerodebytesdeumapalavra(otamanhodepalavra)umparmetroessencialquesistema
variaentreossistemas.Amaioriadasmquinasdehojetmtamanhosdepalavraquerde4bytes(32
bits)ou8bytes(64bits).Paraobemdanossadiscussoaqui,vamossuporumapalavra
tamanhode4bytes,evamossuporqueosautocarrostransferirapenasumapalavradecadavez.

DispositivosI/O
Entrada/sada(I/O)sodispositivosdeconexodosistemaparaomundoexterno.Nosso
sistemadeexemplotemquatrodispositivosI/O:umtecladoemouseparaentradadousurio,um
deexibioparaproduodeutilizador,eumaunidadededisco(ousimplesmentedisco)paraarmazenamentoalongoprazode
dedadoseprogramas.Inicialmente,oprogramaexecutvelOlresidenodisco.
CadadispositivodeI/OestligadoaobarramentoE/Souporumcontroladorouumadaptador.
Adistinoentreosdoisprincipalmenteumadasembalagens.Oscontroladoressochips
conjuntosemsiprpriosouemplacadecircuitoimpressoprincipaldosistemadodispositivo(muitasvezeschamado
aplacame).Umadaptadorumcartoqueconectaaumslotnaplacame.
Independentementedisso,oobjetivodecadaumatransfernciadeinformaeseparatrsentre
oI/OnibuseumdispositivodeI/O.

Pgina44

https://translate.googleusercontent.com/translate_f#202 32/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

9
Seo1.4Processadoresdelereinterpretarinstruesarmazenadasnamemria

Captulo6temmaisadizersobrecomodispositivosdeI/O,comodiscosdetrabalho.Dentro
Captulo10,vocvaiaprendercomousarainterfaceUnixI/Oparadispositivosdeacessode
seusprogramasdeaplicao.Nsnosconcentramosnaclasseparticularmenteinteressantededispositivos
conhecidascomoredes,masastcnicasdegeneralizarparaoutrostiposdedispositivosbem.

Memriaprincipal
Amemriaprincipalumdispositivodearmazenamentotemporrioquecontmtantoumprogramae
osdadosqueelemanipulaenquantoqueoprocessadorestaexecutaroprograma.Fisicamente,
memriaprincipalconsistedeumacoleodememriadeacessoaleatriodinmico(DRAM)
salgadinhos.Logicamente,amemriaorganizadacomoumamatrizlineardebytes,cadaumcomoseuprprio
endereoexclusivo(ndicedematriz)apartirdezero.Emgeral,cadaumadasamquina
instruesqueconstituemumprogramapodeconsistirdeumnmerovariveldebytes.
OstamanhosdeitensdedadosquecorrespondemsvariveisdoprogramaCparavariardeacordo
tipo.Porexemplo,emumamquinaIA32executandooLinux,dadosdotiposhortexige
doisbytes,tiposint,float,elongosquatrobytes,etipodoubleoitobytes.
Captulo6temmaisadizersobrecomoastecnologiasdememria,comoDRAM
chipsdetrabalhar,ecomoelessocombinadosparaformaramemriaprincipal.

Processador
Aunidadecentraldeprocessamento(CPU)ou,simplesmente,processador,queomotorinter
Prets(ouexecuta)instruesarmazenadasnamemriaprincipal.Nasuaessnciaumapalavrasized
dispositivodearmazenamento(ouregisto)chamadodecontadordeprograma(PC).Emqualquerpontonotempo,
ospontosPCAT(contmoendereode)algumainstruoemlinguagemdemquinaem
memriaprincipal.1
Apartirdomomentoemqueaenergiaaplicadaaosistema,ataomomentoemqueo
acorrentedesligada,umprocessadorexecutarepetidamenteainstruoapontadapelo
contadordeprogramaeactualizaocontadordeprogramaparaapontarparaaprximainstruo.
Umprocessadorpareceoperardeacordocomumaexecuodeinstruomuitosimples
modelo,definidopeloseuconjuntodeinstrues.Nestemodelo,executarinstrues
emsequnciarigorosa,eexecutarumanicainstruoenvolveaexecuodeumasrie
depassos.Oprocessadorlainstruodememriaapontadapelo
contadordeprograma(PC),interpretaosbitsnainstruo,executaalgumassimples
operaoditadapelainstruo,eatualizaoPCparaapontarparaaprxima
deinstrues,oquepodeounosercontguanamemriaparaainstruoque
estavaapenasexecutado.
Existemapenasalgumasdessasoperaessimples,equegiramemtorno
memriaprincipal,oarquivoderegisto,eaunidadearitmtica/lgica(ALU).Oregistro
arquivoumpequenodispositivodearmazenamentoqueconsisteemumconjuntoderegistospalavradetamanho,
cadaumcomseuprprionome.AALUcalculanovosvaloresdedadosedeendereos.
AquiestoalgunsexemplosdasoperaessimplesqueaCPUpoderealizar
apedidodeumainstruo:

1.PCtambmumasiglacomumenteusadopara"computadorpessoal".Noentanto,adistinoentre
osdoisdeveserclaroapartirdocontexto.

Pgina45

10 Captulo1ATourofComputerSystems

. Carga:Copiarumbyteouumapalavradamemriaprincipalemumregistrador,sobrescrevendo
ocontedoanteriordocadastro.
. Loja:Copiarumbyteouumapalavradeumregistroparaumalocalizaonamemriaprincipal,
substituindoocontedoanteriordesselocal.
. Operar:CopieocontedodedoisregistradoresparaaULA,realizarumaaritmtica
operaoemduaspalavras,earmazenaroresultadoemumregisto,substituindoo
contedosanterioresdoreferidoregisto.
. Ir:Extraiaumapalavraapartirdaprpriainstruoecopiaressapalavraparao
contadordeprograma(PC),substituindoovaloranteriordaPC.

Dizemosqueumprocessadorpareceserumasimplesaplicaodasuain
structiondefinirarquitetura,masnaverdadeosprocessadoresmodernosusammuitomaiscomplexa

https://translate.googleusercontent.com/translate_f#202 33/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
mecanismosparaaceleraraexecuodoprograma.Assim,podemosdistinguiropro
arquiteturadoconjuntodeinstruesdacessor,descrevendooefeitodecadacdigodemquina
instruo,apartirdasuamicroarquitetura,descrevendocomooprocessadorrealmente
Implementadas.Quandoestudamosocdigodemquinanocaptulo3,vamosconsideraro
abstraofornecidapeloconjuntodeinstruesdamquina.Captulo4possui
maisadizersobrecomoosprocessadoressorealmenteimplementadas.

1.4.2ExecutandooOlPrograma
Dadaestavisosimplesdeorganizaohardwaredosistemaeoperao,nspodemos
comearaentenderoqueacontecequandoexecutaronossoprogramadeexemplo.Nsdevemos
omitirummontededetalhesaquiqueseropreenchidosmaistarde,masporagoravamosnoscontentar
comaimagemgrande.
Inicialmente,oprogramashellestexecutandosuasinstrues,esperandopornsparadigitar
umcomando.medidaquedigitaroscaracteres"./hello"noteclado,oshell
programalcadaumnumregisto,e,emseguida,armazenaonamemria,talcomomostradona
Figura1.5.
Quandobaterateclaenternoteclado,oshellsabequetemos
terminardedigitarocomando.Oshell,emseguida,carregaoarquivoOlexecutvel
execuodeumasequnciadeinstruesquecopiaocdigoedadosnoOl
objetodearquivododiscoparaamemriaprincipal.Osdadosincluemaseqnciadecaracteres
"Ol,mundo\n"quevenhamaserimpresso.
Usandoumatcnicaconhecidacomoacessodiretomemria(DMA,discutidonoCap
Ter6),osdadossotransferidosdirectamenteapartirdodiscoparaamemriaprincipal,sempassaratravs
oprocessador.EstepassomostradonaFigura1.6.
UmavezqueocdigoeosdadosnoarquivoOlobjetosocarregadosnamemria,a
processadorcomeaaexecutarasinstruesemlinguagemdemquinanoOlpro
rotinaprincipaldegrama.Estasinstruescopiarosbytesna"Ol,mundo\n"
cadeiadamemriaparaoarquivoderegistro,edelparaodispositivodeexibio,onde
elessoexibidosnatela.EstepassomostradonaFigura1.7.

Pgina46

11
Seo1.4Processadoresdelereinterpretarinstruesarmazenadasnamemria

Figura1.5 CPU
LendooOl Registrearquivo
comandoapartirdo
teclado. PC ALU
busdesistema
barramentodememria

I/O
interfacedebarramento ponte aPrincipal
"Ol"
memria

I/Onibus
slotsdeexpansopara
outrosdispositivos,tais
USB Grficos Disco comoadaptadoresderede
controlador adaptador controlador

mouseTeclado Exibio
Doutilizador Disco
Tipos
"Ol"

CPU
Registrearquivo
PC ALU
busdesistema
barramentodememria

interfacedebarramento I/O aPrincipal


"Ol,mundo\n"
ponte memriaOlcdigo

I/Onibus
slotsdeexpansopara
outrosdispositivos,tais
USB Grficos Disco comoadaptadoresderede
controlador adaptador controlador

https://translate.googleusercontent.com/translate_f#202 34/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

mouseTeclado Exibio
Olexecutvel
Disco armazenadonodisco

Figura1.6Carregandooexecutveldodiscoparaamemriaprincipal.

Pgina47

12 Captulo1ATourofComputerSystems

Figura1.7 CPU
Escrevendoacadeiadesada Registrearquivo
apartirdamemriaparaa
exibio. PC ALU
busdesistema
barramentodememria

I/O "Ol,mundo\n"
aPrincipal
interfacedebarramento ponte memriaOlcdigo

I/Onibus
slotsdeexpansopara
outrosdispositivos,tais
USB Grficos Disco comoadaptadoresderede
controlador adaptador controlador

mouseTeclado Exibio Olexecutvel


"Ol,mundo\n" Disco armazenadonodisco

1.5cachesMatria
Umalioimportanteapartirdesteexemplosimplesqueumsistemapassamuito
tempomovendoinformaodeumlugarparaoutro.Asinstruesdemquinaem
oprogramaOlsooriginalmentearmazenadosnodisco.Quandooprogramacarregado,
elessocopiadosparaamemriaprincipal.medidaqueoprocessadorexecutaoprograma,instrues
essocopiadosdamemriaprincipalparaoprocessador.Damesmaforma,acadeiadedados
"Ol,mundo\n",originalmentenodisco,copiadaparaamemriaprincipal,edepoiscopiada
apartirdamemriaprincipalparaodispositivodeexibio.Daperspectivadeumprogramador,muito
destacpiaasobrecargaqueretardao"trabalhoreal"doprograma.Portanto,
umobjectivoimportanteparaosdesignersdesistemasfazercomqueessasoperaesdecpiadecorrertorpidoquanto
possvel.
Porcausadasleisfsicas,dispositivosdearmazenamentomaioressomaislentosdoquearmazenamentomenor
dispositivosdeidade.Edispositivosmaisrpidossomaiscarosdeconstruirdoqueoseumaislento
homlogos.Porexemplo,aunidadedediscoemumsistematpicopodeser1000vezes
maiordoqueamemriaprincipal,maspodelevaroprocessador10.000.000vezes
maistempoparalerumapalavraapartirdodiscodoquedememria.
Damesmaforma,umtpicoarquivoarmazenaregistoapenasalgumascentenasdebytesdeinformao,
emoposioamilharesdemilhesdebytesnamemriaprincipal.Noentanto,oprocessadorpode
lerosdadosdoarquivoderegistrodequase100vezesmaisrpidodoqueapartirdamemria.At
maisproblemticos,comoatecnologiadesemicondutoresprogrideaolongodosanos,este
gapprocessadordememriacontinuaaaumentar.maisfcilemaisbaratofazer
processadorescorrermaisrpidodoqueestafazerpistaprincipalmemriamaisrpida.
Paralidarcomadiferenadeprocessadordememria,projetistasdesistemasincluemmenor
dispositivosdearmazenamentomaisrpidoschamadosmemriascache(ousimplesmentecaches)queservem
reasdearmazenamentotemporrioparainformaesqueoprocessadorprovvelanecessidadede
futuroprximo.AFigura1.8mostraasmemriascacheemumsistematpico.umL1

https://translate.googleusercontent.com/translate_f#202 35/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Pgina48

13
Seo1.6DispositivosdeArmazenamentoformamumahierarquia

Figura1.8 chipdeCPU
memriascache.
Registrearquivo
esconderijo ALU
recordaes

barramentodosistemabusdememria

I/O aPrincipal
interfacedebarramento ponte memria

decachenochipdoprocessadordetmdezenasdemilharesdebytesepodeseracessado
quasetorpidoquantooarquivoderegistro.AmaiorcacheL2,comcentenasdemilhares
amilhesdebytesligadaaoprocessadoratravsdeumautocarroespecial.Podelevar5
vezesmaislongoparaoprocessodeacessomemriacacheL2doqueacacheL1,maseste
ainda5a10vezesmaisrpidodoqueoacessomemriaprincipal.OscachesL1eL2so
implementadocomatecnologiadehardwareconhecidacomomemriadeacessoaleatrioesttica
(SRAM).sistemasnovosemaispoderososaindatmtrsnveisdecache:L1,
L2eL3.Aideiaportrsdecachequeumsistemapodeobteroefeitodeambos
umamemriamuitograndeeumamuitorpidoatravsdaexploraodelocalidade,atendnciapara
programasdeacessoaosdadosecdigoemregieslocalizadas.Atravsdacriaodecachesparasegurar
dadosquesusceptveldeseracessadamuitasvezes,podemosexecutaramaioriadasoperaesdememria
utilizandoascachesrpidos.
Umadasliesmaisimportantesnestelivroqueprogramaodeaplicao
mersqueestocientesdememriascachepodeexplorlosparamelhorarosdesem
mancedeseusprogramasemumaordemdemagnitude.Vocvaiaprendermaissobre
estesdispositivosimportantesecomoexplorlosnoCaptulo6.

1.6DispositivosdeArmazenamentoformamumahierarquia

Estanoodeinserodeumdispositivodearmazenamentomenor,maisrpido(porexemplo,amemriacache)
entreoprocessadoreumdispositivomaislentomaior(porexemplo,amemriaprincipal)despeja
serumaideiageral.Naverdade,osdispositivosdearmazenamentoemtodosossistemasdecomputadorso
organizadacomoumahierarquiadememriasemelhantedaFigura1.9.medidaqueavanamosapartirdotopo
dahierarquiaparaofundo,osdispositivossetornammaislenta,maioremenosonerosa
porbyte.Oarquivoderegistroocupaonvelmaisaltonahierarquia,queconhecido
comonvel0,ouL0.MostramostrsnveisdecacheL1aL3,ocupandomemria
nveisdehierarquia1a3.Amemriaprincipalocupaonvel4,eassimpordiante.
Aideiaprincipaldeumahierarquiadememriaqueoarmazenamentoemumnvelservecomoum
cacheparaarmazenamentonoprximonvelinferior.Assim,oarquivoderegistroumcacheparao
cacheL1.CachesL1eL2socachesparaL2eL3,respectivamente.OcacheL3
umcacheparaamemriaprincipal,queumcachededisco.Emalgunsrede
sistemascomsistemasdearquivosdistribudos,odiscolocalservecomoumcacheparaosdadosarmazenados
nosdiscosdeoutrossistemas.

Pgina49

14 Captulo1ATourofComputerSystems

L0:
Menor, regs registrosdeCPUmantenhapalavras
Maisrpido, recuperadasdamemriacache.
e L1: cacheL1
maiscaro (SRAM) cacheL1detmlinhasdecache
(Porbyte) recuperadodecacheL2.
armazenamento L2: cacheL2
dispositivos (SRAM) cacheL2detmlinhasdecache
recuperadodecacheL3.
L3: cacheL3
(SRAM)
Maior, cacheL3detmlinhasdecache
recuperadodamemria.
https://translate.googleusercontent.com/translate_f#202 36/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Maisdevagar,
e L4: Memriaprincipal
(DRAM)
maisbarata Amemriaprincipaldetmblocosdedisco
(Porbyte) recuperadasapartirdediscoslocais.
L5:
armazenamento armazenamentosecundriolocal
dispositivos (discoslocais) discoslocaisarmazenararquivos
recuperadasapartirdediscosem
L6: armazenamentosecundrioremoto servidorderederemoto.
(Sistemasdearquivosdistribudos,servidoresWeb)

Figura1.9Umexemplodeumahierarquiadememria.

Assimcomoosprogramadorespodemexploraroconhecimentodosdiferentescachesparamelhorar
desempenho,osprogramadorespodemexplorarasuacompreensodetodaamemria
hierarquia.Captulo6termuitomaisadizersobreisso.

1.7Osistemaoperacionalgerenciaohardware
VoltandoaonossoexemploOl.QuandooshellcarregadoeexecutouoprogramaOl,
equandooprogramaOlimpressaasuamensagem,nemprogramaacessouo
teclado,datela,discooumemriaprincipaldiretamente.Emvezdisso,elescontaramcoma
serviosprestadospelosistemaoperacional.Podemospensarosistemaoperacionalcomo
umacamadadesoftwareinterpostaentreoprogramadeaplicaoeohardware,
comomostradonaFigura1.10.Todasastentativasporpartedeumprogramaaplicativoparamanipularo
hardwaredevepassarpelosistemaoperacional.
Osistemaoperacionaltemduasfinalidadesprincipais:(1)paraprotegerohardware
demauusoporaplicaesemfuga,e(2)paraforneceraplicaescomsimples
emecanismosuniformesparaamanipulaocomplicadaemuitasvezestotalmentediferentes
dispositivosdehardwaredebaixonvel.Osistemaoperacionalatingeambososobjetivospormeiodo

Figura1.10 programasdeaplicao
vistaemcamadasdeum Programas
sistemadecomputador. Sistemaoperacional
Processador Memriaprincipal
dispositivosdeI/O
ferragens

Pgina50

Seo1.7Osistemaoperacionalgerenciaohardware 15

Figura1.11 Processos
Abstraesfornecidaspela
umsistemaoperativo. Memriavirtual

arquivos

Processador Memriaprincipal
dispositivosdeI/O

abstraesfundamentaisapresentadosnaFigura1.11:processos,memriavirtual,e
arquivos.Comoestenmerosugere,osarquivossoabstraesparadispositivosdeE/S,amemriavirtual
umaabstrao,tantoparaamemriaprincipalediscodedispositivosI/O,eosprocessos
soabstraesparaoprocessador,memriaprincipal,edispositivosdeE/S.Discutiremos
umdecadavez.

AlmUnixePOSIX
Adcadade1960foiumapocadegrandessistemas,complexosoperacionais,comooOSdaIBM/360edaHoneywell
sistemasMultics.EnquantoOS/360foiumdosprojetosdesoftwaremaisbemsucedidosnahistria,Multics
searrastouporanosenuncaalcanadoousoemlargaescala.LaboratriosBellfoiumparceirooriginalno
projetoMultics,masretirouseem1969porcausadapreocupaocomacomplexidadedoprojetoeo
faltadeprogresso.EmreaoasuaexperinciaMulticsdesagradvel,umgrupodeBellLabsresearchers
KenThompson,DennisRitchie,DougMcIlroy,eJoeOssannacomeouatrabalharem1969emumsimples
sistemaoperacionalparaumcomputadorDECPDP7,inteiramenteescritoemlinguagemdemquina.Muitasdasideias
nonovosistema,taiscomoosistemadearquivoshierrquicoeanoodeumshellcomoumprocessoemnveldeusurio,
foramemprestadosdoMultics,masimplementadoemumpacotemenor,maissimples.Em1970,BrianKernighan
apelidadoonovosistema"Unix",comoumtrocadilhocomacomplexidadedo"Multics."Okernelfoireescritoem
Cem1973,eUnixfoianunciadoparaomundoexteriorem1974[89].
PorqueBellLabsfezocdigofontedisponvelparaescolascomcondiesgenerosas,Unixdesenvolvido
umgrandenmerodeseguidoresnasuniversidades.OtrabalhomaisinfluentefoifeitonaUniversidadedaCalifrnia
https://translate.googleusercontent.com/translate_f#202 37/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
emBerkeley,nofinalde1970einciode1980,compesquisadoresdeBerkeleyadiodememriavirtuale
osprotocolosdeInternetemumasriedelanamentoschamadoUnix4.xBSD(BerkeleySoftwareDistribution).
Aomesmotempo,aBellLabsestavalanandosuasprpriasverses,queficouconhecidocomoSystemVUnix.
Versesdeoutrosfornecedores,taiscomoosistemaSunMicrosystemsSolaris,foramderivadasapartirdestas
BSDoriginaleasversesSystemV.
Oproblemasurgiuemmeadosde1980comovendedoresUnixtentoudiferenciarsepelaadiodenovo
ecaractersticasmuitasvezesincompatveis.Paracombaterestatendncia,oIEEE(InstituteforElectricalandElectronics
Engenheiros)patrocinouumesforoparapadronizaroUnix,maistardeapelidadode"POSIX"porRichardStallman.o
resultadofoiumafamliadepadres,conhecidoscomoospadresPOSIX,quecobremquestescomoalinguagemC
interfaceparachamadasUnixdosistema,programasdeshelleutilitrios,segmentoseprogramaoderede.Como
maissistemasdecumprirmaisplenamentecomospadresPOSIX,asdiferenasentreasversesdoUnixso
desaparecendogradualmente.

Pgina51

16 Captulo1ATourofComputerSystems

1.7.1Processos
QuandoumprogramacomooOlexecutadoemumsistemamoderno,osistemaoperacional
proporcionaailusodequeoprogramaonicoemexecuonosistema.o
programapareceterusoexclusivodetantooprocessador,amemriaprincipal,e
DispositivosI/O.Oprocessadorapareceparaexecutarasinstruesnoprograma,um
apsaoutra,seminterrupo.Eocdigoeosdadosdoprogramaaparecem
paraserosnicosobjetosnamemriadosistema.Estasilusessofornecidospelo
noodeumprocesso,umadasideiasmaisimportantesebemsucedidasnocomputador
Cincia.
Umprocessoaabstraodosistemaoperacionalparaumprogramaemexecuo.Multi
processosdePLEpodemserexecutadossimultaneamentenomesmosistema,ecadaprocessoparece
terusoexclusivodohardware.Aomesmotempo,queremosdizerqueainstruo
esdeumprocessosointercaladascomasinstruesdeumoutroprocesso.Dentro
amaioriadossistemas,existemmaisprocessosparaexecutardoquehCPUsparaexecutlos.
Ossistemastradicionaisspodiaexecutarumprogramaaomesmotempo,enquantomaisrecentemulti
ncleoprocessadorespodemexecutarvriosprogramassimultaneamente.Emambososcasos,uma
nicaCPUpodeaparecerparaexecutarvriosprocessosaomesmotempofazendocomqueo
interruptordeprocessadorentreeles.Osistemaoperativoexecutaestaintercalao
comummecanismoconhecidocomomudanadecontexto.Parasimplificarorestodestecusso
sion,consideramosapenasumsistemadeprocessadornicoquecontmumanicaCPU.Nsvamos
retornardiscussodemultiprocessadorsistemasnaSeo1.9.1.
Osistemaoperacionalmantmocontroledetodasasinformaesdeestadoqueoprocessode
precisa,afimdeexecutar.Esteestado,queconhecidocomoocontexto,incluimao
mao,taiscomoosvaloresatuaisdoPC,oarquivoderegistro,eoscontedos
dememriaprincipal.Emqualquerpontonotempo,umsistemanicoprocessadorpodeexecutarapenas
ocdigoparaumnicoprocesso.Quandoosistemaoperativodecidirtransferircon
controledoprocessoatualparaumnovoprocesso,elerealizaumamudanadecontexto
salvandoocontextodoprocessoactual,restaurandoombitodonovo
processo,edepoispassarocontroloparaonovoprocesso.Onovoprocessopega
exatamentedeondeparou.AFigura1.12mostraaidiabsicaparaonossoexemploOl
cenrio.
Existemdoisprocessossimultneosemnossocenriodeexemplo:oprocessodeshell
eoprocessoOl.Inicialmente,oprocessoshellestsendoexecutadosozinho,aguardandoentrada
nalinhadecomando.QuandopedimosparaexecutaroprogramaOl,oshellcarrega

Figura1.12 Tempo processoA processoB


contextodoprocesso
comutao. cdigodousurio
ler Contexto
cdigodokernel
interruptor
cdigodousurio
interrupodedisco Contexto
Retorna cdigodokernel
interruptor
deleitura cdigodousurio

https://translate.googleusercontent.com/translate_f#202 38/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina52

Seo1.7Osistemaoperacionalgerenciaohardware 17

anossasolicitaoinvocandoumafunoespecialconhecidocomoumachamadadesistemaquepassa
decontroloparaosistemaoperativo.Osistemaoperacionalsalvaocontextodoshell,
criaumnovoprocessoOleseucontextoe,emseguida,passaocontroleparaonovo
Olprocesso.ApsOltermina,osistemaoperacionalrestauraocontexto
doprocessodeshellepassaocontroledevoltaparaele,ondeeleesperaparaaprxima
entradadelinhadecomando.
Implementandoaabstraoprocessorequerumacooperaoestreitaentre
tantoohardwaredebaixonveleosoftwaredosistemaoperacional.Vamosexplorar
comoissofunciona,ecomoosaplicativospodemcriarecontrolarseusprpriosprocessos,
noCaptulo8.

1.7.2Threads
Emboranormalmentepensamosdeumprocessocomotendoumnicofluxodecontrole,namoderna
sistemasdeumprocessorealmentepodeconsistiremvriasunidadesdeexecuo,chamadasthreads,
cadaumexecutandonocontextodoprocessoepartilharomesmocdigoeglobal
dados.Tpicossoummodelodeprogramaocadavezmaisimportanteporcausada
exignciadesimultaneidadeemservidoresderede,porquemaisfcildecompartilhardados
entrevriostpicosqueentrevriosprocessos,eportpicos
sotipicamentemaiseficientedoqueosprocessos.Multithreadingtambmumamaneiradefazer
programasexecutadosmaisrapidamentequandovriosprocessadoresestodisponveis,comodiscutiremosem
Ponto1.9.1.Vocvaiaprenderosconceitosbsicosdesimultaneidade,incluindocomo
escreverprogramasderosca,noCaptulo12.

1.7.3MemriaVirtual
Amemriavirtualumaabstraoqueforneceacadaprocessocomailusodeque
temusoexclusivodamemriaprincipal.Cadaprocessotemamesmavisouniformede
memria,queconhecidocomooseuespaodeendereovirtual.Oespaodeendereovirtualpara
LinuxprocessosmostradonaFigura1.13.(OutrossistemasUnixusarumlayoutsimilar.)
NoLinux,aregiosuperiordoespaodeendereoreservadoparaocdigoeosdados
nosistemaoperativoquecomumatodososprocessos.Aregioinferiordo
espaodeendereocontmocdigoeosdadosdefinidospeloprocessodoutilizador.Observeque
endereosnoaumentofiguraapartirdofundoparaotopo.
Oespaodeendereosvirtuaisvistoporcadaprocessoconsistedeumnmerodebem
reasdefinidas,cadaumcomumafinalidadeespecfica.Vocvaiaprendermaissobreestasreas
maistardenolivro,maselevaisertilparaolharbrevementeparacadaum,comeandocomo
maisendereosetrabalharonossocaminhoat:

. Cdigodeprogramaedados.Cdigocomeanomesmoendereofixoparatodososprocessos,
seguidoporlocaisdedadosquecorrespondemsvariveisglobaisC.Ocdigoe
reasdedadossoinicializadosdiretamenteapartirdocontedodeumarquivoobjetoexecutvel,
nonossocasooexecutvelOl.Vocvaiaprendermaissobreestapartedo
espaodeendereoquandoestudamosligandoecarregamentonoCaptulo7.

Pgina53

18 Captulo1ATourofComputerSystems

Figura1.13 Memria
endereovirtualprocesso memriavirtualdokernel invisvelaos
cdigodousurio
espao. pilhadousurio
(Criadoemtempodeexecuo)

Memriaregiomapeadapara
funoprintf
bibliotecascompartilhadas

https://translate.googleusercontent.com/translate_f#202 39/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Runtimeheap
(Criadoemtempodeexecuopormalloc)
Dadosdeleitura/gravao
Carregadoapartirdo
Olarquivoexecutvel
Sdeleituradecdigoededados
0x08048000(32)
0x00400000(64)
0

. Heap.Asreasdecdigoededadossoimediatamenteseguidopelaruntimeheap.
Aocontrriodasreasdecdigoededados,quesofixadosemtamanhoumavezqueoprocessocomea
execuo,osexpandeheapecontratosdinamicamenteemtempodeexecuocomoresultado
dechamadasparaCrotinasdebibliotecapadro,taiscomomallocelivre.Nsvamosestudar
montesemdetalhesquandoaprendemossobreogerenciamentodememriavirtualnoCaptulo9.
. Bibliotecascompartilhadas.Pertodocentrodoespaodeendereoumareaquepossuia
cdigoedadosparabibliotecascompartilhadas,comoabibliotecapadroCeamatemtica
biblioteca.Anoodeumabibliotecacompartilhadaumpoderosomasumpoucodifcil
conceito.Vocvaiaprendercomoelesfuncionamquandoestudamosavinculaodinmicaem
Captulo7.
. Pilha.Napartesuperiordoespaodeendereovirtualdousurioapilhadousurioque
ocompiladorusaparaimplementarchamadasdefuno.Comoapilha,apilhadousurio
seexpandeecontraidinamicamenteduranteaexecuodoprograma.Dentro
particular,cadavezquechamarumafuno,apilhacresce.Cadavezquevoltar
apartirdeumafuno,elesecontrai.Vocvaiaprendercomoocompiladorusaapilha
noCaptulo3.
. Amemriadokernelvirtual.Oncleoapartedosistemaoperacionalque
residentesemprenamemria.Aregiosuperiordoespaodeendereoreservadapara
okernel.programasdeaplicaonotempermissoparalerouescreverocontedo
dessareaouparachamardiretamentefunesdefinidasnocdigodokernel.
Paraamemriavirtualparaotrabalho,necessriaumainteraosofisticadaentre
ohardwareeosoftwaredosistemaoperativo,queincluiumatraduodehardware
decadaendereogeradopeloprocessador.Aideiabsicaadearmazenarocontedo

Pgina54

Seo1.7Osistemaoperacionalgerenciaohardware 19

dememriavirtualdeumprocessonodisco,eemseguida,usaramemriaprincipalcomoumcache
paraodisco.Captulo9explicacomoissofuncionaeporquetoimportanteparao
operaodesistemasmodernos.

1.7.4Arquivos
Umficheiroumasequnciadebytes,nadamaisenadamenos.TodososdispositivosI/O,
incluindodiscos,teclados,monitores,eatmesmoredes,modeladocomoumarquivo.Todos
entradaesadanosistemafeitaporarquivosdeleituraeescrita,usandoum
pequenoconjuntodechamadasdesistemaconhecidocomoUnixI/O.
Estanoosimpleseelegantedeumarquivonodeixadesermuitopoderoso,porque
eleforneceaplicaescomumavisouniformedetodososdispositivosdeE/Svariadosque
podesercontidonosistema.Porexemplo,osprogramadoresdeaplicativosque
manipularocontedodeumarquivoemdiscosoalegrementeinconscientesdodiscoespecfico
tecnologia.Almdisso,omesmoprogramaserexecutadoemsistemasdiferentesqueusam
diferentestecnologiasdedisco.VocvaiaprendersobreUnixI/Onocaptulo10.

AlmOprojetoLinux
Emagostode1991,umestudantedepsgraduaochamadoLinusTorvaldsmodestamenteanunciouumnovoUnixlike
kerneldosistemaoperacional:

De:torvalds@klaava.Helsinki.FI(LinusBenedictTorvalds)
Gruposdenotcias:comp.os.minix
Assunto:Oquevocgostariadevermaisnominix?
Resumo:pequenapesquisaparaomeunovosistemaoperacional
Data:25deagosto9120:57:08GMT
https://translate.googleusercontent.com/translate_f#202 40/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Olatodoslfora,usandominix
Euestoufazendoumsistemaoperacional(livre)(apenasumhobby,nosergrandee
profissionalcomoognu)para386(486)ATclones.Istotemsidofabricaodecerveja
desdeabril,eestcomeandoaficarpronto.Eugostariaalgumcomentriosobre
coisasqueaspessoascomo/nogostamnominix,comomeuOSassemelhaseumpouco
(Mesmolayoutfsicodosistemadearquivos(devidoarazesprticas)
entreoutrascoisas).

Euatualmenteportadobash(1.08)egcc(1,40),eascoisasparecemfuncionar.
Istoimplicaqueeuvouconseguiralgumacoisaprticadentrodealgunsmeses,e
Eugostariadesaberoquecaracterizaamaioriadaspessoasgostaria.Algumasugesto
sobemvindos,masnovouprometerquevouimplementlos:)

Linus(torvalds@kruuna.helsinki.fi)

Pgina55

20 Captulo1ATourofComputerSystems

Oresto,comodizem,histria.Linuxtemevoludoparaumfenmenotcnicoecultural.De
combinandoforascomoprojetoGNU,oprojetoLinuxdesenvolveuumcompleto,compatvelcomPOSIX
versodoUnixsistemaoperacional,incluindookerneletodaainfraestruturadeapoio.
Linuxestdisponvelemumagrandevariedadedecomputadores,apartirdedispositivosportteisparacomputadoresmainframe.UMA
gruponaIBMtemaindaportadooLinuxaumrelgiodepulso!

1.8Sistemasdecomunicarcomoutrossistemas
usandoNetworks
Atestepontononossotourdesistemas,temostratadoumsistemacomoumisolado
coleodehardwareesoftware.Naprtica,ossistemasmodernossomuitasvezesligados
paraoutrossistemasderedes.Dopontodevistadeumsistemaindividual,o
redepodeservistacomoapenasumoutrodispositivodeI/O,comomostradonaFigura1.14.Quando
osistemacopiaumaseqnciadebytesdememriaprincipalparaoadaptadorderede,
osfluxosdedadosatravsdaredeparaumaoutramquina,emvezde,digamos,paraumlocalde
unidadededisco.Domesmomodo,osistemapodelerdadosenviadosapartirdeoutrasmquinasecpia
essesdadosparaamemriaprincipal.
ComoadventodasredesglobaiscomoaInternet,asinformaescopiando
apartirdeumamquinaparaoutratornouseumdosusosmaisimportantesde
sistemasdecomputador.Porexemplo,aplicativoscomoemail,mensagensinstantneas,o
WorldWideWeb,FTPetelnetsotodosbaseadosnacapacidadedecopiarinformaes
atravsdeumarede.
VoltandoaonossoexemploOl,poderamosusaroaplicativotelnetfamiliarizado
paraexecutarOlemumamquinaremota.Suponhaquensusamosumtelnetclienteexecutandoemnosso

Figura1.14 chipdeCPU
UmaredeumoutroI/O Registrearquivo
dispositivo.
PC ALU
busdesistema
barramentodememria

I/O aPrincipal
interfacedebarramento ponte memria
Slotsdeexpanso

I/Onibus

USB Grficos Disco Rede


controlador adaptador controlador adaptador

mouseTeclado Monitor
Rede
Disco

https://translate.googleusercontent.com/translate_f#202 41/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina56

Seo1.9TemasImportantes 21

tipos1.User 2.Oclienteenvia"Ol"
"Ol"no stringparaservidorTelnet 3.Oservidorenvia"Ol"
teclado Local stringparaoshell,que
Controloremoto
telnet telnet executaoprogramaOl
cliente servidor epassaasada
4.servidorTelnetenvia paraoservidorTelnet
5.cpiasdecliente "Ol,mundo\n"string
"Ol,mundo\n" paraocliente
cadeiaemexposio
Figura1.15UsandotelnetparaexecutarOlremotamenteatravsdeumarede.

mquinalocalparaseconectaraumtelnetservidoremumamquinaremota.Depoisquelogin
paraamquinaremotaeexecutarumshell,oshellremotoestesperandoparareceberum
comandodeentrada.Apartirdesteponto,aexecuodoprogramaOlenvolveremotamente
ascincoetapasbsicasmostradasnaFigura1.15.
Depoisquedigiteo"Ol"stringparaoclientetelnetepressioneateclaEnter,
oclienteenviaacadeiaparaoservidortelnet.Depoisqueoservidortelnetrecebeo
cadeiadarede,elepassalojuntocomoprogramadeshellremoto.Emseguida,o
shellremotoexecutaoprogramaOl,epassaalinhadesadadevoltaparaotelnet
servidor.Finalmente,oservidorTelnetencaminhaacadeiadesadaatravsdaredepara
oclientetelnet,queimprimeacadeiadesadaemnossoterminallocal.
Estetipodeintercmbioentreclienteseservidorestpicodetodaarede
Aplicaes.NoCaptulo11,vocvaiaprenderaconstruiraplicaesderede,e
aplicaresseconhecimentoparaconstruirumservidorWebsimples.

1.9TemasImportantes

Issoconcluinossatourrelmpagoinicialdesistemas.Umaideiaimportantetomar
distnciaapartirdestadiscussoumsistemaquemaisdoqueapenasohardware.um
coleodehardwareesoftwaredesistemasentrelaadosquedevemcooperarna
afimdealcanaroobjetivofinaldaexecuodeprogramasdeaplicao.Orestode
estelivroirpreencheralgunsdetalhessobreohardwareeosoftware,evai
mostramcomo,porsaberessesdetalhes,vocpodeescreverprogramasquesomaisrpidos,mais
confivelemaisseguro.
Parafecharestecaptulo,destacamosvriosconceitosimportantesquecortam
emtodososaspectosdesistemasdecomputador.Vamosdiscutiraimportnciadestes
conceitosemvrioslugaresdentrodolivro.

1.9.1ConcorrnciaeParalelismo
Aolongodahistriadoscomputadoresdigitais,duasexignciastmsidoconstantes
forasmelhoriasconduo:queremosqueelesfaammais,ensqueremosqueeles
corrermaisrpido.Ambosessesfatoresmelhoramquandooprocessadorfazmaiscoisasao
umavez.Usamosotermosimultaneidadeparareferiroconceitogeraldeumsistemacom
vriasactividadessimultneas,eotermoparalelismoparasereferirutilizaode
simultaneidadeparafazerumsistemafuncionarmaisrapidamente.Oparalelismopodeserexploradaemmltiplos

Pgina57

22 Captulo1ATourofComputerSystems

nveisdeabstraoemumsistemadecomputador.Destacamostrsnveisaqui,trabalhando
domaisaltoaomaisbaixonvelnahierarquiadosistema.

NonveldethreadConcorrncia
Combasenaabstraoprocesso,somoscapazesdeconcebersistemasondemltipla
https://translate.googleusercontent.com/translate_f#202 42/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
executarprogramasaomesmotempo,levandoasimultaneidade.Comtpicos,ns
podeattermltiplosfluxosdecontroleemexecuoemumnicoprocesso.Apoio,suporte
paraexecuoconcorrentefoiencontradoemsistemasdecomputadordesdeoadvento
detempodepartilhanoinciode1960.Tradicionalmente,essaexecuoconcorrenteera
nicasimulado,porterumnicocomputadorcomutarrapidamenteentreasuaexecuo
processos,tantocomoummalabaristamantmvriasbolasvoandopeloar.Essaforma
desimultaneidadepermitequemltiplosusuriosparainteragircomumsistema,aomesmotempo,
porexemplo,quandomuitaspessoasqueremobterpginasdeumnicoservidorWeb.Issotambm
permitequeumnicousurioparaenvolverseemmltiplastarefassimultaneamente,comoterum
navegadordaWebemumajanela,umprocessadordetextoemoutra,estreamingdemsica
tocandoaomesmotempo.Atrecentemente,amaioriacomputaorealfoifeitoporum
processadornico,mesmoqueoprocessadortevedealternarentreasvriastarefas.este
configuraoconhecidacomoumsistemadeprocessadornico.
Quandonsconstrumosumsistemaqueconsistedemltiplosprocessadorestodossoba
controledeumnicokerneldosistemaoperacional,temosumsistemamultiprocessador.
Taissistemasjestodisponveisparaacomputaoemlargaescaladesdeadcadade1980,mas
elestmmaisrecentementesetornadocomumcomoadventodomulticore
processadoresehyperthreading.AFigura1.16mostraumataxonomiadestesdiferentes
tiposdeprocessadores.
processadoresmulticoretemvriasCPUs(referidascomo"ncleos")integrados
emumchipdecircuitointegradonico.AFigura1.17ilustraaorganizaodeum
ProcessadorIntelCorei7,ondeochipmicroprocessadortemquatroncleosdeCPU,cada
comasuaprpriaL1eL2caches,masquepartilhamosnveismaiselevadosdecachedebemcomoo
interfaceparaamemriaprincipal.Osespecialistasprevemqueelesserocapazesdeter
dezenase,finalmente,centenas,dencleosemumnicochip.
Hyperthreading,svezeschamadodemultiprocessamentosimultneo,umlogia
niquequepermitequeumnicoprocessadorparaexecutarmltiplosfluxosdecontrolo.Envolve
termltiplascpiasdealgunscomponentesdehardwaredaCPU,taiscomocontadoresdeprogramas
eregistrararquivos,apesardeteremapenascpiasnicasdeoutraspartesdohardware,
taiscomoasunidadesqueexecutamaritmticadepontoflutuante.Considerandoqueumconvencional

Figura1.16 Todososprocessadores
categorizaodiferente
configuraesdeprocessador. multiprocessadores
multiprocessadoresso
tornandoseprevalentecom
oadventodemulti uniprocessadores multi Hyper
testemunho
roscado
processadoresdencleoe
hyperthreading.

Pgina58

Seo1.9TemasImportantes 23

Figura1.17 encapsulamentodoprocessador
IntelCorei7organizao. ncleo0 core3
Quatroncleosdeprocessadorso
integradasnumanica
lasca. regs regs

L1 L1 ... L1 L1
dcache icache dcache icache

L2cacheunificada L2cacheunificada

L3cacheunificada
(Compartilhadaportodososncleos)

Memriaprincipal

processadorrequercercade20.000ciclosderelgioparaalternarentrediferentesthreads,
umprocessadordehiperdecidequaisosseussegmentosparaexecutaremumcycle
porciclobase.ElepermitequeaCPUparafazeromelhorpartidodoseutratamento
Recursos.Porexemplo,seumsegmentotemdeesperarporalgunsdadosasercarregadona

https://translate.googleusercontent.com/translate_f#202 43/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
umcache,aCPUpodeprosseguircomaexecuodeumsegmentodiferente.Comoumex
ampla,oprocessadorIntelCorei7podetercadancleoexecutarduasthreads,e
Assim,umsistemadequatroncleospoderealmenteexecutaroitothreadsemparalelo.
Ousodemultiprocessamentopodemelhorarodesempenhodosistemadeduasmaneiras.
Emprimeirolugar,reduzseanecessidadeparasimularsimultaneidadeaoexecutartarefasmltiplas.
Comomencionado,mesmoumcomputadorpessoalaserutilizadoporumanicapessoadever
pararealizarmuitasatividadesaomesmotempo.Emsegundolugar,elepodeexecutarumanicaaplicao
programamaisrpido,masapenasseoreferidoprogramaexpressaemtermosdevriossegmentos
quepodemefetivamenteexecutaremparalelo.Assim,emboraosprincpiosdaconcomitan
rencyforamformuladoseestudadoshmaisde50anos,oadventodomulticore
esistemashyperthreadedaumentousignificativamenteodesejodeencontrarmaneirasdeescrever
programasaplicativosquepodemexploraroparalelismononveldethreaddisponvelcom
ohardware.Captulo12vaiolharmuitomaisprofundamenteemsimultaneidadeesua
usarparafornecerumapartilhaderecursosdeprocessamentoepermitirmaiorparalelismo
naexecuodoprograma.

NveldeinstruoParalelismo
Emumnvelmuitomaisbaixodeabstrao,osprocessadoresmodernospodemexecutarmltiplos
instruesdeumasvez,umapropriedadeconhecidacomoparalelismononveldeinstruo.Para

Pgina59

24 Captulo1ATourofComputerSystems

exemplo,microprocessadoresincio,comoo1978vintageIntel8086exigida
mltiplas(tipicamente,310)ciclosderelgioparaexecutarumanicainstruo.Maisrecente
processadorespodemsustentartaxasdeexecuode24instruesporciclodeclock.Qualquer
dadainstruorequermuitomaistempodoincioaofim,talvez20ciclosou
mais,masoprocessadorutilizaumasriedetruquesinteligentesparaprocessarat100
instruesdecadavez.NoCaptulo4,vamosexplorarousodepipelining,ondeo
aesnecessriasparaexecutarumainstruoestdivididaemdiferentesetapase
ohardwaredoprocessadorestorganizadocomoumasriedeetapas,cadaumaexecutando
umadessasetapas.Asfasespodemoperaremparalelo,funcionandoemdiferentespartesdo
instruesdiferentes.Vamosverqueumprojetodehardwarebastantesimplespodesustentar
umataxadeexecuopertodeumainstruoporciclodeclock.
Processadoresquepodemsustentartaxasdeexecuomaisrpidodoqueumainstruopor
ciclosoconhecidoscomosuperescalaresprocessadores.Amaioriadosprocessadoresmodernossuportamsuper
operaoescalar.Nocaptulo5,vamosdescreverummodelodealtonveldessatransformao
SorsVeremosqueosprogramadoresdeaplicativospodemusarestemodeloparaentender
odesempenhodeseusprogramas.Elespodem,emseguida,escreverprogramasdetalformaqueos
cdigogeradoatingegrausmaisaltosdeparalelismononveldeinstruoel
forecorremaisrpido.

SingleInstruo,MultipleData(SIMD)Paralelismo
Nonvelmaisbaixo,muitosprocessadoresmodernospossuemhardwareespecialquepermite
umanicainstruoparacausarvriasoperaesaseremexecutadasemparalelo,
ummodoconhecidocomoinstruonica,demltiplosdados,ouparalelismo"SIMD".Para
exemplo,asrecentesgeraesdeprocessadoresInteleAMDtminstruesque
podeadicionarquatroparesdenmerosdepontoflutuantedeprecisonica(Ctipodedadosfloat)
emparalelo.
EstasinstruesSIMDsofornecidosprincipalmenteparaacelerarasaplicaesque
dadosdeimagem,somevdeodeprocesso.Emboraalgunscompiladorestentarauto
maticamenteextrairSIMDparalelismodeprogramasemC,ummtodomaisconfivel
escreverprogramasusandoespecialvetortiposdedadossuportadosemcompiladores,comogcc.
NsdescreveresteestilodeprogramaonaWebAlmopt:SIMD,comoumsuplementopara
aapresentaomaisgeralsobreaotimizaodoprogramaencontradosnoCaptulo5.

1.9.2AimportnciadeabstraesemSistemasdeComputao
Ousodeabstraesumdosconceitosmaisimportantesnacinciadacomputao.
Porexemplo,umaspectodeboaprticadeprogramaoformularumsimples
Programadeaplicaodeinterface(API)paraumconjuntodefunesquepermitemaosprogramadores
parausarocdigosemterquemergulharemseufuncionamentointerno.programaodiferente
lnguasmingfornecerdiferentesformasenveisdesuportedecaptao,tais
comodeclaraesdeclasseJavaeprottiposdefunoC.
Nsjforamapresentadosavriasdasabstraesvistoemcom
sistemasinformticos,comoindicadonaFigura1.18.Noladodoprocessador,oconjuntodeinstrues
arquiteturaforneceumaabstraodohardwarerealdoprocessador.Comisso
abstrao,umprogramadecdigodemquinasecomportacomosefosseexecutadoemumtrata

https://translate.googleusercontent.com/translate_f#202 44/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina60

Seo1.10Resumo 25

Figura1.18 Mquinavirtual
Algunsabstraespro
DESDEporumcomputador Processos
sistema.Umdosprincipaistemas
emsistemasdecomputadoresa Conjuntodeinstrues
fornecerrepresentaoabstracta arquitetura Memriavirtual
taesemdiferentesnveispara
esconderacomplexidadedo arquivos
implementaesreais.
SistemaoperacionalProcessador MemriaprincipaldispositivosdeI/O

sorquerealizaapenasumainstruodecadavez.Ohardwaresubjacenteestlonge
maiselaborada,aexecuodemltiplasinstruesemparalelo,massempredeumamaneira
queconsistentecomomodelosimples,sequencial.Aomanteromesmoexecu
modeloo,diferentesimplementaesdeprocessadorpodeexecutaramesmamquina
cdigo,oferecendoumagamadecustoedesempenho.
Noladodosistemaoperacional,introduzimostrsabstraes:arquivoscomo
umaabstraodeI/O,memriavirtualcomoumaabstraodememriadeprograma,e
processacomoumaabstraodeumprogramaemexecuo.Paraessasabstraesacrescentamos
umnovo:amquinavirtual,proporcionandoumaabstraodetodoocomputador,
incluindoosistemaoperacional,oprocessador,eosprogramas.Aidiadeuma
mquinavirtualfoiintroduzidopelaIBMnadcadade1960,mastornousemais
destaquerecentementecomoumaformadegerenciarcomputadoresquedevemsercapazesdeexecutar
programasconcebidosparavriossistemasoperacionais(comooMicrosoftWindows,
MacOSeLinux)oudiferentesversesdomesmosistemaoperacional.
Nsvamosvoltarparaessasabstraesemseesposterioresdolivro.

1.10Resumo

Umsistemadecomputadorcompostoporhardwareesoftwaredesistemasquecooperam
paraexecutarprogramasaplicativos.Ainformaodentrodocomputadorcomorepresentado
gruposdebitsquesointerpretadosdediferentesmaneiras,dependendodocontexto.
Osprogramassotraduzidosporoutrosprogramasemdiferentesformas,comeandocomo
textoASCIIe,emseguida,traduzidoporcompiladoreselinkersembinrioexecutvel
arquivos.
Processadoresdelereinterpretarinstruesbinriasqueestoarmazenadosnoprincipal
memria.Desdequeoscomputadorespassamamaiorpartedesuascopiardadosdetempoentreamemria,
DispositivosI/O,eosregistrosdeCPU,osdispositivosdearmazenamentoemumsistemaestodispostas
emumahierarquia,comosregistosdaCPUnotopo,seguidodevriosnveis
dememriasdehardwaredecache,memriaprincipalDRAM,earmazenamentoemdisco.Armazenamento
dispositivosquesomaiselevadosnahierarquiasomaisrpidosemaiscarodoqueporbit
aquelesinferiornahierarquia.Osdispositivosdearmazenamentoquesomaiselevadosnahierarquiaservem
comocachesparadispositivosquesomaisbaixosnahierarquia.Osprogramadorespodemotimizar
odesempenhodeseusprogramasemCporentendereexploraramemria
hierarquia.

Pgina61

26 Captulo1ATourofComputerSystems

Okerneldosistemaoperacionalservecomointermedirioentreaaplicao
oeohardware.Elefornecetrsabstraesfundamentais:(1)Osarquivosso
abstraesparadispositivosdeE/S.(2)Amemriavirtualumaabstraoparaambosprincipal
https://translate.googleusercontent.com/translate_f#202 45/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
memriaediscos.(3)Osprocessossoabstraesparaoprocessador,memriaprincipal,
edispositivosI/O.
Finalmente,asredesoferecemmaneirasparasistemasdecomputadorparasecomunicarcom
umoutro.Dopontodevistadeumsistemaparticular,aredeapenasmaisum
IdispositivodeE/S.

Notasbibliogrficas
RitchietemescritointeressantesrelatosdeprimeiramodosprimeirosdiasdeCe
Unix[87,88].RitchieeThompsonapresentouoprimeirorelatopublicado
deUnix[89].Silberschatz,Gavin,eGagne[98]fornecerumaabrangente
histriadosdiferentessaboresdeUnix.OGNU(www.gnu.org)eLinux
(Www.linux.org)pginasdaWebtemummontedeinformaesatuaisehistricas.
OspadresPOSIXestodisponveisonlineem(www.unix.org).

Pgina62

ParteI

Estruturadoprograma

eExecuo

Ourexploraodesistemasdecomputadorcomeaporestudarocom
PUTERemsi,quecompreendeumprocessadoreumsubsistemadememria.Em
oncleo,queexigemformasderepresentartiposdedadosbsicos,taiscomo
aproximaesparainteiroearitmticareal.Apartirda,podemoscon
sidercomoasinstruesdenveldemquinamanipulardadosecomoumcom
pilertraduzprogramasemCparaestasinstrues.Emseguida,estudamosvrios
mtodosdeimplementaodeumprocessadorparaobterumamelhorcompreensodo
comoosrecursosdehardwaresousadosparaexecutarinstrues.Umavezqueacompreendemos
ficarcompiladoresecdigodenveldemquina,podemosexaminarcomomaxi
https://translate.googleusercontent.com/translate_f#202 46/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
odesempenhodoprogramaMizeporescreverprogramasemCque,quandocompilado,
obterodesempenhomximopossvel.Conclumoscomade
sinaldosubsistemadememria,umdoscomponentesmaiscomplexosda
umsistemadecomputadormoderno.
Estapartedolivrovailhedarumacompreensoprofundadecomo
programasdeaplicaosorepresentadoseexecutado.Vocvaiganharhabilidades
queajudloaescreverprogramasquesoseguros,confiveisefazeromelhor
utilizaodosrecursosdecomputao.

27

Pgina63

Estapginafoiintencionalmentedeixadaembranco

https://translate.googleusercontent.com/translate_f#202 47/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina64

CAPTULO

RepresentaoeManipulao

Emformao

2.1 ArmazenamentodeInformao33
2.2 InteirosRepresentaes56
2,3 IntegerAritmtica79
2,4 FloatingPoint99
2,5 resumo118
BibliogrficasNotas119
HomeworkProblemas119
SoluodosProblemas134

29

pgina65

30 Captulo2RepresentaoeManipulaodeInformao

https://translate.googleusercontent.com/translate_f#202 48/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
informaesModerncomputadoresarmazenareprocessarrepresentadacomosinaisde2valorizados.
Estesdgitosbinrioshumildes,oupedaos,formamabasedarevoluodigital.o
decimalfamiliarizados,oubase10,arepresentaotemsidousadopormaisde1000anos,
tendosidodesenvolvidonandia,melhoroupormatemticosrabesnodia12
sculo,etrouxeparaoOcidentenosculo13pelomatemticoitaliano
LeonardoPisano(c1170..C1250),maisconhecidocomoFibonacci.usandodecimal
notaonaturalparaossereshumanosdedezdedos,masvaloresbinriosfuncionammelhorquando
mquinasdeconstruoquearmazenameprocessaminformaes.Doisvalorizadossinaispodem
facilmenteserrepresentado,armazenadosetransmitidos,porexemplo,comoapresenaou
ausnciadeumfuronumaplacaperfurada,talcomoumavoltagemdealtaoubaixadeumfio,oucomoum
domniomagnticoorientadonosentidohorrioouantihorrio.Ocircuitoeletrnico
paraarmazenareexecutarclculosem2valorizadossinaismuitosimplese
fiveis,osfabricantesquepermitemintegrarmilhes,ouatbilhes,detal
circuitosemumnicochipdesilcio.
Noisolamento,umnicobitnomuitotil.Quandoosbitsemconjuntoegrupo
apliqueumpoucodeinterpretaoquedsentidoaosdiferentespadresdebitspossveis,
noentanto,podemosrepresentaroselementosdequalquerconjuntofinito.Porexemplo,usandoum
sistemanumricobinrio,podemosusargruposdebitsparacodificarosnmerosnonegativos.
Aousarumcdigodecaracterespadro,quepodecodificarasletrasesmbolosemum
documento.Nscobrirambosestescodificaesnestecaptulo,bemcomocodificaes
pararepresentarnmerosnegativoseaproximarnmerosreais.
Nsconsideramosastrsrepresentaesmaisimportantesdenmeros.noassinado
codificaessobaseadosemnotaobinriatradicional,representandonmerosmaiores
queouiguala0.complementodedoiscodificaessoaformamaiscomumde
representamassinadosinteiros,isto,osnmerosquepodeserpositivoouneg
Ative.Depontoflutuantecodificaessoumaversobasedoisdenotaocientficapara
representandonmerosreais.Computadoresimplementaroperaesaritmticas,como
adioemultiplicao,comestasrepresentaesdiferentes,semelhanteao
operaesemnmerosinteirosereaiscorrespondentes.
asrepresentaesdecomputadorutilizarumnmerolimitadodebitsparacodificarumnmero,
e,portanto,algumasoperaespodetransbordarquandoosresultadossomuitograndeparaserrepresen
ressentido.Istopodelevaraalgunsresultadossurpreendentes.Porexemplo,namaiorpartedodiade
computadores(aquelesqueusamumarepresentaodotipodedadosint32bit),computandoo
expresso
300*200*400*500
produz884901888.Istocontrariaaspropriedadesdearithmeticinteiro
calcularoprodutodeumconjuntodenmerospositivosproduziuumresultadonegativo.
Poroutrolado,computadorinteiroaritmticasatisfazmuitosdosfamiliarizados
Propriedadesdaverdadeiraaritmticainteira.Porexemplo,amultiplicaoassociativa
econmutativo,demodoqueacomputaoqualquerdasexpressesseguintesrendimentosC
884901888:

(500*400)*(300*200)
((500*400)*300)*200
((200*500)*300)*400
400 *(200*(300*500))

Pgina66

31
Captulo2RepresentaoeManipulaodeInformao

Ocomputadorpodenogeraroresultadoesperado,maspelomenoscoerente!
Aritmticadepontoflutuantetemcompletamentediferentespropriedadesmatemticas.
Oprodutodeumconjuntodenmerospositivossersemprepositiva,emborasobre
fluirirproduzirovalorespecial+.Aritmticadepontoflutuantenoassociativa,
devidoprecisofinitadarepresentao.Porexemplo,aexpressoC
(3,14+1e20)1e20iravaliara0.0namaioriadasmquinas,enquanto3.14+(1e20
1e20)avaliara3.14.Asdiferentespropriedadesmatemticasdeinteiro
vs.depontoflutuantehastearitmticadadiferenadecomoeleslidamcomofinito
nessdesuasrepresentaesrepresentaesinteirospodecodificarumcomparativamente
pequenagamadevalores,masfazlocompreciso,enquantoasrepresentaesdepontoflutuantepode
codificarumaamplagamadevalores,masapenasaproximadamente.
Aoestudarasrepresentaesdenmerosreais,podemosentenderosintervalos
devaloresquepodemserrepresentadoseaspropriedadesdodiferentearitmtica
operaes.Essacompreensofundamentalparaescreverprogramasquefuncionamcorretamente
emtodaagamadevaloresnumricosequesoportveisentrecombinaodiferente
naesdamquina,sistemaoperacionalecompilador.Comoiremosdescrever,umnmero
decomputadorvulnerabilidadesdeseguranatmsurgidodevidoaalgumasdassutilezas
aritmticadocomputador.Considerandoque,emumanteriorerrosdoprogramaerasseriaincon
veniencepessoasquandopassouaseracionado,agorahlegiesde
hackersquetentamexplorarqualquerbugquepodeencontrarparaobteracessonoautorizado
aossistemasdeoutraspessoas.Issocolocaummaiornveldeobrigaodeprogramadores
https://translate.googleusercontent.com/translate_f#202 49/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
paraentendercomoseusprogramasfuncionamecomoelespodemserfeitosparasecomportarde
formasindesejveis.
Oscomputadoresusamvriasrepresentaesbinriasdiferentesparacodificarnumrico
Valores.Vocprecisarestarfamiliarizadocomestasrepresentaesmedidaqueavana
naprogramaodenveldemquinanoCaptulo3.Nsdescrevemosessascodificaesem
estecaptuloemostrarlhecomoraciocinarsobrerepresentaesnumricas.
Obtivemosvriasmaneirasderealizaroperaesaritmticaspordiretamentemanip
ulatingasrepresentaesdenveldebitdenmeros.Entenderessastcnicas
serimportanteparaacompreensodocdigodenveldemquinageradaporcompiladores
ersemsuatentativadeotimizarodesempenhodeexpressoaritmticaava
Vao.
Nossotratamentodestematerialbaseadaemumconjuntodeprinmatemtica
cpios.Comeamoscomasdefiniesbsicasdascodificaesedepoisderivartais
propriedadescomoointervalodenmerosrepresentveis,suasrepresentaesemnveldebit,
easpropriedadesdasoperaesaritmticas.Nsacreditamosqueimportanteparavoc
paraexaminaromaterialapartirdestepontodevistaabstrato,porqueosprogramadoresprecisam
terumacompreensoclaradecomocomputadoraritmticadizrespeitomais
integerfamiliarearitmticareal.

AlmComolerestecaptulo
Sevocencontrarequaesefrmulasassustadores,nodeixequevocparardetiraromximopartidodeste
captulo!Nsfornecemosderivaescheiadeidiasmatemticasdecompletude,masamelhormaneiradeler
estematerialmuitasvezesasaltarsobreaderivaoemsualeiturainicial.Emvezdisso,estudarosexemplos

Pgina67

32 Captulo2RepresentaoeManipulaodeInformao

fornecido,ecertifiquesedetrabalhartodososproblemasprticos.Osexemploslhedarumaintuio
portrsdasidias,eosproblemasdeprticaacopllonaaprendizagemactiva,ajudandovocacolocarpensamentos
emao.Comestescomopanodefundo,vocvaiencontrlomuitomaisfcilparavoltareseguirasderivaes.
Tenhaacerteza,tambm,queashabilidadesmatemticasnecessriasparaentenderestematerialestodentrodoalcance
dealgumcomboacompreensodalgebradoensinomdio.

AlinguagemC++construdoemcimaC,usandoexatamenteamesmanumrica
representaeseoperaes.TudoditonestecaptulosobreCtambmdetm
paraC++.AdefiniodelinguagemJava,poroutrolado,criadoumnovoconjuntode
normaspararepresentaeseoperaesnumricas.ConsiderandoqueospadresC
destinamseapermitirqueumaamplagamadeimplementaes,opadroJavabastante
especficassobreosformatosecodificaesdedados.Destacamseasrepresentaes
easoperaesapoiadaspeloJavaemvrioslugaresdocaptulo.

AlmAevoluodalinguagemdeprogramaoC
ComofoidescritoemumapartenaSeo1.2,alinguagemdeprogramaoCfoidesenvolvidopelaprimeiravezporDennis
Ritchie,dosLaboratriosBellparausocomosistemaoperacionalUnix(tambmdesenvolvidonosBellLabs).Em
otempo,amaioriadosprogramasdosistema,taiscomosistemasoperacionais,tinhadeserescritoemgrandepartenocdigodemontagem,
afimdeteracessosrepresentaesdebaixonveldediferentestiposdedados.Porexemplo,foi
novivelparaescreverumaatribuiodememria,talcomofornecidopelafunodebibliotecamalloc,noutros
linguagensdealtonveldapoca.
AversooriginaldaBellLabsCfoidocumentadonaprimeiraediodolivrodeBrian
KernighaneDennisRitchie[57].Comotempo,Cevoluiuatravsdosesforosdevriospadro
gruposizao.AprimeiragranderevisodooriginaldeBellLabsClevouaopadroANSICem1989,
porumgrupodetrabalhosobosauspciosdaAmericanNationalStandardsInstitute.ANSICfoium
importantepontodepartidadeBellLabsC,especialmentenaformacomoasfunessodeclaradas.ANSICdescrita
nasegundaediodolivrodeKernighaneRitchie[58],oqueaindaconsideradoumdosmelhores
refernciassobreC.
AInternationalStandardsOrganizationassumiuaresponsabilidadepelapadronizaodolanC
calibre,queadoptaumaversoquefoisubstancialmenteomesmoqueANSICem1990e,portanto,referidocomo
"ISOC90."Essamesmaorganizaopatrocinadaumaatualizaodalinguagemem1999,produzindo"ISOC99."
Entreoutrascoisas,estaversointroduziualgunsnovostiposdedadoseforneceusuporteparacadeiasdetexto
caracteresquerequeremnoencontradonoidiomaIngls.
OGNUCompilerCollection(GCC)podecompilarprogramasdeacordocomasconvenesdevrios
diferentesversesdalinguagemC,combaseemdiferentesopesdelinhadecomando,comomostradonaFigura2.1.
Porexemplo,paracompilarprogramaprog.cdeacordocomaISOC99,quepoderiadaralinhadecomando

unix>gccstd=c99prog.c

https://translate.googleusercontent.com/translate_f#202 50/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
AsopesANSIestd=C89tmoefeitodeomesmocdigocompiladodeacordocomaANSI
ounormaISOC90.(C90porvezesreferidocomo"C89",desdeoseuesforodepadronizaocomeouem
1989.)Aopostd=c99fazcomqueocompiladorparaseguiraconvenoISOC99.

Pgina68

33
Seco2.1ArmazenamentodeInformao

versoC opodelinhadecomandogcc
GNU89 nenhum,std=gnu89
ANSI,ISOC90 ANSI,std=c89
ISOC99 std=c99
GNU99 std=gnu99
Figura2.1EspecificandoversesdiferentesdeCparagcc.

Desdeaescritadestelivro,quandonenhumaopoforespecificada,oprogramasercompiladodeacordo
paraumaversodoCbaseadoemISOC90,masincluindoalgumascaractersticasdoC99,algunsdosC++,eoutros
especficoparagcc.Estaversopodeserespecificadaexplicitamenteusandoaopostd=gnu89.OprojetoGNU
estdesenvolvendoumaversoquecombinaISOC99,almdeoutrascaractersticas,quepodeserespecificadocomocomando
opodelinhadestd=gnu99.(Atualmente,essaimplementaoestincompleta.)Issovaisetornaropadro
verso.

2.1ArmazenamentodeInformao

Emvezdeacessarbitsindividuaisnamemria,amaioriadoscomputadoresusamblocos
deoitobitsoubytes,comoamenorunidadedememriaenderevel.Umamquina
programadenvelvistasdememriacomoumamuitograndevariedadedebytes,designadoporVirtual
memria.Cadabytedememriaidentificadoporumnmeronico,conhecidocomooseu
endereo,eoconjuntodetodasaspossveisendereosconhecidacomooespaodeendereovirtual.
Comooprprionomeindica,esteespaodeendereovirtualapenasumaimagemconceptual
apresentadaaoProgramadenveldemquina.Aimplementaoreal(apresentada
nocaptulo9)usaumacombinaodememriadeacessoaleatrio(RAM),armazenamentoemdisco,
hardwareespecial,esoftwaredesistemaoperacionalparaforneceroprogramacomoque
pareceserumarraydebytesmonoltico.
Noscaptulosseguintes,vamosabordarcomoocompiladoretempodeexecuodosistema
partiesesteespaodememriaemunidadesmaisgerenciveisparaarmazenarodiferente
objetosdeprograma,isto,dadosdoprograma,instrueseinformaesdecontrole.
Vriosmecanismossoutilizadosparaalocaregerenciaroarmazenamentoparadiferentes
partesdoprograma.Estagestotudorealizadodentrodoendereovirtual
espao.Porexemplo,ovalordeumponteiroemCsequeapontaparaumnmerointeiro,
umaestrutura,oualgumoutroprogramaobjectooendereovirtualdoprimeirobyte
dealgumblocodearmazenamento.OcompiladorCtambmassociadigitarinformaescom
cadaponteiro,paraqueelepossagerarocdigodenveldemquinadiferenteparaacessaro
valorarmazenadonolocaldesignadopeloapontador,dependendodotipode
essevalor.EmboraocompiladorCmantmestasinformaesdetipo,oreal
programadenveldemquinaquegeranotemnenhumainformaosobretiposdedados.simplesmente
tratacadaobjetodoprogramacomoumblocodebytes,eoprprioprogramacomoumaseqncia
debytes.

Pgina69

https://translate.googleusercontent.com/translate_f#202 51/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

34 Captulo2RepresentaoeManipulaodeInformao

NovoparaC?OpapeldeponteirosemC
OsponteirossoumacaractersticacentraldaC.Elesfornecemomecanismoparafazerrefernciaaelementosdedados
estruturas,incluindomatrizes.Assimcomoumavarivel,umponteirotemdoisaspectos:oseuvaloreseutipo.o
valorindicaalocalizaodeumobjeto,enquantooseutipoindicaotipodeobjeto(porexemplo,inteiroou
nmerodepontoflutuante)armazenadonolocal.

2.1.1HexadecimalNotation
Umnicobyteconstitudopor8bits.Emnotaobinria,seuvalorvariade000000002
para111111112 .Quandovistocomouminteirodecimal,seuvalorvariade0a10 para25510 .
Nemnotaomuitoconvenienteparadescreverpadresdebits.notaobinria
muitodetalhado,aopassoquecomanotaodecimal,tediosoparaconverterdeepara
padresdebits.Emvezdisso,nsescrevemospadresdebitscomobase16,ouhexadecimalnmeros.
Hexadecimal(ousimplesmente"hex")usadgitos'0'a'9',juntamentecomcaracteres
'A'a'F'pararepresentar16valorespossveis.AFigura2.2mostraodecimale
valoresbinriosassociadoscomos16dgitoshexadecimais.Escritoemhexadecimal,
ovalordeumbytenicopodevariarde0016 aFF16 .
EmC,constantesnumricascomeandocom0xou0Xsointerpretadoscomoestandoem
hexadecimal.Oscaracteres'A'a'F'podemserescritosemqualquersuperiorou
letrasminsculas.Porexemplo,poderamosescreveronmeroFA1D37B16 como0xFA1D37B,
como0xfa1d37b,oumesmomisturandoletrasmaisculaseminsculas,porexemplo,0xFa1D37b.Nsvamosusar
anotaoCpararepresentarvaloreshexadecimaisnestelivro.
Umatarefacomumemtrabalharcomprogramasdenveldemquinaconmanualmente
vertentredecimal,binrio,erepresentaeshexadecimaisdepadresdebits.
Conversoentrebinrioehexadecimalsimples,umavezquepodeser
realizadaumadgitoshexadecimaisdecadavez.Dgitospodemserconvertidosporreferindo
aumgrficotalcomoaquelemostradonaFigura2.2.Umtruquesimplesparafazeraconverso
SionemsuacabeamemorizarosequivalentesdecimaisdosdgitoshexadecimaisA,CeF.
OvaloreshexadecimaisB,D,eEpodesertraduzidoparadecimal,calculandooseuvalor
emrelaoprimeiradetrs.
Porexemplo,suponhaquevocestdadoonmero0x173A4C.Vocpodeconverter
esteformatobinrio,expandindocadadgitohexadecimal,comosegue:

hexdgitos 0 1 2 3 4 5 6 7
valordecimal 0 1 2 3 4 5 6 7
valorbinrio 0000 0001 0010 0011 0100 0101 0110 0111
hexdgitos 8 9 UMA B C D E F
valordecimal 8 9 10 11 12 13 14 15
valorbinrio 1000 1001 1010 1011 1100 1101 1110 1111
Figura2.2Notaohexadecimal.CadadgitoHexcodificaumdos16valores.

Pgina70

35
Seco2.1ArmazenamentodeInformao

hexadecimal 1 7 3 UMA 4 C
Binrio 0001 0111 0011 1010 0100 1100

Istodarepresentaobinria000101110011101001001100.
Poroutrolado,dadoumnmerobinrio1111001010110110110011,vocconvertlo
parahexadecimalpelaprimeiradividindooemgruposde4bitscada.Notese,contudo,quese
onmerototaldebitsnoummltiplode4,vocdevefazeromaisesquerdagrupo
seronicocommenosde4bits,Enchimentoefetivamenteonmerodeliderar
zeros.Entovoctraduzircadagrupode4bitsparaohexadecimalcorrespondente
dgito:

Binrio 11 1100 1010 1101 1011 0011


hexadecimal 3 C UMA D B 3

PrticaProblema2.1
Executeasseguintesconversesdenmeros:
A.0x39A7F8parabinrio
https://translate.googleusercontent.com/translate_f#202 52/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

B.binrio1100100101111011parahexadecimal
C.0xD5E4Cparabinrio
D.binrio1001101110011110110101parahexadecimal

Quandoumvalorxumapotnciadedois,isto,X=2n poralgumnmerointeirononegativo
n,podemosfacilmenteescreverxemformatohexadecimal,lembrandoqueobinrio
representaodeXsimplesmenteumseguidodenzeros.Odgitohexadecimal0
representaquatrozerosbinrios.Assim,paraNescritosobaformadei+4j,onde0i3,
podemosescreverXcomumdgitohexlderde1(i=0),2(i=1),4(i=2),ouoito
(I=3),seguidoporJ0shexadecimais.Comoumexemplo,parax=2048=211 ,temos
n=11=3+4.2,dando0x800representaohexadecimal.

PrticaProblema2.2
Preenchaasentradasembranconatabelaaseguir,dandoodecimalehexadecimal
representaesdediferentespotnciasde2:

N 2n(Decimal) 2N(hexadecimal)
9 512 0x200
19
16.384
0x10000
17
32
0x80

Pgina71

36 Captulo2RepresentaoeManipulaodeInformao

Conversoentredecimalehexadecimalrepresentaesrequerouso
multiplicaooudivisoparalidarcomocasogeral.Paraconverterumnmedecimal
berxparahexadecimal,podemosrepetidamentedividirxpor16,dandoumquocienteqeuma
restanter,detalmodoquex=q.16+R.Emseguida,usamosoreprehexadecimaldgitos
ingrcomoodgitomenossignificativoegerarosdgitosrestantes,repetindo
oprocessoemq.Comoumexemplo,considereaconversodedecimal314156:
314156=19634.16+12(C)
19.634=1.227.16+2 (2)
1227=76.16+11 (B)
76=4.16+12 (C)
4=0.16+4 (4)
Apartirdissopodemoslerarepresentaohexadecimalcomo0x4CB2C.
Poroutrolado,paraconverterumnmerohexadecimalemdecimal,podemosmultiplicar
cadaumdosdgitoshexadecimaispelopoderapropriadode16.Porexemplo,dado
onmero0x7AF,calculamosseuequivalentedecimalcomo7.162 +10.16+15=
7.256+10.15=16+1792+160+15=1967.

PrticaProblema2.3
Umnicobytepodeserrepresentadopordoisdgitoshexadecimais.Preenchaoquefalta
entradasnatabelaaseguir,dandoosdecimais,valoresbinriosehexadecimais
dediferentespadresdebytes:
Decimal Binrio hexadecimal
0 00000000 0x00
167
62
188
00110111
10001000
11110011
0x52
0xAC
0xE7

https://translate.googleusercontent.com/translate_f#202 53/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

AlmConversoentredecimalehexadecimal
Paraconvertervaloresmaioresentredecimalehexadecimal,melhordeixarqueumcomputadoroucalculadora
faaotrabalho.Porexemplo,oseguintescriptnalinguagemPerlconverteumalistadenmeros(dado
nalinhadecomando)dedecimalemhexadecimal:

Pgina72

37
Seco2.1ArmazenamentodeInformao

bin/d2h
1 #!/Usr/local/bin/perl
2 Lista#Converterdenmerosdecimaisemhexadecimal
3
4 for($i=0$i<@ARGV$i++){
5 printf("%d\t=0x%x\n",$ARGV[$i],$ARGV[$i])
6 }
bin/d2h
Umavezqueestearquivofoidefinidoparaserexecutvel,ocomando
unix>./d2h100500751
sadaderendimentos

100=0x64
500=0x1F4
751=0x2ef
Damesmaforma,oscriptaseguirconvertedehexadecimalparadecimal:

bin/H2D
1 #!/Usr/local/bin/perl
2 #Converterlistadenmeroshexadecimaisparadecimal
3
4 for($i=0$i<@ARGV$i++){
5 $Val=hex($argv[$i])
6 printf("0x%x=%d\n",$val,$val)
7 }
bin/H2D

PrticaProblema2.4
Semconverterosnmerosparadecimaloubinrio,tentarresolveroacompanhamento
ingproblemasaritmticos,dandoasrespostasemhexadecimal.Dica:Apenasaltere
osmtodosquevocusaparaexecutaradiodecimalesubtraodeusar
base16.
A.0x503c+0x8=
B.0x503c0x40=
C.0x503c+64=
D.0x50ea0x503c=

Pgina73

https://translate.googleusercontent.com/translate_f#202 54/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

38 Captulo2RepresentaoeManipulaodeInformao

2.1.2Words
Cadacomputadortemumtamanhodapalavra,indicandootamanhonominaldeinteiroeponteiro
dados.Umavezqueumendereovirtualcodificadaporumapalavra,omaisimportantesistema
parmetrodeterminadopelotamanhodepalavraotamanhomximodoendereovirtual
espao.Isto,paraumamquinacomumwtamanhodepalavrabits,osendereosvirtuaispodevariar
02W1,dandooacessoaoprograma,nomximo,2Wbytes.
Amaioriadoscomputadorespessoaishojetmumtamanhodepalavrade32bits.Istolimitaovirtual
espaodeendereamentopara4gigabytes(escrito4GB),ouseja,poucomaisde4109 bytes.Al
emboraesteumespaoamploparaamaioriadasaplicaes,atingimosopontoonde
muitasaplicaescientficasedebancodedadosemlargaescalaexigemgrandesquantidadesde
armazenamento.Consequentemente,mquinashighendcomtamanhosdepalavrade64bitsestosetornandoin
cadavezmaiscomum,comooscustosdearmazenamentodiminuir.Comooscustosdehardwarecairaolongodotempo,
atmesmoasmquinasdesktopelaptopvaimudarparatamanhosdepalavrade64bits,eporissovamos
considerarocasogeraldeumWtamanhodepalavrabits,bemcomooscasosespeciaisdew=32
ew=64.

2.1.3TamanhosdeDados
Computadoresecompiladoresoferecersuporteavriosformatosdedadosusandoformasdiferentesde
codificardados,taiscomonmerosinteirosedepontoflutuante,bemcomodiferentescomprimentos.Para
exemplo,muitasmquinastminstruesparamanipulaodebytesindividuais,bem
comointeirosrepresentadacomo2,4,easquantidadesde8bytes.Elestambmoferecemsuporteflutuante
Nmerosdepontorepresentadacomoquantidadesde4e8bytes.
AlinguagemCsuportavriosformatosdedados,tantoparanmerointeiroeflutuante
dadosdeponto.OCtipodedadoscharrepresentaumnicobyte.Emboraonome
"Char"derivadofatodequeeleusadoparaarmazenarumnicocaractereemumtexto
corda,quetambmpodeserutilizadaparaarmazenarvaloresinteiros.OtipodedadosCinttambmpodeser
precedidadaseliminatriascurto,longo,e,recentemente,longo,longo,proporcionandointeiros
representaesdevriostamanhos.Figura2.3mostraonmerodebytesalocado

declaraoC 32bits 64bits


Caracteres 1 1
shortint 2 2
int 4 4
longint 4 8
intlonglong 8 8
Caracteres* 4 8
flutuador 4 4
Duplo 8 8
Figura2.3Tamanhos(embytes)deCtiposdedadosnumrico.Onmerodebytesatribudos
variacomamquinaecompilador.Estegrficomostraosvalorestpicosde32bite64bit
mquinas.

Pgina74

39
Seco2.1ArmazenamentodeInformao

paradiferentestiposdedadosC.Onmeroexatodependetantodamquinae
ocompilador.Mostramostamanhostpicosparamquinasde32bitsede64bits.Observeaquilo
inteiros"curtas"temalocaesde2bytes,enquantoumintnoqualificadode4bytes.UMA
"Longa"denmerointeiroutilizaotamanhodepalavracompletadamquina.O"tempolongo"integer
tipodedados,introduzidoemISOC99,permitequetodaagamadenmerosinteirosde64bits.Para32bits
mquinas,ocompiladordevecompilarasoperaesparaestetipodedados,gerando
cdigoqueexecutasequnciasdeoperaesde32bits.
AFigura2.3mostratambmqueumapontador(porexemplo,umavariveldeclaradacomosendodotipo
"Char*")usaapalavradetamanhocompletodamquina.Amaioriadasmquinastambmsuportam
doisformatosdepontoflutuantediferentes:precisosimples,declaradoemCcomofloat,
eprecisodupla,declaradoemCcomodupla.Essesformatosusam4e8bytes,
respectivamente.

NovoparaC?declarandoponteiros

https://translate.googleusercontent.com/translate_f#202 55/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
ParaqualquertipodedadosT,adeclarao
T*p
indicaquepumavarivelponteiro,apontandoparaumobjetodotipoT.Porexemplo,

char*p
adeclaraodeumponteiroparaumobjetodotipochar.

Osprogramadoresdevemseesforarparatornarseusprogramasportveisentrediferentes
mquinasecompiladores.Umaspectodaportabilidadefazercomqueoprogramainsensvel
tivaaostamanhosexatosdosdiferentestiposdedados.OspadresCdefinirlimitesinferiores
sobreosintervalosnumricosdosdiferentestiposdedados,comoserposteriormentecoberto,mash
hlimitessuperiores.Desde32bitmquinastmsidoopadrodesdeporvolta
1980,muitosprogramastmsidoescritosassumindoasatribuieslistadasparaeste
tamanhodapalavranaFigura2.3.Dadaacrescentedisponibilidadedemquinasde64bits,muitos
dependnciasdetamanhodepalavrasescondidasaparecerocomoerrosnamigraodessesprogramas
anovasmquinas.Porexemplo,muitosprogramadoressupemqueumobjetodeprograma
declaradoscomotipointpodeserusadoparaarmazenarumponteiro.Issofuncionabemparaamaioriade32bits
mquinas,maslevaaproblemasemumamquinade64bits.

2.1.4EndereamentoeByteOrdenao
Paraobjetosdeprogramasqueabrangemvriosbytes,devemosestabelecerduasconvenes:
oqueoendereodoobjetoser,ecomovamosordenarosbytesdememria.
Empraticamentetodasasmquinas,umobjectodemultibytearmazenadocomoumasequnciacontgua
debytes,comoendereodoobjectodeterminadopelomenorendereodosbytes
usava.Porexemplo,suponhaqueumxvariveldotipointtemumendereo0x100,ouseja,a
valordaexpressoendereo&x0x100.Emseguida,osbytesde4xseriaarmazenado
emlocaisdememria0x100,0x101,0x102e0x103.

Pgina75

40 Captulo2RepresentaoeManipulaodeInformao

Paraencomendarosbytesquerepresentamumobjeto,hdoisconvenocomum
es.ConsidereumWinteirobitstendoumarepresentaodebits[XW1,Xw2,...,x1,x0 ],
ondeXw1 obitmaissignificativoex0 omenos.AssumindoqueWummltiplo
de8,estesbitspodemseragrupadascomobytes,comobytecombitsmaissignificativos
[Xw1,xw2,...,xw8 ],obyteterbitsmenossignificativos[x7,x6,...,x0 ],e
osoutrosbytestendoosbitsapartirdomeio.Algumasmquinasdeescolhaparaarmazenaroob
Jectnamemriaordenadadebytemenossignificativoparaamaiorparte,enquantooutrasmquinas
armazenlosdomaisparaomenos.Oexconvenoondeomenossignificativa
bytenopodemocorrerprimeiroreferidocomolittleendian.Estaconvenoseguida
pelamaioriadasmquinascompatveiscomIntel.Altimaconvenoondeomaissigni
bytesignivemprimeiroreferidocomobigendian.Estaconvenoseguida
pelamaioriadasmquinasdaIBMedaSunMicrosystems.Notesequedissemos"amaioria".
Asconvenesnodividirprecisamenteaolongodoslimitescorporativos.Porexemplo,
IBMeSunfabricaodemquinasqueusamprocessadorescompatveiscomIntel
e,portanto,sopoucoendian.Muitosmicroprocessadoresrecentessobiendian,ouseja,
quepodeserconfiguradoparaoperartantocomomquinasLittlemoreoubigendian.
Continuandonossoexemploanterior,suponhaqueavarivelxdotipointeem
endereo0x100temumvalorhexadecimalde0x01234567.Aordenaodosbytes
dentrodointervalodeendereosatravs0x1000x103dependedotipodemquina:

Bigendian
0x100 0x101 0x102 0x103
... 01 23 45 67 ...

Pequenoendian
0x100 0x101 0x102 0x103
... 67 45 23 01 ...

Notesequenapalavra0x01234567obytedemaisaltaordemtemumvalorhexadecimal
0x01,enquantoobytedeordemtemumvalor0x67.
Aspessoasficamsurpreendentementeemocionalsobreoqualaordemdosbytesocorreto.
Naverdade,ostermos"LittleEndian"e"BigEndian"vmdolivrodeGulliver
ViajaporJonathanSwift,ondeduasfacesemguerranopoderiaconcordarsobreaformacomoa
ovocozidodeveserabertobyopequenofimoupelogrande.Assimcomooovo

https://translate.googleusercontent.com/translate_f#202 56/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
questo,nohnenhumarazotecnolgicaparaescolherumbyteconvenoordenaosobre
aoutra,e,portanto,osargumentosdegeneraremdisputassobresociopoltica
problemas.Enquantoumadasconvenesselecionadoeaderiuaoconsistentemente,
aescolhaarbitrria.

AlmOrigemdas"endian"
AquiestcomoJonathanSwift,escrevendoem1726,descreveuahistriadacontrovrsiaentregrandese
pequenosendians:

Pgina76

41
Seco2.1ArmazenamentodeInformao

...Lilliput...ter,comoeuestavaindoparadizerlhe,foienvolvidoemumaguerramaisobstinada
paraseisetrintaeluaspassado.Comeounoseguinteocasio.permitidoemtodasasmos,que
aformaprimitivadequebrarosovos,antesdecomlos,estavasobreaextremidademaiormasoseupresente
Oavdemajestade,enquantoeleeraummenino,vaicomerumovo,equebrlodeacordocomo
prticaantiga,passouacortarumdeseusdedos.Diantedisso,oimperadorseupaipublicada
umedito,comandandotodososseusassuntos,sobregrandespenalidades,paraquebraraextremidademenordeseusovos.
Opovotoaltamenteressentidoestalei,queasnossashistriasnosdizem,houveseisrebelieslevantadas
porcontadissoemqueumimperadorperdeuavida,eoutraasuacoroa.Estesdistrbioscivis
estavamconstantementefomentadapelosmonarcasdeBlefuscuequandoforamsubjugados,osexilados
semprerefugiamosemqueoimprio.calculadoqueonzemilpessoastmemvrias
vezessofreuamorte,emvezdesubmeterseaquebrarseusovosnofinalmenor.muitascentenas
grandesvolumesforampublicadossobreestacontrovrsia,masoslivrosdosBigendianstm
sidoproibido,etodoogrupoincapazesporleidemanterempregos.
Emseudia,SwiftfoisatirizandoosconflitoscontnuosentreaInglaterra(Lilliput)eFrana(Blefuscu).
DannyCohen,umdospioneirosemprotocolosderede,aplicadopelaprimeiravezessestermosparasereferirabyte
ordenao[25],ecomaterminologiatemsidoamplamenteadotado.

Paraamaioriadosprogramadoresdeaplicativos,osordenamentosdebyteusadoporsuasmquinas
sototalmenteinvisvelprogramascompiladosparaqualquerclassedemquinadedaridnticos
resultados.svezes,porm,byteordenaotornaumproblema.Aprimeiraquando
dadosbinriossocomunicadasatravsdeumaredeentreasdiferentesmquinas.UMA
problemacomumparaosdadosproduzidosporumamquinadepequenoendianparaseremenviadaspara
umamquinabigendian,ouviceversa,levandoaosbytesdentrodaspalavrassendoem
Paraqueoprogramadereceporeversa.Paraevitartaisproblemas,ocdigoescritopara
aplicaesderededeveseguirasconvenesparaordenaodebytesestabelecidopara
certificarsedamquinadeenvioconvertesuarepresentaointernaparaarede
padro,enquantooaparelhoreceptorconverteopadroderedeparaasuainterno
representao.VeremosexemplosdessasconversesnoCaptulo11.
Umsegundocasoemquebyteordenaosetornaimportantequandoseolhapara
asseqnciasdebytesquerepresentamdadosinteiros.Istoocorrefrequentementequandoinspecionando
programasdenveldemquina.Comoumexemplo,aseguintelinhaocorreemumarquivo
dumarepresentaodetextodocdigodenveldemquinaparaumprocessadorIntelIA32:
80483bd:010564940408 adicionar%Eax,0x8049464
Estalinhafoigeradaporumdesintegrador,uminstrumentoquedeterminaainstruo
sequnciarepresentadaporumarquivoexecutveldoprograma.Vamosaprendermaissobre
disassemblersecomointerpretarlinhascomoestenoCaptulo3.Porenquanto,
simplesmentenotarqueestalinhaindicaqueasequnciahexadecimalbyte010564
940408arepresentaodenveldebytedeumainstruoqueadicionaumapalavrade
osdadosparaovalorarmazenadonoendereo0x8049464.Setomarmososltimos4bytesde
asequncia,64940408,egravlosemordeminversa,temos080494
64.Soltandoo0esquerda,temosovalor0x8049464,ovalornumrico
escritonoladodireito.Tendobytesaparecememordeminversaumaocorrnciacomum
aolerrepresentaesdeprogramadenveldemquinageradoparalittleendian

Pgina77
https://translate.googleusercontent.com/translate_f#202 57/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

42 Captulo2RepresentaoeManipulaodeInformao

1 #include<stdio.h>
2
3 typedefunsignedchar*byte_pointer
4
5 show_bytesvoid(byte_pointercomear,intlen){
6 inti
7 for(i=0i<leni++)
8 printf("%.2x",inicieo[i])
9 printf("\n")
10 }
11
12 vazioshow_int(intx){
13 show_bytes((byte_pointer)&x,sizeof(int))
14 }
15
16 vazioshow_float(floatx){
17 show_bytes((byte_pointer)&x,sizeof(float))
18 }
19
20 show_pointervoid(void*x){
21 show_bytes((byte_pointer)&x,sizeof(void*))
22 }
Figura2.4Cdigoparaimprimirarepresentaobytedeobjetosdoprograma.Essecdigousa
fundiodecontornarosistemadetipos.Funessemelhantessofacilmentedefinidosparaoutrosdados
Tipos.

mquinascomoeste.Ocaminhonaturalparaescreverumaseqnciadebytetera
byteesquerdaeomaisaltodireitademenornmero,masissocontrrio
paraomodonormaldeescrevernmeroscomodgitomaissignificativoesquerda
eapelomenosdireita.
Umterceirocasoemquebyteordenaotornasevisvelquandoosprogramasso
escritoquecontornarosistemadetiponormal.NalinguagemC,estepodeser
feitousandoummoldeparapermitirqueumobjectoaserreferenciadodeacordocomumconjuntodedadosdiferente
Tipoapartirdoqualelefoicriado.Essestruquesdecodificaosofortementedesencorajadoa
maisdeprogramaodeaplicativos,maselespodemserbastantetilemesmonecessrio
paraaprogramaoemnveldesistema.
Figura2.4mostraocdigoCqueusaaprojeoparaacessareimprimirorepresenbyte
represendediferentesobjetosdoprograma.Usamostypedefparadefinirotipodedados
byte_pointercomoumponteiroparaumobjetodotipo"charnoassinado."Talumbyte
ponteirofazrefernciaaumasequnciadebytes,ondecadabyteconsideradoparaserumno
inteironegativo.Osprimeirosshow_bytesrotinadadooendereodeumasequncia
debytes,indicadoporumponteirodebyte,eumacontagemdebytes.Elaimprimeoindivduo
bytesemhexadecimal.AdirectivaCformatao"%.2x"indicaqueumnmerointeiro
deveserimpressaemhexadecimalcom,pelomenos,doisdgitos.

Pgina78

43
Seco2.1ArmazenamentodeInformao

NovoparaC?Namingtiposdedadoscomtypedef
AdeclaraotypedefemCforneceumamaneiradedarumnomeaumtipodedados.Estapodeserumagrandeajuda
emmelhoraralegibilidadedocdigo,umavezqueasdeclaraesdetipoprofundamenteaninhadaspodeserdifcildedecifrar.
Asintaxeparatypedefexatamenteigualadedeclararumavarivel,excetoqueeleusaumnomedetipo
emvezdeumnomedavarivel.Assim,adeclaraodebyte_pointernaFigura2.4temamesmaformaque
adeclaraodeumavariveldotipo"unsignedchar*."
Porexemplo,adeclarao

typedefint*int_pointer
int_pointerip
definedigitar"int_pointer"paraserumponteiroparaumint,edeclaraumipvariveldestetipo.alterna
https://translate.googleusercontent.com/translate_f#202 58/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
vamente,podemosdeclararestavariveldiretamentecomo

int*ip

NovoparaC?Impressoformatadocomprintf
Afunoprintf(juntamentecomseusprimosfprintfesprintf)forneceumamaneiraparaimprimirinformaes
comumconsidervelcontrolesobreosdetalhesdeformatao.Oprimeiroargumentoumastringdeformato,enquanto
todososdemaisargumentossovaloresaserimpresso.Dentrodacadeiadeformato,cadasequnciadecaracteres
comeandocom'%'indicacomoformataroprximoargumento.Exemplostpicosincluem'%d'paraimprimirum
decimalinteiro,'%f'paraimprimirumnmerodepontoflutuante,e'%c'paraimprimirumcarterquetenhamanatureza
cdigodadopeloargumento.

NovoparaC?Ponteirosearrays
Emshow_bytesdefuno(Figura2.4),vemosaestreitaligaoentreponteirosearrays,comoavontade
serdiscutidoemdetalhesnaSeo3.8.Vemosqueestafunotemumincioargumentodotipobyte_
ponteiro(quefoidefinidoparaserumponteiroparasemassinaturachar),masvemosarefernciadematriz
iniciar[i]nalinha8.EmC,podemosexcluirarefernciaumponteirocomanotaodematriz,enspodefazerrefernciaamatriz
elementoscomnotaodeponteiro.Nesteexemplo,arefernciacomear[i]indicaquequeremosler
obytequeposiesialmdalocalizaoapontadapelocomeo.

Procedimentosshow_int,show_floateshow_pointerdemonstrarcomo
usarshow_bytesprocedimentoparaimprimirasrepresentaesdebytesdeobjetosdeprogramaC
dotipoint,float,evoid*,respectivamente.ObservequeelessimplesmentepassarShow_
bytesumponteiro&xaoseuargumentox,lanandooponteiroparaserdotipo"semsinal
char*".Esteelencoindicaaocompiladorqueoprogramadeveconsiderara
ponteiroparaserumasequnciadebytesemvezdeaumobjectodedadosoriginais
tipo.Esseponteiroser,ento,paraomenorendereodebyteocupadapeloobjeto.

Pgina79

44 Captulo2RepresentaoeManipulaodeInformao

NovoparaC?Criaoponteiroedereferencing
Emlinhas13,17e21daFigura2.4,vemosusosdeduasoperaesquedoC(e,portanto,C++)asua
carcterdistintivo.O"endereo"Coperadorecriaumponteiro.Emtodasastrslinhas,aexpresso
&Xcriaumponteiroparaalocalizaoqueprendeoobjectoindicadopelavarivelx.Otipodeponteiro
dependedotipodex,e,portanto,estestrsponteirossodotipoint*,float*,esemefeito**?
respectivamente.(Tipodedadosvoid*umtipoespecialdeponteiroseminformaesdetipoassociado.)
Ooperadordeconversoconvertedeumtipodedadosparaoutro.Assim,oelenco(byte_pointer)&x
indicaquequalquertipooponteiro&xtinhaantes,oprogramairagorafazerrefernciaaumponteiropara
dadosdotipocharnoassinado.Osmodelosaquiapresentadosnoalteraoponteirorealelessimplesmentedirigir
ocompiladorparareferirseaosdadosaserapontadadeacordocomonovotipodedados.

EstesprocedimentosutilizamoCsizeofoperatorparadeterminaronmerodebytes
utilizadopeloobjecto.Emgeral,aexpressosizeof(T)devolveonmerode
bytesnecessriosparaarmazenarumobjetodotipoT.Usandosizeofemvezdeumvalorfixo
umpassonadireodeescrevercdigoqueporttilatravsdediferentestiposdemquinas.
CorremosocdigomostradonaFigura2.5emvriasmquinasdiferentes,dandoa
resultadosapresentadosnaFigura2.6.Foramutilizadososseguintesmquinas:
Linux32: IntelIA32processadorrodandoLinux
Janelas: IntelIA32processadorescomoWindows
Dom: SunMicrosystemsSPARCSolarisprocessadorrodando
Linux64: processadorx8664IntelrodandoLinux
Nossoargumento12.345tem0x00003039representaohexadecimal.Paraaint
dados,obterresultadosidnticosparatodasasmquinas,excetoparaaordenaodebytes.Dentro
particular,podemosverqueovalordobytemenossignificativode0x39impressopelaprimeiravez
paraLinux32,WindowseLinux64,indicandomquinaslittleendian,eporltimo
paraaSun,indicandoumamquinabigendian.Damesmaforma,osbytesdedadosdoflutuador
soidnticos,exceptoparaaordenaobyte.Poroutrolado,osvaloresdeponteiro
socompletamentediferentes.Asconfiguraesdemquina/sistemaoperacionaldiferente

https://translate.googleusercontent.com/translate_f#202 59/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

1 test_show_bytesvoid(intval){ cdigo/data/showbytes.c
2 intival=Val
3 flutuarfval=ival(float)
4 int*pval=&ival
5 show_int(ival)
6 show_float(fval)
7 show_pointer(PVAL)
8 }
cdigo/data/showbytes.c
Figura2.5Exemplosderepresentaoembytes.Estecdigoimprimeasrepresentaesbytede
objetosdedadosdeamostra.

pgina80

45
Seco2.1ArmazenamentodeInformao

Mquina Valor Tipo Bytes(hex)


Linux32 12.345 int 39300000
janelas 12.345 int 39300000
dom 12.345 int 00003039
Linux64 12.345 int 39300000
Linux32 12,345.0 flutuador 00e44046
janelas 12,345.0 flutuador 00e44046
dom 12,345.0 flutuador 464000E4
Linux64 12,345.0 flutuador 00e44046
Linux32 &ival int* e4bff9ff
janelas &ival int* b4cc2200
dom &ival int* ef0Cfffa
Linux64 &ival int* B811e5ffff7F0000
Figura2.6representaesbytedediferentesvaloresdedados.Resultadosparainteflutuador
soidnticos,exceptoparaaordenaodebytes.valoresdeponteirosodependentesdamquina.

utilizardiferentesconvenesparaaalocaodearmazenamento.Umacaractersticaasalientarqueo
Linux32,mquinasWindowseSunusarendereosde4bytes,enquantooLinux64
mquinausaendereosde8bytes.
Observeque,emboraodepontoflutuanteeosdadosinteirostantocodificar
ovalornumrico12.345,elestmmuitodiferentespadresdebytes:0x00003039
paraonmerointeiroe0x4640E400depontoflutuante.Emgeral,estesdoisformatos
usardiferentesesquemasdecodificao.Seexpandirmosessespadreshexadecimaisem
formabinriaetransferilosdeformaadequada,encontramosumasequnciade13bitscorrespondentes,
indicadoporumasequnciadeasteriscos,comosegue:
0 0 0 0 3 0 3 9
00000000000000000011000000111001
*************
4 6 4 0 E 4 0 0
01000110010000001110010000000000
Issonocoincidncia.Vamosvoltaraesteexemploquandoestudamosflutuante
formatosdeponto.

PrticaProblema2.5
Considereasseguintestrschamadasparashow_bytes:
intval=0x87654321
byte_pointerVALP=(byte_pointer)&val
show_bytes(VALP,1)/*UMA.*/
show_bytes(VALP,2)/*B*/
show_bytes(VALP,3)/*C*/

https://translate.googleusercontent.com/translate_f#202 60/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina81

46 Captulo2RepresentaoeManipulaodeInformao

Indiquequaisdosseguintesvaloresseroimpressosporcadachamadaemumpouco
mquinaendianeemumamquinabigendian:
A.LittleEndian: Bigendian:
B.endianpequeno: Bigendian:
C.Poucoendian: Bigendian:

PrticaProblema2.6
Usingshow_intandshow_float,determinamosqueointeiro3510593temhexa
decimalrepresentao0x00359141,enquantoonmerodepontoflutuante3.510.593.0
temrepresentaohexadecimal0x4A564504.
A.Faaasrepresentaesbinriasdestesdoisvaloreshexadecimais.
B.Deslocamentoestasduascadeiasemrelaoumaoutraparamaximizaronmerode
bitscorrespondentes.Quantosbitscombinar?
C.Quepartesdascordasnocombinam?

2.1.5stringsrepresentando
AseqnciadecaracteresemCcodificadoporumamatrizdecaracteresterminadapornulo(tendo
valor0)personagem.Cadapersonagemrepresentadoporalgunscodificaopadro,com
sendoomaiscomumocdigodecaracteresASCII.Assim,secorremosnossarotina
show_bytescomargumentos"12345"e6(paraincluirocaracteredefinalizao),
obtemosoresultado313233343500.ObservequeocdigoASCIIparadgitodecimal
xpassaaser0x3X,equeobytedeterminaotemarepresentaohex
0x00.EstemesmoresultadoseriaobtidoemqualquersistemausandoASCIIcomooseu
cdigodecaracteres,independentementedasconvenesdetamanhoordenaodebytesepalavras.Como
Emconsequncia,osdadosdetextomaisdoquedadosbinriosindependentedeplataforma.

AlmGerandoumatabelaASCII
VocpodeexibirumatabelaquemostraocdigodecaracteresASCII,executandoocomandomanascii.

PrticaProblema2.7
Oqueseriaimpressocomoresultadodaseguintechamadaparashow_bytes?

constchar*s="abcdef"
show_bytes((byte_pointer)s,strlen(s))

Notesequeasletras'a'a'z'tmcdigosASCII0x61atravs0x7A.

Pgina82

47
Seco2.1ArmazenamentodeInformao

AlmAnormaUnicodeparacodificaodetexto
OconjuntodecaracteresASCIIadequadoparaacodificaodedocumentosdoidiomaIngls,maselenotem
muitonaformadecaracteresespeciais,comoofrancs"".totalmenteinadequadoparaacodificao
documentosemidiomascomoogrego,russoechins.Aolongodosanos,umagrandevariedadedemtodos
tmsidodesenvolvidosparacodificarotextoparadiferentesidiomas.OConsrcioUnicodeelaborouo
maisabrangenteeamplamenteaceitopadroparacodificaodetexto.OpadroUnicodeatual
(Verso5.0)temumrepertriodecercade100.000caracteresapoioslnguasquevodesdeAlbans
paraXamtanga(alnguafaladapelopovoXamirdaEtipia).

https://translate.googleusercontent.com/translate_f#202 61/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Acodificaodebase,conhecidocomoo"ConjuntodeCaracteresUniversal"deUnicode,usaumarepresentaode32bits
odecaracteres.Istopareceaexigirquecadaseqnciadetextoparaconsistemem4bytesporcaractere.
Noentanto,codificaesalternativassopossveisondeospersonagenscomunsrequeremapenas1ou2bytes,enquanto
osmenoscomunsexigemmais.Emparticular,arepresentaoUTF8codificacadacaracterecomoum
sequnciadebytes,detalformaqueoscaracteresASCIIpadrousamasmesmascodificaesdebytenicocomoeles
tmemASCII,oqueimplicaquetodasasseqnciasASCIIbytestmomesmosignificadoemUTF8comoofazemem
ASCII.
AlinguagemdeprogramaoJavausaUnicodeemsuasrepresentaesdestrings.bibliotecasdeprogramas
tambmestodisponveisparaCparasuportarUnicode.

2.1.6RepresentandoCdigo
ConsidereaseguintefunoC:

1 somaint(intx,inty){
2 voltarx+y
3 }

Quandocompiladoemnossasmquinasdeexemplo,podemosgerarcdigodemquinaquetema
seguinterepresentaesbyte:

Linux32: 5589e5c38b450C034508C9
Janelas: 5589e5c38b450C0345085d
Dom: 81c3e00890020009
Linux64: 554889e589fc7d8975f80345fcC9c3
Aquidescobrimosqueoscdigosdeinstruosodiferentes.tiposdiferentesdemquinas
usarinstruesecodificaesdiferenteseincompatveis.Mesmotransformaoidntica
soresqueexecutamsistemasoperacionaisdiferentestmdiferenasemsuaconvenodecodificao
ese,portanto,nosocompatveiscomobinrio.cdigobinrioraramenteporttilatravsde
diferentescombinaesdemquinaesistemaoperacional.
Umconceitofundamentaldesistemasdecomputadorqueumprograma,apartirda
emperspectivadamquina,simplesmenteumasequnciadebytes.Amquinanotem
informaessobreoprogramadefonteoriginal,exceto,talvez,algunsauxiliares
tabelasmantidaparaajudarnadepurao.Vamosverissomaisclaramentequandoestudamos
programaodenveldemquinanoCaptulo3.

Pgina83

48 Captulo2RepresentaoeManipulaodeInformao

~ &Amp01 | 01 ^ 01
0 1 0 00 0 01 0 01
1 0 1 01 1 11 1 10
Figura2.7Operaesdalgebrabooleana.Osvaloresbinrios1e0valoreslgicoscodificar
VerdadeiroeFalso,enquantoasoperaes~,&,|E^codificaroperaeslgicasNOT,AND,
Ou,eExclusiveOr,respectivamente.

2.1.7IntroduolgebradeBoole
Desdevaloresbinriosestonocernedecomocomputadorescodificar,armazenaremanipu
informaesdeatraso,umricocorpodeconhecimentomatemticoevoluiuemtornodo
estudodosvalores0e1.IssocomeoucomotrabalhodeGeorgeBoole(1815
1864)porvoltade1850e,portanto,conhecidacomolgebrabooleana.Booleobservadoquepelo
lgicadecodificaovaloresverdadeiroefalsocomovaloresbinrios1e0,elepoderiaformular
umalgebraquecapturaosprincpiosbsicosdoraciocniolgico.
Omaissimpleslgebrabooleanadefinidasobreo2elementoconjunto{0,1}.FIG
ure2.7definevriasoperaesnestelgebra.Nossossmbolospararepresentar
estasoperaessoescolhidasparacoincidircomaquelesusadospelasoperaesdenvelbitC,como
serdiscutidomaistarde.Aoperaobooleana~correspondeoplgica
Norao,denotadapelosmbolo.Ouseja,dizemosquePverdadequandoP
noverdade,eviceversa.Correspondentemente,~piguala1quandopforiguala0,e
viceversa.operaobooleanaecorrespondeoperaolgicaE,de
observouosmbolo.DizemosquePQdetmquandoambosPverdadeiraeQ
verdade.Correspondentemente,p&qiguala1apenasquandop=1eq=1.operaobooleana
o|correspondeaofuncionamentoOUlgico,representadopelosmbolo.Nsdizemos
quePQvalequandoquerPverdadeiraouQverdade.Correspondentemente,P|qiguais
1quandoump=1ouqoperao=1.booleano^correspondeoplgica

https://translate.googleusercontent.com/translate_f#202 62/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
raoouexclusivo,denotadapelosmbolo.DizemosquePQvalequando
querPverdadeiraouQverdadeiro,masnoambos.Correspondentemente,p^qiguala1quando
querp=1eq=0,oup=0eq=1.
ClaudeShannon(19162001),quemaistardefundouodomniodainformao
teoria,primeirofezaconexoentrelgebrabooleanaelgicadigital.Dentro
suatesedemestradode1937,elemostrouquealgebrabooleanapodeseraplicadaao
projetoeanlisederedesderelseletromecnicos.emboracomputador
atecnologiatemavanadoconsideravelmentedesde,algebrabooleanaaindadesempenhaumcentrode
papelnoprojetoeanlisedesistemasdigitais.
Podemosestenderasquatrooperaesbooleanastambmoperamemvetoresdebits,
seqnciasdezeroseunsdealgunscomprimentofixow.Nsdefinimosasoperaesmais
vetoresdebitsdeacordocomsuasaplicaesparaoselementoscorrespondentesdosargumentos.
Deixeumebrepresentamosvectoresdebits[umw1,umw2,...,a0 ]e[bW1,bw2,...,b0 ],
respectivamente.Nsdefinimosum&basertambmumvetordecomprimentopoucow,ondeoith
elementoigualaumi &bi ,para0i<w.Asoperaes|,^e~soestendidospara
vectoresdebitsemumaformasimilar.

Pgina84

49
Seco2.1ArmazenamentodeInformao

Comoexemplos,considerarocasoemqueW=4,ecomargumentosum=[0110]
eb=[1,100].Emseguida,asquatrooperaesa&b,um|b,um^b,e~brendimento
0110 0110 0110
&1100 |1100 ^1100 ~1100
0100 1110 1010 0011

PrticaProblema2.8
Preenchaatabelaaseguirmostraosresultadosdaavaliaodeoperaesbooleanasem
vetoresbit.
Operao Resultado
uma [01101001]
B [01010101]
~um
~b
um&b
A|B
a^b

WebAlmDATA:BOOLMaissobrelgebrabooleanaeanisbooleanos
Asoperaesbooleanas|,&,e~operandoemvetoresdetamanhobitwformamumalgebrabooleana,por
qualquerinteirow>0.Omaissimplesocasoemquew=1,eexistemapenasdoiselementos,maspara
ocasomaisgeral,existem2WvectoresdecomprimentodebitW.lgebrabooleanatemmuitosdosmesmos
propriedadescomoaaritmticasobreinteiros.Porexemplo,assimcomoamultiplicaodistribuisobreaadio,
escritaa.(b+c)=(a.b)+(.umc),operaobooleanaedistribuimais|,escritoum&(b|c)=(a&b)|
(a&c).Almdisso,noentanto,aoperaobooleana|distribuimaisde&,eassimpodemosescreverum|(b&c)=
(a|b)e(a|c),aopassoquensnopodemosdizerquea+(bc.)=(a+b).(a+c),vlidaparatodososinteiros.
Quandoconsideramosasoperaes^,&,e~operandoemvetoresdetamanhobitw,temosumdiferente
formamatemtica,conhecidocomoumanelbooleano.Anisbooleanastmmuitaspropriedadesemcomumcom
aritmticainteira.Porexemplo,umapropriedadedearitmticainteiraquecadavalordextemumaditivo
inversax,talquex+x=0.Apropriedadesemelhantevaleparaosanisbooleanos,onde^a"adio"
operao,mas,nestecaso,cadaelementooseuprprioaditivoinversa.Isto,um^a=0,paraqualquervalordeum,
ondeusamos0aquipararepresentarumvetordetodososzerospouco.Podemosverissovaleparaobitindividual,umavezque
0^0^1=1=0,eestendeseavectoresdebitbem.Estapropriedadevlidamesmoquandoreorganizartermos
ecombinlosemumaordemdiferente,eassim(a^b)^a=b.Estapropriedadelevaaalgumasinteressantes
resultadosetruquesinteligentes,comovamosexplorarnoProblema2.10.

Umaaplicaotildevectoresdebitpararepresentarconjuntosfinitos.Podemoscodificar
qualquersubconjuntoUm{0,1,...,w1}comumvetordebits[umW1,...,um1,uma0 ],ondeumi =1Se
esomenteseiA.Porexemplo,lembrandoquensescrevemosumw1 esquerdaeum0 no

https://translate.googleusercontent.com/translate_f#202 63/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina85

50 Captulo2RepresentaoeManipulaodeInformao

direita,mordeuvectora.=[01101001]codificaoconjuntoA={0,3,5,6},enquantobitvectorb.=
[01010101]codificaoconjuntoB={0,2,4,6}.Comestaformadeconjuntosdecodificao,Boolean
operaes|e&correspondemadefinirunioeinterseco,respectivamente,e~
correspondeadefinircomplemento.Continuandonossoexemploanterior,aoperao
um&brendimentosmordeuvetor[01000001],enquantoqueAB={0,6}.
Vamosveracodificaodosconjuntosdevectoresdebitnumasriedeprtico
Aplicaes.Porexemplo,noCaptulo8,veremosquehumasriede
diferentessinaisquepodeminterromperaexecuodeumprograma.Nspodemosseletivamente
activaroudesactivardiferentessinaisespecificandoumamscaradebitsdovector,emqueum1em
posiodebitiindicaqueosinaliesthabilitado,eum0indicaqueeleestdesativado.
Assim,amscararepresentaoconjuntodesinaisdeactivado.

PrticaProblema2.9
Computadoresgeramimagensacoresemumateladevdeoouteladecristallquido
atravsdamisturadetrscoresdiferentesdeluz:vermelho,verdeeazul.Imagineumasimples
esquema,comtrsluzesdiferentes,cadaumdosquaispodeserligadooudesligado,porprojetos
ingemumateladevidro:

Fontesdeluz teladevidro

Vermelho

Observador
Verde

Azul

Podemos,ento,criaroitocoresdiferentescombasenaausncia(0)oupresena(1)
defontesdeluzR,GeB:
RGB Cor
00 0 Preto
00 1 Azul
01 0 Verde
01 1 Ciano
10 0 Vermelho
10 1 Magenta
11 0 Amarelo
11 1 Branco
Cadaumadestascorespodeserrepresentadacomoumvectordecomprimentode3bits,epodemos
aplicaroperaesbooleanasparaeles.

Pgina86

51
Seco2.1ArmazenamentodeInformao

A.Ocomplementodeumacorformadapordesligarasluzesqueestonoe
acendendoasluzesqueestofora.Oqueseriaocomplementodecadaumde
asoitocoreslistadasacima?
B.Descreveroefeitodaaplicaodeoperaesbooleanasnasseguintescores:

Azul | Verde =
=
https://translate.googleusercontent.com/translate_f#202 64/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Amarelo ^&Amp
Vermelho Ciano
Magenta =

2.1.8OperaesBitdenvelemC
UmacaractersticatildeCqueelesuportaoperaesbooleanasbitabit.Naverdade,o
smbolosqueusamosparaasoperaesbooleanassoexatamenteaquelesusadosporC:|
paraOu,eparaE,~paraNo,e^paraExclusiveOr.Estespodemseraplicadosao
qualquertipodedados"integral",isto,umdeclaradocomotipocharouint,comousem
qualificadores,comocurto,longo,longotempo,ounoassinado.Aquiestoalgunsexemplos
deavaliaodaexpressoparaotipodedadoschar:

expressoC expressobinrio resultadobinrioresultadohexadecimal


~0x41 ~[01000001] [10111110] 0xBE
~0x00 ~[00000000] [11111111] 0xFF
0x69e0x55 [01101001]e[01010101] [01000001] 0x41
0x69|0x55 [01101001]|[01010101] [01111101] 0x7D
Comoosnossosexemplosmostram,amelhormaneiradedeterminaroefeitodeumnvelpoucoex
pressionexpandirosargumentoshexadecimaisemsuasrepresentaesbinrias,
executarasoperaesembinrioe,emseguida,converterdevoltaparahexadecimal.

PrticaProblema2.10
Comoumaaplicaodapropriedadedequeuma^um=0paraqualquerbitvectorum,consideraro
seguinteprograma:

1 inplace_swapvoid(int*x,int*y){
2 *y=x^**y/*Passo1*/
3 *x=*x^*y/*Passo2*/
4 *y=x^**y/*Etapa3*/
5 }
Comoonomeindica,reivindicamosqueoefeitodesteprocedimentoparatrocara
valoresarmazenadosnoslocaisindicadosporponteirovariveisxey.Observeque
aocontrriodatcnicahabitualparatrocardoisvalores,nsnoprecisamosdeumterceiro
localparaarmazenartemporariamenteumvalor,enquantoestamosnosmovendoooutro.L
hvantagemdedesempenhoaestemododetrocaapenasumintelectual
diverso.

Pgina87

52 Captulo2RepresentaoeManipulaodeInformao

Comeandocomvaloresumebnoslocaisapontadaporxey,respectivamente,
preenchernatabelaquesesegue,dosvaloresarmazenadosnosdoislocaisapscada
passodoprocedimento.Useaspropriedadesde^paramostrarqueoefeitodesejadoseja
Alcanado.Recordesequecadaelementooseuprprioaditivoinversa(isto,um^a=0).
Degrau *x *y
Inicialmente uma B
Passo1
Passo2
etapa3

PrticaProblema2.11
Armadocomoinplace_swapfunodoProblema2.10,vocdecidirescrever
cdigoqueirreverteroselementosdeumamatriz,trocandoelementosdafrente
terminadamatriz,trabalhandoemdireoaomeio.
Voccheganaseguintefuno:

1 reverse_arrayvoid(inta[],cntint){
2 intprimeiro,ltimo
3 for(first=0,last=cnt1
4 primeira<=ltimo
5 primeira++,last)
6 inplace_swap(&a[primeira],&a[ltima])
7 }
Quandovocaplicaasuafunoparaumarraycontendooselementos1,2,3e4,voc
encontraramatrizagora,comoesperado,oselementos4,3,2e1.Quandovocexperimentlo

https://translate.googleusercontent.com/translate_f#202 65/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
umamatrizcomelementos1,2,3,4e5,noentanto,vocsesurpreendemaoverque
amatrizagoratemelementos5,4,0,2e1.Naverdade,vocdescobrequeocdigo
semprefuncionacorretamenteemmatrizesdemesmocomprimento,masdefineoelementodomeiopara
0semprequeamatriztemcomprimentompar.
A.Paraumadisposiodecntcomprimentompar=2k+1,quaissoosvaloresdasvariveis
primeiroeltimonaiteraofinaldafunoreverse_array?
B.Porqueestachamadaparaafunoxor_swapdefiniroelementodematriza0?
C.Quesimplesmodificaonocdigoparareverse_arrayeliminaria
esteproblema?

Umusocomumdeoperaesdenvelbitimplementarmascaramentodeoperaes,
ondeumamscaraumpadrodebits,queindicaumconjuntoseleccionadodebitsdentrodeumapalavra.Como
Porexemplo,amscara0xFF(tendounsparaosmenossignificativos8bits)indica
obytedeordemdeumapalavra.Aoperaodenveldebitx&0xFFgeraumvalor
consistenobytemenossignificativodex,mascomtodososoutrosbytesdefinidocomo0.
Porexemplo,comx=0x89abcdef,aexpressorenderia0x000000EF.
Aexpresso~0irproduzirumamscaradetodosaqueles,independentementedotamanhodepalavra

Pgina88

53
Seco2.1ArmazenamentodeInformao

amquina.Emboraamesmamscarapodeserescritaparaum0xFFFFFFFF32bits
mquina,taiscomoocdigonoporttil.

PrticaProblema2.12
EscreverexpressesC,emtermosdevariveisx,paraosseguintesvalores.Seucdigo
devefuncionarparaqualquertamanhodepalavraw8.Parareferncia,mostramosoresultadodaava
Atingasexpressesparax=0x87654321,comw=32.
A.Obytemenossignificativodex,comtodososoutrosbitsdefinidoscomo0.[0x00000021].
B.Todosmasobytemenossignificativodexcomplementado,comomenossignificativo
bytedeixadoinalterado.[0x789ABC21].
C.Obytemenossignificativoajustadoparatodosos1s,etodososoutrosbytesdexdeixadoinalterado.
[0x876543FF].

PrticaProblema2.13
OcomputadorDigitalEquipmentVAXeraumamquinamuitopopulardesdeofinal
1970atofinalde1980.EmvezdeinstruesdeoperaesbooleanasE
eOr,eletinhainstruesbis(conjuntodebits)eBIC(poucoclaras).Ambasasinstruesassumir
umapalavradedadosxeumapalavramscaram.Eleszgerarumresultadoqueconsisteemosbitsde
Xmodificadodeacordocomosbitsdem.Combis,amodificaoenvolvedefinio
za1emcadaposiodebitondem1.Combic,amodificaoenvolvedefinio
Za0emcadaposiodebit,emquem1.
ParavercomoessasoperaesserelacionamcomasoperaesdenvelbitC,assumirque
tmfunesbisebicexecuodasoperaesclarasbitdefinidoebitse
quequeremosuslosparaimplementaroperaesbitabitfunesdecomputao
|e^,semousodequaisqueroutrasoperaesC.Preenchaocdigofaltandoabaixo.
Dica:FaaexpressesCparaobisoperaesebic.

/*Declaraesdefunesdeexecuobisoperaese*bic/
intbis(intx,intm)
intbic(intx,intm)

/*Computex|yusandoapenaschamadasparafunesbise*BIC/
intbool_or(intx,inty){
intresultado=
retornarresultado
}

/*Computex^yusandoapenaschamadasparafunesbise*BIC/
intbool_xor(intx,inty){
intresultado=
retornarresultado
}

https://translate.googleusercontent.com/translate_f#202 66/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

pgina89

54 Captulo2RepresentaoeManipulaodeInformao

2.1.9OperaesLgicasemC
Ctambmforneceumconjuntodelgicasoperadores||,&&e!,QuecorrespondemOu,
E,ENOoperaesdalgica.Estespodemserfacilmenteconfundidocomodenveldebit
asoperaes,masasuafunodiferente.Asoperaeslgicastratarqualquer
argumentodiferentedezerocomorepresentandoVerdadeiroeargumento0comorepresentandoFalso.
Elesvoltam1ou0,indicandoumresultadodeVerdadeiroouFalso,respectivamente.
Aquiestoalgunsexemplosdeavaliaodaexpresso:

Expresso Resultado
!0x41 0x00
!0x00 0x01
!!0x41 0x01
0x690x55&& 0x01
0x69||0x55 0x01
Observequeumaoperaobitabitpodeterumcomportamentocorrespondenteaodasualgica
contrapartidaapenasnocasoespecialemqueosargumentossorestritasa0ou1.
Umasegundadistinoimportanteentreosoperadoreslgicos&&e||ver
susosseushomlogosdenvelbit&e|queosoperadoreslgicosnoavaliam
osegundoargumentoseoresultadodaexpressopodeserdeterminadoporava
ingoprimeiroargumento.Assim,porexemplo,aexpressodeum&&5/umnocausar
umadivisoporzero,eaexpressop&&*p++nuncavaifazercomqueodereferencing
deumponteironulo.

PrticaProblema2.14
Suponhasequexeytmvaloresdebyte0x66e0x39,respectivamente.Preenchao
seguintequadroindicandoosvaloresdebytedasdiferentesexpressesC:
Expresso Valor Expresso Valor
xey x&&y
x|y x||y
~X|~y !X||!y
x&!y x&&~y

PrticaProblema2.15
Usandoapenasemnveldebitseoperaeslgicas,escreverumaexpressoCqueequivalente
parax==y.Poroutraspalavras,elaretorne1quandoXeYsoiguais,e0deoutromodo.

2.1.10OperaesdemudanadeC
Ctambmforneceumconjuntodeturnosoperaesparamudarpadresdebitsparaaesquerdae
paraadireita.Paraumoperandoxtendorepresentaobit[xn 1,xn 2,...,x0 ],
aexpressoCx<<kproduzumvalorcomarepresentaobit[xn k1,xn k2,

pgina90

55
Seco2.1ArmazenamentodeInformao

...,x0,0,...0].Isto,Xdeslocadokbitsparaaesquerda,caindoforadokmais
bitssignificativoseenchendoaextremidadedireitacomkzeros.Aquantidadededeslocamentodeveserum
valorentre0en1.Coloqueoperaesassociamdaesquerdaparaadireita,demodox<<j
<<Kequivalentea(x<<j)<<k.
https://translate.googleusercontent.com/translate_f#202 67/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Humcorrespondentedeslocamentoparaadireitaoperaox>>k,mastemumpouco
comportamentosutil.Geralmente,asmquinassuportamduasformasdedeslocamentoparaadireita:lgica
earitmtica.Umamudanacertalgicapreencheofinalesquerdocomkzeros,dandoumresultado
[0,...,0,Xn 1,XN2,...XK].Umdeslocamentoparaadireitaaritmticaencheofinalesquerdocomkrepe
titionsdobitmaissignificativo,dandoumresultado[XN1,...,xn 1,XN1,XN2,...XK].
Estaconvenopodeparecerestranho,mas,comoveremos,tilparaofuncionamento
emdadosinteiroassinado.
Comoexemplos,atabelaaseguirmostraoefeitodaaplicaododiferente
transferiroperaesaalgumaamostradedadosde8bits:

Operao Valores
argumentox [01100011][10010101]
x<<4 [00110000][01010000]
x>>4(lgico) [00000110][00001001]
x>>4(aritmtica) [00000110][11111001]

Osdgitosemitlicoindicamosvaloresqueenchemadireita(deslocamentoparaaesquerda)ouparaaesquerda(direita
shift)termina.Observequetodos,masumaentradaenvolveopreenchimentocomzeros.Aexceo
ocasodamudana[10010101]direitoaritmeticamente.Desdeoseubitmaissignificativo
1,estavaiserutilizadocomovalordepreenchimento.
OspadresCnodefinircomprecisoqualotipodedeslocamentoparaadireitadeve
serusado.Paradadosnoassinados(ouseja,objetosintegraisdeclaradoscomoqualificador
semassinatura),turnosdireitodeveserlgico.Paradadosassinados(opadro),quer
podeserusadoaritmticaouturnoslgicos.Istosignifica,infelizmente,quenenhumcdigo
assumindoumaformaoudeoutravaipotencialmenteencontrarportabilidadeproblemas.
Naprtica,noentanto,quasetodasascombinaesdecompilador/mquinausararitmtica
mudanascertasparadadosassinados,emuitosprogramadoressupemqueestesejaocaso.
Java,poroutrolado,temumadefinioprecisademudanascomodireitodeve
serrealizada.Aexpressox>>turnoskxaritmeticamenteporposiesk,enquanto
x>>>kdeslocaselogicamente.

AlmShiftingpork,paragrandesvaloresdek
Paraumtipodedadosqueconsisteemwbits,oqualdeveseroefeitodemudarporalgumvalorkw?Para
exemplo,qualdeveseroefeitodecomputaoasseguintesexpressesemumamquinade32bits:

int lVal=0xFEDCBA98<<32
int aval=0xFEDCBA98>>36
unsigneduval=0xFEDCBA98u>>40

pgina91

56 Captulo2RepresentaoeManipulaodeInformao

OspadresCevitarcuidadosamenteindicandooquedeveserfeitonessecaso.Emmuitasmquinas,amudana
instruesconsiderarapenasologmenor2wbitsdaquantidadededeslocamentoquandomudaumwvalorbits,eassim
aquantidadededeslocamentoefectivamentecalculadocomoKmodW.Porexemplo,emumamquinade32bitsseguindoeste
conveno,osacimadetrsturnossocalculadoscomosefossemporvalores0,4e8,respectivamente,
dandoresultados
lVal 0xFEDCBA98
aval 0xFFEDCBA9
uval 0x00FEDCBA
EstecomportamentonogarantidoparaprogramasC,noentanto,eassimdeslocarquantidadesdevesermantidaamenos
doqueotamanhodapalavra.
Java,poroutrolado,requerespecificamentequeasquantidadesdedeslocamentodevesercalculadoemmodular
formaquetemosmostrado.

Almquestesprecednciadooperadorcomoperaesdedeslocamento
Podesertentadorparaescreveraexpresso1<<2+3<<4,pretendendoquesignifica(1<<2)+(3<<4).Mas,
emC,aexpressoanteriorequivalentea1<<(2+3)<<4,desdeadio(esubtrao)tm
maiorprecednciadoqueturnos.Aregradeassociatividadedaesquerdaparaadireita,emseguida,fazcomqueissosejaentreparnteses
como(1<<(2+3))<<4,dandoumvalorde512,emvezdea52quesedestina.
ObtendoaprecednciadeerradoemexpressesCumafontecomumdeerrosdeprograma,emuitasvezes
estessodifceisdedetectarporinspeo.Emcasodedvida,coloqueentreparnteses!

https://translate.googleusercontent.com/translate_f#202 68/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

PrticaProblema2.16
Enchanatabelaabaixomostraosefeitosdasdiferentesoperaesdedeslocamentosobresingle
quantidadesdebytes.Amelhormaneiradepensaremoperaesdedeslocamentotrabalharcombinrio
representaes.Converterosvaloresiniciaisparabinrio,executeosturnos,edepois
converterdevoltaparahexadecimal.Cadaumadasrespostasdeveserde8dgitosbinriosoudois
dgitoshexadecimais.

(Lgico) (Aritmtica)
X x<<3 x>>2 x>>2
feitio Binrio Binrio feitio Binrio feitio Binrio feitio
0xC3
0x75
0x87
0x66

2.2RepresentaesdeInteiros

Nestaseo,nsdescrevemosdoisbitsmaneirasdiferentespodeserusadoparacodificarintegers
umquespoderepresentarnmerosnonegativos,equepoderepresentar

pgina92

Seo2.2IntegerRepresentaes 57

tipodedadosC Mnimo Mximo


Caracteres 128 127
unsignedchar 0 255
curta[int] 32.768 32.767
unsignedshort[int] 0 65.535
int 2.147.483.648 2,147,483,647
semassinatura[int] 0 4,294,967,295
longa[int] 2.147.483.648 2,147,483,647
unsignedlong[int] 0 4,294,967,295
longlong[int] 9.223.372.036.854.775.808 9.223.372.036.854.775.807
unsignedlonglong[int] 0 18.446.744.073.709.551.615
Figura2.8faixastpicasparaCtiposdedadosintegradoemumamquinade32bits.textoem
colchetesopcional.

tipodedadosC Mnimo Mximo


Caracteres 128 127
unsignedchar 0 255
curta[int] 32.768 32.767
unsignedshort[int] 0 65.535
int 2.147.483.648 2,147,483,647
semassinatura[int] 0 4,294,967,295
longa[int] 9.223.372.036.854.775.808 9.223.372.036.854.775.807
unsignedlong[int] 0 18.446.744.073.709.551.615
longlong[int] 9.223.372.036.854.775.808 9.223.372.036.854.775.807
unsignedlonglong[int] 0 18.446.744.073.709.551.615
Figura2.9faixastpicasparaCtiposdedadosintegradoemumamquinade64bits.textoem
colchetesopcional.

negativo,zero,eosnmerospositivos.Veremosmaistardequeelessofortemente
relacionadotantoemsuaspropriedadesmatemticasesuacuodenveldemquina
taes.Nstambminvestigaroefeitodeaumentaroudiminuirumnmerointeirocodificado
paracaberumarepresentaocomumcomprimentodiferente.

2.2.1TiposdeDadosIntegral
Csuportaumavariedadedeintegraistiposdedadososquerepresentamintervalosfinitosde
nmerosinteiros.EstassomostradasnasFiguras2.8e2.9,juntamentecomosintervalosdevalores
elespodemterparaasmquinas"tpico"de32e64bits.Cadatipopodeespecificarumtamanho
comcarvopalavrachave,curto,longo,oulonglong,bemcomoumaindicaodese

https://translate.googleusercontent.com/translate_f#202 69/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
osnmerosrepresentadossotodosnonegativos(declaradacomosemsinal),oupossivelmente

pgina93

58 Captulo2RepresentaoeManipulaodeInformao

tipodedadosC Mnimo Mximo


Caracteres 127 127
unsignedchar 0 255
curta[int] 32.767 32.767
unsignedshort[int] 0 65.535
int 32.767 32.767
semassinatura[int] 0 65.535
longa[int] 2147483647 2,147,483,647
unsignedlong[int] 0 4,294,967,295
longlong[int] 9.223.372.036.854.775.807 9.223.372.036.854.775.807
unsignedlonglong[int] 0 18.446.744.073.709.551.615
Figura2.10gamasgarantidosparaCtiposdedadosintegral.Textoentrecolchetes
opcional.OspadresCexigemqueostiposdedadostempelomenosestasfaixasdevalores.

negativo(opadro).ComovimosnaFigura2.3,onmerodebytesalocadospara
osdiferentestamanhosvariamdeacordocomtamanhodapalavradamquinaedocompilador.Sediada
sobreasalocaesdebytes,ostamanhosdiferentespermitemdiferentesfaixasdevaloresparaser
representados.Agamanicadependentedamquinaindicadaparaotamanhodesignador
longo.Amaioriadasmquinasde64bitsusarumarepresentaode8bytes,dandoumamuitomaisampla
gamadevaloresdoquearepresentaodequatrobytesutilizadoemmquinasde32bits.
UmacaractersticaimportanteobservarnasFiguras2.8e2.9queosintervalosnoso
simtricaagamadenmerosnegativosestendeseaindamaisumdoqueointervalode
nmerospositivos.Vamosverporqueissoacontecequandoconsideramosquonegativo
nmerossorepresentados.
OspadresCdefinirfaixasmnimasdevaloresquecadatipodedadosdeve
sercapazderepresentar.ComomostradonaFigura2.10,assuasgamassoomesmooumenor
doqueasimplementaestpicasmostradasnasFiguras2.8e2.9.Emparticular,vemos
queelesrequeremapenasumintervalosimtricodenmerospositivosenegativos.Nstambm
verquetipodedadosintpoderiaserimplementadacomumnmerode2bytes,emboraestaseja
principalmenteumretrocessoparaosdiasdemquinasde16bits.Vemostambmqueotamanhodotempopoderia
serimplementadocomnmerosde4bytes,comofrequentementeocaso.Tipodedadosdelongotempo
foiintroduzidocomISOC99,equeexige,pelomenos,umarepresentaode8bytes.

NovoparaC?NmerosassinadosenoassinadosemC,C++eJava
AmbosCesuporteC++assinado(opadro)eosnmerosnoassinados.Javasuportaapenasnmerosassinados.

2.2.2Encodingsnoassinadas
Suponhaquetenhamosumtipodedadosinteirodewpedaos.Nsescrevemosumvetordebitscomoquerx,para
denotamtodoovector,oucomo[XW1,Xw2,...,x0 ],paradesignarosbitsindividuais
dentrodovector.TratarXcomoumnmeroescritoemnotaobinria,obtmseo

pgina94

Seo2.2IntegerRepresentaes 59

Figura2.11

https://translate.googleusercontent.com/translate_f#202 70/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
nmerosemsinal 2
2 =8
=4
exemplosdeW=4.
3
2

Quandoobitdeinobinrio 2 =2
1

representaotemvalor
2 =1
1,quecontribui2iparao
0

valor. 109876543210 11 12 13 14 15 16

[0001]
[0101]
[1011]
[1111]

unsignedinterpretaodosx.NsexpressamosestainterpretaocomoumafunoB2Uw
(para"binrioparanoassinado,"comprimentow):

W1
B2UW(x).= xi 2i (2,1)
i=0
Nestaequao,anotao" .="Significaqueoladoesquerdodefinidocomosendo
igualaodoladodireito.AfunoB2Uwcordasmapasdezeroseuns
decomprimentowparainteirosnonegativos.Comoexemplos,AFigura2.11apresentaomapeamento,
dadaporB2U,apartirdevectoresdebitsparanmerosinteirosparaosseguintescasos:
B2U4([0001])=0.23 +0.22 +0.21 +1.20 =0+0+0+1= 1
B2U4([0101])=0.23 +1.22 +0.21 +1.20 =0+4+0+1= 5
B2U4([1011])=1.23 +0.22 +1.21 +1.20 =8+0+2+1=11
B2U4([1111])=1.23 +1.22 +1.21 +1.20 =8+4+2+1=15
(2,2)
Nafigura,querepresentamcadaposiodebitiporumabarraazulparaadireitaapontandode
comprimento2i .Ovalornumricoassociadocomumvetordebits,emseguida,igualaocombinado
comprimentodasbarrasparaosquaisosvaloresdebitcorrespondentessoum.
Vamosconsiderarointervalodevaloresquepodemserrepresentadosusandowpedaos.o
menosvalordadopelovetordebits[00...0]tervalorinteiro0,eomaior
W1
valordadopelovetordebits[11...1]tervalorinteirouMAXw .=
i=02i =
2w1.Usandoocasode4bitscomoumexemplo,temosuMAX4 =B2U4([1111])=
24 1=15.Assim,afunoB2UWpodeserdefinidocomoummapeamentoB2UW:{0,1}W
{0,...,2W1}.
Arepresentaobinriasemsinaltemapropriedadeimportantequecada
nmerocompreendidoentre0e2W1temumacodificaonicacomoumwvalordebits.Porexemplo,
existeapenasumarepresentaodovalordecimal11comoumnmerosemsinal,de4bits,
ouseja,[1011].Estapropriedadecapturadoemtermosmatemticos,afirmandoque
funoB2Uwumbijectionassociaumvalornicoparacadavectordebit

pgina95

60 Captulo2RepresentaoeManipulaodeInformao

comprimentoWPoroutrolado,cadanmerointeiroentre0e2W1temumbinriooriginal
representaocomoumvetordecomprimentopoucow.

2.2.3complementodedoisEncodings
Paramuitasaplicaes,queremosrepresentarvaloresnegativostambm.Osmaiscom
representaocomputadormondenmerosassinadosconhecidacomocomplementodedois
Formato.Istodefinidopelainterpretaodobitmaissignificativodapalavrater
pesonegativo.NsexpressamosestainterpretaocomoumafunoB2Tw(para"binary
aocomplementodedois"comprimentow):

w2
B2TW(x).=Xw1 2w1 + xi 2i (2.3)
i=0
Obitmaissignificativoxw1 tambmchamadodebitdesinal.Oseu"peso"2
,a w1
negaodoseupesoemumarepresentaosemsinal.Quandoobitdesinalajustadapara
1,ovalorrepresentadonegativo,equandodefinidopara0ovalornonegativo.
Comoexemplos,AFigura2.12apresentaomapeamento,dadaporB2T,apartirdevectoresdebit
inteirosparaosseguintescasos:
B2T4([0001])=0.23 +0.22 +0.21 +1.20 = 0+0+0+1 = 1
B2T4([0101])=0.23 +1.22 +0.21 +1.20 = 0+4+0+1 = 5
https://translate.googleusercontent.com/translate_f#202 71/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
B2T4([1011])=1.23 +0.22 +1.21 +1.20 =8+0+2+1=5
B2T4([1111])=1.23 +1.22 +1.21 +1.20 =8+4+2+1=1
(2,4)
Nafigura,queindicaqueobitdesinaltemumpesonegativomostrandoquequanto
umparaaesquerdaapontandobarracinza.Ovalornumricoassociadocomumvectorpouco
assim,dadapelacombinaodabarracinzentapossvelparaaesquerdaequeapontaparao
direitaapontandobarrasazuis.

Figura2.12 2 =8
3

Complementodedois
exemplosnumricospara 2 =4
2

W=4.Bit3servecomoum 2 =2
1

bitdesinal,eporisso,quando 2 =1
0

definidocomo1,contribui
23=8aovalor.este 8 7 6 5 4 3 2 1 876543210
ponderaomostradocomoum
[0001]
paraaesquerdaapontandocinzabar.
[0101]
[1011]
[1111]

pgina96

Seo2.2IntegerRepresentaes 61

VemosqueospadresdebitsoidnticosparaasFiguras2.11e2.12(bemcomo
Equaespara2.2e2.4),masosvaloressodiferentesquandoobitmaissignificativa1,
desdequeumcasoemquetemopeso8,e,nooutrocaso,tempeso8.
Considereseagamadevaloresquepodeserrepresentadocomoumwtwo'sbit
nmerodecomplemento.Ovalormnimorepresentveldadaporpoucovetor[10...0]
(Definirobitcomopesonegativo,maslimpartodososoutros),tervalorinteiro
TMinw .=2W1.Omaiorvalordadopelovetordebits[01...1](limparobit
w2
compesonegativo,masdefinirtodososoutros),tervalorinteiroTMax .= w 2i =
i=0
2w1 1.Usandoocasode4bitscomoumexemplo,temosTMin4 =B2T4([1000])=
23 =8,eTMax4 =B2T4([0111])=22 +21 +20 =4+2+1=7.
PodemosverqueB2TwummapeamentodospadresdecomprimentobitwaosnmerosBE
tweenTMinweTMaxw,escritocomoB2Tw:{0,1}w{2,...,2 w1 W1 1}.Como

vimoscomarepresentaosemsinal,acadanmerodentrodorepresentvel
gamatemumacodificaonicacomoumwnmerodecomplementodedoisbits.emmathemat
termosdoiCal,dizemosqueafunoB2Twumbijectionassociaumnico
valoracadavetordecomprimentopoucowPoroutrolado,cadanmerointeiroentre2e W1
2w1 1temumarepresentaobinrianicacomoumvetordecomprimentopoucow.

PrticaProblema2.17
Assumindoquew=4,podemosatribuirumvalornumricoparacadapossvelhexadecimal
dgitos,assumindoquerumsemassinaturaouumainterpretaocomplementodedois.Preencha
aseguintetabeladeacordocomessasinterpretaesporescreverodiferentedezero
potnciasdedoisnossomatriosmostradosnasEquaes2.1e2.3:
X
hexadecimal Binrio B2U4(x) B2T4(x)
0xE [1110] 23+22+21=14 23+22+21=2
0x0
0x5
0x8
0xD
0xF

Figura2.13mostraospadresdebitsevaloresnumricosparavriosimportantes
nmerosparatamanhosdepalavradiferentes.Ostrsprimeirosdarasgamasderepresentvel
inteirosemtermosdosvaloresdeUmaxw,TMinw,eTMaxw.Nsenviamos
aestestrsvaloresespeciaisfrequentementenodebatequeseseguiu.Vamossoltaro
subscritowereferemseaosvaloresUMAX,TmineTmaxquandowpodeserinferido
apartirdocontextoounocentralparaadiscusso.
Algunspontosmerecemdestaquesobreessesnmeros.Emprimeirolugar,talcomoobservado

https://translate.googleusercontent.com/translate_f#202 72/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
nasFiguras2.8e2.9,agamadecomplementodedoisassimtrica:|TMin|=
|TMax|+1,isto,noexistequalquercontrapartidapositivaparaTMin.Comoveremos,
issolevaaalgumaspropriedadespeculiaresdecomplementodedoisaritmticaepodeser

pgina97

62 Captulo2RepresentaoeManipulaodeInformao

Tamanhodapalavraw
Valor 8 16 32 64
uMAXw 0xFF 0xFFFF 0xFFFFFFFF 0xFFFFFFFFFFFFFFFF
255 65.535 4,294,967,295 18.446.744.073.709.551.615
TMinw 0x80 0x8000 0x80000000 0x8000000000000000
128 32.768 2.147.483.648 9.223.372.036.854.775.808
TMaxw 0x7F 0x7FFF 0x7FFFFFFF 0x7FFFFFFFFFFFFFFF
127 32.767 2,147,483,647 9.223.372.036.854.775.807
1 0xFF 0xFFFF 0xFFFFFFFF 0xFFFFFFFFFFFFFFFF
0 0x00 0x0000 0x00000000 0x0000000000000000
Figura2.13nmerosimportantes.Ambososvaloresnumricoserepresentaeshexadecimais
somostrados.

afontedeerrosdeprogramassutis.Estaassimetriasurge,porqueametadedopatpouco
andorinhas(aquelescomobitdesinaldefinidocomo1)representamnmerosnegativos,enquantometade(aqueles
comosinalbitdefinidocomo0)representarnmerosnonegativos.Desde0nonegativo,
issosignificaqueelepoderepresentarummenornmeropositivodoquenegativo.Segundo,
ovalormximonoassinadoestapoucomaisdeduasvezesomximodecomplementodedois
valor:Umax=2TMax+1.Todosospadresdebitsquedenotamnmerosnegativos
emcomplementodedoisnotaotornamsevalorespositivosemumarepresentaosemsinal
o.Figura2.13tambmmostraasrepresentaesdeconstantes1e0.Noteque
1TemamesmarepresentaotoUmax:umastringdetodososqueridos.Valornumrico
0representadocomoumaseqnciadetodososzerosemambasasrepresentaes.
OspadresCnonecessitamdeinteirosassinadosparaserrepresentadonotwo's
complementamforma,masquasetodasasmquinasdefazlo.Programadoresqueestocon
causacomamaximizaodeportabilidadeemtodasasmquinaspossveisnodeveassumir
qualquerdeterminadointervalodevaloresrepresentveis,paraalmdoslimitesindicadosnaFi
ure2.10,nemdevemassumirqualquerrepresentaoespecficadenmerosassinados.
Poroutrolado,muitosprogramassoescritosassumindoumcomplementodedois
representaodenmerosassinados,eosintervalosde"tpicos"mostradosnasFiguras2,8
e2,9,eestesprogramassoportteisatravsdeumaamplagamademquinase
compiladores.Oarquivo<limits.h>nabibliotecaCdefineumconjuntodeconstantesdelim
itingosintervalosdediferentestiposdedadosparaonmerointeiromquinaparticularem
queocompiladorestemexecuo.Porexemplo,eledefineconstantesINT_MAX,int_
MIN,eUINT_MAXdescrevendoasfaixasdenmerosinteirosassinadosenoassinados.Paraum
mquinadecomplementodedoisemquetipodedadosinttemwbits,essasconstantes
correspondemaosvaloresdeTMaxW,TMinW,eUmaxw.

Almtiposinteirosdetamanhoexato
Paraalgunsprogramas,essencialqueostiposdedadossercodificadosusandorepresentaescomtamanhosespecficos.
Porexemplo,aoescreverprogramasparapermitirumamquinaparasecomunicaratravsdaInternetdeacordocom
comumprotocolopadro,importantetertiposdedadoscompatveiscomasespecificadaspeloprotocolo.

pgina98

https://translate.googleusercontent.com/translate_f#202 73/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Seo2.2IntegerRepresentaes 63

VimosquealgunstiposdedadosC,especialmentelonga,tmdiferentesfaixasemdiferentesmquinas,e
naverdade,ospadresCapenasespecificamosintervalosmnimosparaqualquertipodedados,enoosintervalosexatos.
Emborapossamosescolherostiposdedadosquesercompatvelcomrepresentaespadronamaioriados
mquinas,nohgarantiadeportabilidade.
AnormaISOC99introduzumaoutraclassedetiposinteirosnastdint.harquivo.Esteficheiro
defineumconjuntodetiposdedadoscomasdeclaraesdoformulriointN_teuintN_t,especificandoNbitsassinado
einteirossemsinal,paradiferentesvaloresdeN.OsvaloresexatosdeNsodependentesdeimplementao,
masamaioriadoscompiladorespermitemvaloresde8,16,32e64.Assim,podemosinequivocamentedeclararumnoassinado,
16bitvarivel,dandolhedigitaruint16_t,eumavarivelassinadode32bitscomoint32_t.
Juntocomestestiposdedadossoumconjuntodemacrosquedefineosvaloresmnimosemximospara
cadavalordeN.EstestmnomesdoINTformaN_MIN,INTN_MAXeUINTN_MAX.

OpadroJavabastanteespecficasobreintervalostipodedadosinteiroerepresen
taes.Elaexigeumarepresentaocomplementodedoiscomosintervalosexatos
mostradaparaocasode64bits(Figura2.9).EmJava,otipodedadosdebytenicochamado
byteemvezdecarvo,enohlongotempotipodedados.Estesrequisitosdetalhados
mentosdestinamseapermitirqueosprogramasJavaparasecomportardeformaidntica,independentementeda
asmquinasdeexecutlos.

Almrepresentaesalternativasdenmerosassinados
Houtrasduasrepresentaespadroparanmerosassinados:

Complementoqueridos:
Esteomesmoqueocomplementodedois,exceptoqueamaioria
bitmaissignificativotempeso(2W11)emvezde2
: W 1


w2
B2OW(x).=Xw1(2w11)+ xi2i
i=0
RegisteMagnitude: Obitmaissignificativoumbitdesinalquedeterminase
osbitsrestantesdevemserdadonegativooupositivo
peso:
(W2 )

B2SW(x).=(1)X . xi2i w 1

i=0

Ambasasrepresentaestmapropriedadecuriosoqueexistemduascodificaesdiferentesdea
nmero0.Paraambasasrepresentaes,[00...0]interpretadocomo0.Ovalorpodeserrepresentado0
noformulriodemagnitudecomo[10...0]eemones'decomplementocomo[11...1].Emboraasmquinasbaseadas
nasrepresentaesones'docomplementoforamconstrudasnopassado,quasetodasasmquinasmodernasusamdoisde
complemento.Veremosqueacodificaodosinalmagnitudeusadocomnmerosdepontoflutuante.
Observeaposiodiferentedeapstrofos:Doisdecomplementocontra'Onescomplemento.Otermo
"Complementodedois"decorredofatodeque,paranonegativoxcalculamosumwrepresentaobit
dexcomo2wx(umnicodois)."Complementoqueridos'"Otermovemdapropriedadequepudermos
computexemestanotaocomo[111...1]x(osmltiplos).

pgina99

64 Captulo2RepresentaoeManipulaodeInformao

12.345 12345 53191


Peso Pouco Valor Pouco Valor Pouco Valor
1 1 1 1 1 1 1
2 0 0 1 2 1 2
4 0 0 1 4 1 4
8 1 8 0 0 0 0
16 1 16 0 0 0 0
32 1 32 0 0 0 0
64 0 0 1 64 1 64
128 0 0 1 128 1 128
256 0 0 1 256 1 256
512 0 0 1 512 1 512
1.024 0 0 1 1.024 1 1.024
2.048 0 0 1 2.048 1 2.048
4.096 1 4.096 0 0 0 0
8.192 1 8.192 0 0 0 0

https://translate.googleusercontent.com/translate_f#202 74/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
32.768
16.384 0 0 1 32.768
16.384 1 16.384
32.768
Total 12.345 12345 53191
Figura2.14representaescomplementodedoisde12.345e12.345,e
representaosemsinalde53.191.Notesequeasduasltimastmpoucoidntico
representaes.

Comoexemplo,considereoseguintecdigo:

1 shortx=12345
2 curtamx=x
3
4 show_bytes((byte_pointer)&x,sizeof(short))
5 show_bytes((byte_pointer)&mx,sizeof(short))
Quandoexecutadoemumamquinabigendian,estecdigoimprime3039ec7cf,indi
candoquextem0x3039representaohexadecimal,enquantomxtemhexadeci
malrepresentao0xCFC7.Expandindolosembinrio,temospadresdebits
[0011000000111001]parax,e[1100111111000111]paramx.ComoaFigura2.14mostra,
Equao2.3rendimentosvaloriza12.345e12.345paraestesdoispadresdebits.

PrticaProblema2.18
NoCaptulo3,vamosolharparaannciosgeradosporumdesmontador,umprogramaque
converteumarquivoexecutveldevoltaaumaformaASCIImaislegvel.Estes
arquivoscontmmuitosnmeroshexadecimais,tipicamenterepresentandovaloresemtwo's
formulriodecomplemento.Sercapazdereconheceressesnmerosecompreenderasua

Pgina100

Seo2.2IntegerRepresentaes 65

significncia(porexemplo,seelessonegativooupositivo)umimportante
habilidade.
ParaaslinhasrotuladasAJ(direita)naseguintelistagem,convertero
valoreshexadecimais(naformadecomplementodedois32bits)mostradosdireitada
nomesdeinstrues(sub,moveadicionar)emseusequivalentesdecimais:
8048337:81ecb8010000 sub $0x1b8,%esp UMA.
804833d:8b5508 mov 0x8(%ebp),%edx
8048340:83c214 adicionar$0x14,%edx B.
8048343:8b8558feffff mov 0xfffffe58(%ebp),%eax C
8048349:0302 adicionar(%EDX),%eax
804834b:898574feffff mov %Eax,0xfffffe74(%ebp) D.
8048351:8b5508 mov 0x8(%ebp),%edx
8048354:83c244 adicionar$0x44,%edx E.
8048357:8b85c8feffff mov 0xfffffec8(%ebp),%eax F.
804835d:8902 mov %Eax,(%EDX)
804835f:8b4510 mov 0x10(%ebp),%eax G
8048362:03450C adicionar0xc(%ebp),%eax H.
8048365:8985ecfeffff mov %Eax,0xfffffeec(%ebp) EU.
804836b:8b4508 mov 0x8(%ebp),%eax
804836e:83c020 adicionar$0x20,%eax J.
8048371:8b00 mov (%Eax),%eax

2.2.4conversesentreassinadosenoassinados
Cpermiteaconversoentrediferentestiposdedadosnumricos.Porexemplo,suponha
varivelxdeclaradacomointeucomonoassinado.Aexpresso(noassinado)x
converteovalordexparaumvalorsemsinal,e(int)Lconverteovalordeu
parauminteiroassinado.Qualdeveseroefeitodevazamentovalorassinadoparanoassinado,
ouviceversa?Dopontodevistamatemtico,podeseimaginarvriosdiferentes
Convenes.Claramente,queremospreservarqualquervalorquepodeserrepresentadoem
ambasasformas.Poroutrolado,aconversodeumvalornegativoparaunsignedpodeproduzir
zero.Convertendoumvalornoassinadoquemuitograndeparaserrepresentadonotwo's
formadecomplementopodeproduzirTMax.ParaamaioriadasimplementaesdeC,noentanto,
arespostaaestaperguntabaseadaemumaperspectivadenveldebits,emvezdeuma
umnumrico.
Porexemplo,considereoseguintecdigo:

1 curto int v=12345


2 unsignedshortuv=(unsignedshort)v

https://translate.googleusercontent.com/translate_f#202 75/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
3 printf("v=%d,uv=%u\n",v,uv)
Quandoexecutadoemumamquinadecomplementodedois,elegeraoseguinteresultado:
v=12.345,uv=53191
Oquevemosaquiqueoefeitodefundiomanterosvaloresdebitsidnticos
masmudaraformacomoessesbitssointerpretados.NsvimosnaFigura2.14quea16bit

Pgina101

66 Captulo2RepresentaoeManipulaodeInformao

representaocomplementodedoisde12345idnticade16bitssemsinal
representaodos53.191.Moldagemdeshortintparaunsignedshortmudouo
valornumrico,masnoarepresentaodebits.
Damesmaforma,considereoseguintecdigo:

1 unsignedu=4294967295u /**UMax_32/
2 int tu=(int)u
3 printf("u=%u,tu=%d\n",u,tu)

Quandoexecutadoemumamquinadecomplementodedois,elegeraoseguinteresultado:

u=4294967295,tu=1

PodemosverapartirdaFiguraque2,13,paraumtamanhodepalavrade32bits,ospadresdebitsrepresen
ing4,294,967,295(Umax32 )emformasemassinaturae1naformadecomplementodedois
soidnticos.Noelencodeunsignedintparaint,obitsubjacenterepresentao
opermaneceomesmo.
EstaumaregrageraldecomoamaioriadasimplementaesClidarcomconverses
entrenmerosassinadosenoassinadoscomomesmotamanhodepalavranumrico
Osvalorespodemmudar,masospadresdebitsno.Vamoscapturaresseprincpio
deumaformamaismatemtico.UmavezquetantoB2UWeB2TWsobijees,eles
terinversasbemdefinidas.DefinirU2BWserB2U 1 W,eT2BWserB2T
1
w.
Estasfunesdoospadresdebitsnoassinadosoucomplementodedoisparaumnumrico
valor.Isto,dadoumnmerointeiroxnointervalode0x<2W,afunoU2BW(x)
danicawbitrepresentaosemsinaldex.Domesmomodo,quandoXno
range2w1 x<2w1 ,AfunoT2Bw(x)danicawbitstwo's
complementararepresentaodex.Observeque,paravaloresnafaixade0x<2 , w1
Ambasestasfunesirproduzirarepresentao,omesmobitmaissignificativo
bitser0,e,portanto,noimportaseestebittempositivaounegativa
peso.
AgoradefinirafunoU2TWcomoU2TW(x).=B2TW(U2BW(x)).Estafuno
levaumnmeroentre0e2W1eproduzumnmeroentre2W1 e
2W1 1,ondeosdoisnmerostemrepresentaesdebitsidnticos,exceptoque
oargumentosemassinatura,enquantoqueoresultadotemumarepresentaocomplementodedois
o.Damesmaforma,paraXentre2 e2WW11 1,afunoT2UW,definidacomo
T2UW(x).=B2UW(T2BW(x)),originaonmerotendoamesmarepresenunsigned
sentaocomoarepresentaodecomplementodedoisdex.
Prossecuodosnossosexemplosanteriores,vemosapartirdaFigura2.14queT2U16(12,345)
=53,191,eU2T16(53,191)=12,345.Isto,opadrode16bitsescritaem
hexadecimalcomo0xCFC7tantoarepresentaocomplementodedoisde12.345
earepresentaosemsinalde53.191.Damesmaforma,apartirdaFigura2.13,vemosque
T2U32(1)=4,294,967,295,eU2T32(4,294,967,295)=1.Ouseja,uMAXtem
amesmarepresentaobitemformanoassinadocomofaz1emcomplementodedois
Formato.
Vemos,ento,queafunoU2Tdescreveaconversodeumsemassinatura
nmeroparaoseuhomlogo2decomplemento,enquantoT2Uconvertenafrente

Pgina102

https://translate.googleusercontent.com/translate_f#202 76/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Seo2.2IntegerRepresentaes 67

direo.ElesdescrevemoefeitodevazamentoentreestestiposdedadosnamaioriaC
implementaes.

PrticaProblema2.19
UsandoatabelaquevocpreencheuquandoResoluodeproblema2.17,preenchaatabelaaseguir
descrevendoafunoT2U4 :

X T2U4(x)
8
3
2
1
0
5

Paraobterumamelhorcompreensodarelaoentreumnmeroassinadoxe
oseuhomlogonoassinadoT2Uw(x),podemosusarofatodequeelestmpoucoidntica
representaesdederivarumarelaonumrica.ComparandoEquaes2.1e
2.3,podemosverqueempoucopadrox,secalcularadiferenaB2Uw(x)
B2Tw(x),assomasponderadasparaosbitsde0aw2iranularsemutuamente,
deixandoumvalor:B2UW(x)B2Tw(X)=Xw1(2W1 2
)=X
W1 w1 2w.Istod
umarelaoB2Uw(X)=Xw1 2W+B2TW(x).Sedeixarmosx=T2Bw(x),temosento

B2UW(T2BW(x))=T2Uw(X)=Xw1 2w+x (2,5)

Estarelaotilpararevelarasrelaesentresemsinaletwo's
complementararitmtica.Narepresentaocomplementodedoisdex,poucoxw1
determinaseounoXnegativo,dando
{
x+2w,x<0
T2Uw(X)= (2,6)
X, x0
Comoexemplos,Figura2.15comparacomofunesB2UeB2Tatribuirvalores
parapadresdebitparaW=4.Paraocasodecomplementodedois,omaissignificativo
bitservecomoobitdesinal,quensdiagramacomoumcinza,barparaaesquerdaapontador.
Paraocasonoassinado,estebittemumpesopositivo,oquevamosmostrarcomoumpreto,
barparaadireitaapontador.Emindodecomplementodedoisparanoassinado,omais
poucosignificativamudaoseupesode8a+8.Comoconseqncia,osvalores
quesonegativosemumaumentoderepresentaocomplementodedoispor24 =16com
umarepresentaosemsinal.Assim,tornase115,1etornase15.
Figura2.16ilustraocomportamentogeraldafunoT2U.Comosemostra,quando
mapearumnmeroassinadocomoseuhomlogosemassinatura,osnmerosnegativossocon
vertidoparagrandesnmerospositivos,enquantoqueosnmerosnonegativospermaneceminalteradas.

Pgina103

68 Captulo2RepresentaoeManipulaodeInformao

2 =8
3

2 =8
3

2 =4
2

2 =2
1

2 =1
0

8 7 6 5 4 3 2 1 0 87654321 109 11 12 13 14 15 16

[1011]
+16

[1111]
+16
Figura2.15Comparandorepresentaesnoassinadosecomplementodedoisparaw=4.
Opesodobitmaissignificativopara8complementodedois,epara8semsinal,
https://translate.googleusercontent.com/translate_f#202 77/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
produzindoumadiferenalquidade16.

Figura2.16 2w
Aconversodedoisde
complementarparanoassinado.
FunoT2Uconvertidos 2wJ1 2wJ1 noassinado
nmerosnegativosparagrande
nmerospositivos.
doisde 0
complemento 0

J2wJ1

PrticaProblema2.20
ExplicarcomoEquation2.6aplicasesentradasnatabelaquevocgeradoquando
Resoluodeproblema2,19.

Indoemoutradireo,queremosderivararelaoentreum
NmerosemsinaluesuacontraparteassinadoU2Tw(u),ambosrepresentampoucotendo
representau=U2BW(U).Nstemos
B2Tw(U2Bw(u))=U2Tw(u)=uw1 2w+u (2.7)
Narepresentaosemsinalderetorno,obituw1 determinaseounoumaior
queouiguala2W1 ,dando
{
voc, u<2w1
U2TW(u)= (2,8)
u2w,u2w1

Pgina104

Seo2.2IntegerRepresentaes 69

Figura2.17 2w
Conversodeun
assinoucontratocomacomdoisde
mentao.funoU2T 2wJ1
noassinado 2wJ1
nmerosconvertidosmaiores
de2w11paranegativo
Valores. 0 0 doisde
complemento

J2wJ1

EstecomportamentoilustradonaFigura2.17.Paraospequenos(<2
nmeros),aconverso
w1
siondenoassinadoparaassinadopreservaovalornumrico.Grande(2)nmeros
w1

soconvertidosemvaloresnegativos.
Resumindo,nsconsideramososefeitosdaconversoemambosossentidosBE
tweensemsinalecomplementodedoisrepresentaes.Paravaloresdexnointervalo
0x<2w1 ,TemosT2Uw(X)=xeU2Tw(X)=x.Isto,osnmerosnesta
GAMArepresentaesnoassinadosecomplementodedoisidnticos.parava
uesforadesteintervalo,asconversesqueradicionarousubtrair2w.Paraaprova
plo,temosT2Uw(1)=1+2w=Umaxwonmeronegativomaisprximo
0mapeiaparaomaiornmerosemsinal.Nooutroextremo,podeseverque
T2Uw(TMinw)=2w1 +2w=2w1 =TMaxw+1onmeromaisnegativo
mapeiaparaumnmeronoassinadoapenasforadointervalodepositivo,complementodedois
nmeros.UsandooexemplodaFigura2.14,podemosverqueT2U16(12,345)=
65,53612+,345=53,191.

2.2.5Assinadovs.noassinadoemC
ComoindicadonasFiguras2.8e2.9,Csuportatantoaritmticaassinadosenoassinados
paratodososseustiposdedadosinteiro.EmboraopadroCnoespecificaumespe
representaolardenmerosassinados,quasetodasasmquinasusamcomplementodedois.
Geralmente,amaioriadosnmerossoassinadosporpadro.Porexemplo,aodeclararuma
constante,como12345ou0x1A2B,ovalorconsideradoassinado.adicionandoca
ter'U'ou'u'comosufixocriaumaconstantesemsinal,porexemplo,12345Uou0x1A2Bu.
Cpermiteaconversoentreunsignedeassinado.Aregraqueacompreenso
deitadarepresentaobitnoalterado.Assim,emumamquinadecomplementodedois,o
efeitoaplicarafunoU2Twquandoaconversodenoassinadoparaassinadoe

https://translate.googleusercontent.com/translate_f#202 78/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
T2Uwquandoaconversodeassinadoparanoassinado,ondewonmerodebits
paraotipodedados.
Asconversespodemacontecerdevidoaconversoexplcita,comonoseguintecdigo:

1 inttx,ty
2 unsignedux,uy
3
4 tx=(int)UX
5 uy=(unsigned)ty

Pgina105

70 Captulo2RepresentaoeManipulaodeInformao

Alternativamente,elespodemacontecerquandoimplicitamenteumaexpressodeumtipoas
assinadocomumavariveldeoutro,comonoseguintecdigo:
1 inttx,ty
2 unsignedux,uy
3
4 tx=ux/*Castparaassinado*/
5 uy=ty/*Castparaunsigned*/
Aoimprimirvaloresnumricoscomprintf,adirectivas%d,%u,e%x
sousadosparaimprimirumnmerocomoumdecimalassinado,umacasadecimalsemsinal,eem
formatohexadecimal,respectivamente.Notesequeprintfnofazerusodequalquertipo
informao,eporissopossvelimprimirumvalordotipointcomadirectiva%ue
umvalordotiponoassinadocomadirectiva%d.Porexemplo,considereoseguinte
cdigo:
1 intx=1
2 unsignedu=2147483648/*2a31*/
3
4 printf("x=%u=%d\n",x,x)
5 printf("u=%u=%d\n",u,u)
Quandoexecutadoemumamquinade32bits,eleimprimeoseguinte:
X=4294967295=1
u=2147483648=2147483648
Emambososcasos,printfimprimeapalavrapelaprimeiravezcomoserepresentasseumnmerosemsinal,
esegundo,comoserepresentasseumnmeroassinado.Podemosveraconverso
rotinasemao:T2U32(1)=Umax32 =232 1eU2T32(231)=231 232 =
231 =TMin32 .
AlgunsdocomportamentopeculiarsurgedevidoaomanuseiodoCdeexpressescon
tenocombinaesdequantidadesassinadosenoassinados.Quandoumaoperao
realizadaemumoperandoassinadoeooutronoassinado,Cimplicitamente
lanaoargumentoassinadoparaunsignedeexecutaasoperaesassumindo
osnmerossononegativo.Comoveremos,estaconvenofazpoucodife
Confernciaparaoperaesaritmticaspadro,maslevaaresultadosnonintuitive
paraosoperadoresrelacionais,comoo<e>.Figura2.18mostraalgunsrelaamostra
expressesadicionaisesuasavaliaesresultantes,assumindoumUSmquinade32bits
ingrepresentaocomplementodedois.Considereacomparao1<0U.Desdea
osegundooperandonoestiverassinado,oprimeiroimplicitamenteconvertidoparaunsignede
daaexpressoequivalentecomparao4294967295U<0U(lembrese
queT2Uw(1)=Umaxw),que,claro,falsa.Osoutroscasospodeserentendido
ficouporanlisessemelhantes.

PrticaProblema2.21
Assumindoqueasexpressessoavaliadasemumamquinade32bitsqueusatwo's
complementararitmtica,preenchaoseguintetabeladescrevendooefeitodefundio
eoperaesrelacionais,noestilodafigura2.18:

Pgina106

https://translate.googleusercontent.com/translate_f#202 79/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Seo2.2IntegerRepresentaes 71

Expresso Tipo Avaliao


21474836471==2147483648U
21474836471<2147483647
21474836471U<2147483647
21474836471<2147483647
21474836471U<2147483647

WebAlmDATA:TMINEscritaTMinemC
NaFigura2.18enoProblema2.21,queescreveucomcuidadoovalordeTMin32como21474836471.Porqu
noapenasescrevlocomoquer2147483648ou0x80000000?Olhandoparaolimits.harquivodecabealhoC,ns
verqueelesusamummtodosemelhantecomotemosqueescreverTMin32eTMax32:

/*Valoresmnimosemximosa'intassinado'podeconter.*/
#defineINT_MAX 2147483647
#defineINT_MIN (INT_MAX1)
Infelizmente,umainteracoentreocuriosoassimetriadarepresentaocomplementodedois
easregrasdeconversodeCforarnosaescreverTMin32destamaneiraincomum.emboraacompreenso
estaquestoobriganosamergulharemumdoscantosmaisobscurosdasnormasdelinguagemC,elevaiajudar
nosaapreciaralgumasdassutilezasdetiposdedadosinteiroserepresentaes.

2.2.6ExpansodaRepresentaoBitdeumnmero
Umaoperaocomumconverterentreinteiroscomtamanhosdepalavradiferentes
mantendoomesmovalornumrico.Naturalmente,istopodenoserpossvel,quando
otipodedadosdestinodemasiadopequenopararepresentarovalordesejado.converso
apartirdeummenorparaumtipodedadosmaior,noentanto,devesersemprepossvel.Converter

Expresso Tipo Avaliao


0==0U noassinado 1
1<0 assinado 1
1<0U noassinado * 0
2147483647>21474836471 assinado 1
2147483647U>21474836471 noassinado * 0
2147483647>(int)2147483648U assinado 1*
1>2 assinado 1
(Unsigned)1>2 noassinado 1
Figura2.18EfeitosderegrasdepromooC.Casosnonintuitivemarcadaspor'*'.Quando
ooperandodeumacomparaonoestassinado,ooutrooperandoimplicitamenteconvertidopara
semsinal.VerWebAlmdedados:tminparaporquensescreverTMin32como21474836471.

Pgina107

72 Captulo2RepresentaoeManipulaodeInformao

umnmeronoassinadoparaumtipodedadosmaior,podemossimplesmenteadicionarzerosesquerdaparaa
representaoestaoperaoconhecidacomoextensodezero.Paraaconversodeumtwo's
complementarnmeroparaumtipodedadosmaior,aregrarealizarumaextensodesinal,
adiodecpiasdobitmaissignificativoparaarepresentao.Assim,senossooriginal
valortemrepresentaobit[xw1,xw2,...,x0],arepresentaoampliada
[xw1,...,xw1,xw1,xw2,...,x0 ].(Nsmostramososinalbitxw1 emazulpara
destacaroseupapelnaextensodesinal.)
Comoexemplo,considereoseguintecdigo:

1 curtasx=12.345 /**12345/
2 unsignedshortUSX=sx/*53191*/
3 int X=sx /**12345/
4 unsignedux=USX /*53191*/
5
https://translate.googleusercontent.com/translate_f#202 80/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
6 printf("sx=%d:\t",sx)
7 show_bytes((byte_pointer)&sx,sizeof(short))
8 printf("USX=%u:\t",USX)
9 show_bytes((byte_pointer)&USX,sizeof(unsignedshort))
10 printf("X =%D:\t",x)
11 show_bytes((byte_pointer)&x,sizeof(int))
12 printf("ux=%u:\t",UX)
13 show_bytes((byte_pointer)&UX,sizeof(unsigned))
Quandoexecutadoemumamquinade32bitsbigendianusandoumarepresentaocomplementodedois
o,estecdigoimprimeasada

sx=12345:c7cf
USX=53191: cfc7
X =12.345:Ffffcfc7
ux=53191: C70000CF
Vemosque,emboraarepresentaocomplementodedoisde12.345eo
representaosemsinalde53.191soidnticasparaumtamanhodepalavrade16bits,quedife
ferparaumtamanhodepalavrade32bits.Emparticular,12.345temrepresentaohexadecimal
0xFFFFCFC7,enquanto53.191temrepresentaohexadecimal0x0000CFC7.opara
merfoisinalestendido16cpiasdobitmaissignificativo1,tendohexa
representaodecimal0xFFFF,foramadicionadoscomoprincipaispedaos.Oltimotem
foiestendidacom16zerosesquerda,tendo0x0000representaohexadecimal.
Attulodeilustrao,aFigura2.19apresentaoresultadodaaplicaodeexpanso
tamanhodapalavraw=3aw=4porextensodesinal.Bitvetor[101]representaovalor
4+1=3.Aplicandoextensodesinaldpoucovetor[1101]representandoo
valor8+4+1=3.Podemosverque,porw=4,ovalorcombinadoda
doisbitsmaissignificativosde8+4=4,correspondenteaovalordobitdesinalpara
w=3.Damesmaforma,vetoresbit[111]e[1111],ambosrepresentamovalor1.
podemosjustificarqueasobrasdeextensosinal?Oquequeremosprovarque
B2Tw+k([x
} w1,...,x
{{ w1},Xw1,xw2,...,x0 ])=B2Tw([xw1,xw2,...,x0 ])
kvezes

Page108

Seo2.2IntegerRepresentaes 73

Figura2.19 2 =8 3

Exemplosdeextensinal
siondew=3aw=4. 2 =4 2

Paraw=4,ocombinado 2 =4 2

pesodossuperiores2bits 2 =2
de8+4=4,harmonizao
1

adobitdesinalpara 2 =1 0

W=3. 8 7 6 5 4 3 2 1 876543210

[101]
[1101]

[111]
[1111]

onde,naexpressodoladoesquerdo,temosfeitokcpiasadicionais
debitxw1 .Aprovasegueporinduoemk.Isto,sepodemosprovarqueosinal
estendendosepor1bitpreservaovalornumrico,entoessapropriedadeirrealizarquando
assinarestendendoseporumnmeroarbitrriodebits.Assim,atarefareduzaprovar
aquele
B2Tw+1([xw1,xw1,xw2,...,x0 ])=B2Tw([xw1,xw2,...,x0 ])

ExpandindoaexpressoesquerdacomaEquao2.3doseguinte:

W1
B2Tw+1([xw1,xw1,xw2,...,x0 ])=xw1 2w+ xi 2i
i=0

w2
=Xw1 2w+xw1 2w1 + xi 2i
i=0

https://translate.googleusercontent.com/translate_f#202 81/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

=Xw1 ( 2w2w1 ) + w2
xi 2i
i=0

w2
=Xw1 2w1 + xi 2i
i=0
=B2Tw([xw1,xw2,...,x0 ])

Apropriedadechaveexploramosque2w2w1 =2w.Assim,oefeitocombinado
1
deadicionarumpoucodepeso2wedeconverteropoucoquetempeso2w1para
serumcompesode2w1preservarovalornumricoinicial.

Page109

74 Captulo2RepresentaoeManipulaodeInformao

PrticaProblema2.22
Mostramquecadaumdosvectoresdebitseguinteumarepresentaocomplementodedois
de5,aplicandoEquao2.3:
A.[1011]
B.[11011]
C.[111011]
Observasequeosvectoresdesegundoeterceirobitpodeserderivadadaprimeiraporsinal
extenso.

Umapenatomadapontoqueaordemrelativadeconversodeum
tamanhodedadosparaoutroeentresemsinaleassinadopodeafetarocomportamentode
umprograma.Considereoseguintecdigo:

1 curtasx=12.345 /*12345 */
2 noassinadosuy=sx /*Mistrio!*/
3
4 printf("uy=%u:\t",uy)
5 show_bytes((byte_pointer)&uy,sizeof(unsigned))
Quandoexecutadoemumamquinabigendian,estecdigofazcomqueoseguinteresultadoparaser
impresso:
uy=4294954951:ffffcfc7
Issomostraquequandoaconversodecurtoesemassinatura,primeiromudaro
tamanhoe,emseguida,apartirassinadoparanoassinado.Isto,(unsigned)SXequivalentea
(Semsinal)(int)sx,avaliandoa4294954951,no(noassinado)(semassinatura
short)sx,queavaliaa53.191.Naverdade,estaconvenoexigidopela
normasC.

PrticaProblema2.23
ConsidereasseguintesfunesC:
fun1int(semsinalword){
retorno(int)((palavra<<24)>>24)
}

fun2int(semsinalword){
return((int)palavra<<24)>>24
}
Assumirestassoexecutadasemumamquinacomumtamanhodepalavrade32bitsqueusatwo's
complementararitmtica.Consideresetambmmudanasqueodireitodevaloresassinadossoper
formadoaritmeticamente,enquantocertasmudanasdevaloressemsinalsorealizadasdeformalgica.

https://translate.googleusercontent.com/translate_f#202 82/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Pgina110

Seo2.2IntegerRepresentaes 75

A.Fillnatabelaaseguirmostraoefeitodestasfunesparavrios
argumentosdeexemplo.Vocvaiacharquemaisconvenientetrabalharcomumhexa
representaodecimal.Bastalembrarquedgitoshexadecimaisde8aFtmasua
bitsmaissignificativosiguala1.

W fun1(w) fun2(w)
0x00000076
0x87654321
0x000000C9
0xEDCBA987

B.descreverempalavrasoclculotilcadaumadestasfunesrealiza.

2.2.7Nmerostruncando
Suponhaque,emvezdeestenderumvalorcombitsextras,reduzimosonmero
debitsquerepresentamumnmero.Istoocorre,porexemplo,nocdigo:

1 int x=53191
2 =(short)xcurtosx/**12345/
3 int y=sx /**12345/

Emumamquinade32bitstpico,quandolanouxparasercurto,quetruncaro
32bitsintparaseruminteirocurtode16bits.Comovimosantes,essepadrode16bitso
representaocomplementodedoisde12.345.Quandojogarestadevoltaparaint,
extensodesinalirdefiniroaltoordem16bitsparaqueridos,produzindoo32bittwo's
complementararepresentaode12345.
Quandotruncarumwnmerodebitsx=[xw1,xw2,...,x0 ]aumknmerodebits,
nsdeixamoscairoaltofimwkpedaos,dandoumvetordebitsx=[xk1,xk2,...,x0 ].
Truncarumnmeropodealteraroseuvalorumaformadetransbordamento.Vamosagorainvestigar
ovalornumricoseroresultado.Paraumnmerosemsinalx,oresultadodetruncagem
parakosbitsequivalenteacomputaoxmod2k.Istopodeservistoatravsdaaplicaoda
operaodemduloparaEquao2.1:
[W1 ]

B2Uw([xw1,xw2,...,x0 ])mod2k= xi 2i mod2k
i=0
[K1 ]

= xi 2i mod2k
i=0

k1
= xi 2i
i=0
=B2UK([xK1,xk2,...,x0 ])

Pgina111

76 Captulo2RepresentaoeManipulaodeInformao

Nestederivao,fazemosusodapropriedadeque2
K1 K1 i mod2k=0paratodoik,

eessa i=0xi 2i i=02i =2k1<2k.


Paraumnmerocomplementodedoisx,umargumentosimilarmostraque
B2TW([XW1,Xw2,...,x0 ])mod2k=B2UK([xK1,xk2,...,x0 ]).Isto,xmod
2kpodeserrepresentadoporumnmerosemsinaldeterrepresentaoemnveldebit
[XK1,xk2,...,x0 ].Emgeral,noentanto,nstratamosonmerotruncadocomosendo
assinado.IssotervalornumricoU2Tk(xmod2k).
Resumindo,oefeitodotruncamentoparanmerosnoassinados

B2UK([xK1,xk2,...,x0 ])=B2UW([XW1,Xw2,...,x0 ])mod2K,(2.9)

https://translate.googleusercontent.com/translate_f#202 83/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

enquantoqueoefeitodecomplementodedoisnmeros

B2TK([xK1,xk2,...,x0 ])=U2TK(B2UW([XW1,Xw2,...,x0 ])mod2k)(2.10)

PrticaProblema2.24
Suponhaquetruncarumvalorde4bits(representadopordgitoshexadecimaisde0aF)auma3
bitvalor(representadocomodgitoshexadecimaisde0a7).Preenchaatabelaabaixomostrando
oefeitodotruncamentoparaestaalgunscasos,emtermosdeasemsinaletwo's
complementarinterpretaesdessespadresdebits.

feitio noassinado complementodedois


Original Truncado Original Truncado Original Truncado
0 0 0 0
2 2 2 2
9 1 9 7
B 3 11 5
F 7 15 1

ExplicarcomoEquaes2.9e2.10seaplicamaessescasos.

2.2.8ConselhossobreAssinadovs.Unsigned
Comovimos,aconversoimplcitadeassinadoparaleadsnoassinadosparaalgunsno
comportamentointuitivo.caractersticasnonintuitivemuitasvezeslevamaprogramarbugs,eos
envolvendoasnuancesdeconversoimplcitapodeserespecialmentedifcildever.Desdeo
moldagemserealizarsemqualquerindicaoclaranocdigo,osprogramadoresmuitasvezes
ignorarosseusefeitos.
Osdoisproblemasprticosaseguirilustramalgunsdoserrossutisque
podesurgirdevidoaconversoimplcitaeotipodedadosnoassinado.

Pgina112

Seo2.2IntegerRepresentaes 77

PrticaProblema2.25
Considereoseguintecdigoquetentaresumiroselementosdeumarraya,onde
onmerodeelementosdadapelocomprimentodoparmetro:

1 /*ATENO:Esteumcdigodebuggy*/
2 sum_elementsflutuador(floata[],ocomprimentonoassinado){
3 inti
4 resultadoflutuador=0
5
6 for(i=0i<=comprimento1i++)
7 resultado+=a[i]
8 retornarresultado
9 }

Quandoexecutadocomcomprimentoargumentoiguala0,estecdigodeveretornar0.0.Emvez
encontrarumerrodememria.Explicarporqueissoacontece.Mostrarcomoestecdigopode
sercorrigido.

PrticaProblema2.26
Estdadaaatribuiodeescreverumafunoquedeterminaseum
cordamaiordoqueooutro.Vocdecidefazerusodafunodebibliotecacadeia
strlencomaseguintedeclarao:

/*Prottipodefunodebibliotecastrlen*/
size_tstrlen(constchar*s)

Aquiestasuaprimeiratentativadeafuno:

/*Determinarsestringsmaiordoquecadeiat*/
https://translate.googleusercontent.com/translate_f#202 84/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
/*ATENO:Estafunobuggy*/
strlongerint(char*s,char*t){
regressostrlen(s)strlen(t)>0
}

Quandovoctestarissoemalgunsdadosdaamostra,ascoisasnoparecemfuncionarmuito
certo.Vocinvestigaredeterminarquetipodedadossize_tdefinido(via
typedef)emarquivostdio.hcabealhoparaserunsignedint.
A.Paraquecasosserestafunoproduzumresultadoincorreto?
B.Expliquecomoesseresultadoincorretoacontece.
C.Mostracomocorrigirocdigoparaqueelefuncionedeformaconfivel.

Pgina113

78 Captulo2RepresentaoeManipulaodeInformao

Almvulnerabilidadedesegurananogetpeername
Em2002,osprogramadoresenvolvidosnoprojetodesistemasoperacionaisdecdigoabertoFreeBSDpercebeuque
suaimplementaodafunodebibliotecagetpeernametinhaumavulnerabilidadedesegurana.Asimplificada
versodoseucdigofoialgocomoisto:

1 /*
2 *Ilustraodevulnerabilidadecdigosemelhanteaoencontradoem
3 *ImplementaodegetpeernamedoFreeBSD()
4 */
5
6 /*Declaraodebibliotecadefunomemcpy*/
7 void*memcpy(*destvazio,void*src,size_tn)
8
9 /*RegiodememriaKernelsegurandoacessvelaousuriodedados*/
10 #defineKSIZE1024
11 carbonizarkbuf[KSIZE]
12
13 /*Cpia,nomximo,maxlenbytesdaregiodokernelparabufferdousurio*/
14 intcopy_from_kernel(void*user_dest,intmaxlen){
15 /*Contagemdeoctetoslenmnimodetamanhodebufferemaxlen*/
16 intlen=KSIZE<maxlen?KSIZE:maxlen
17 memcpy(user_dest,kbuf,len)
18 voltarlen
19 }
Nestecdigo,nsmostramosoprottipoparamemcpyfunodebibliotecanalinha7,queprojetadoparacopiarum
determinadonmerodebytesndeumaregiodememriaparaaoutra.
Ocopy_from_kernelfuno,comeandonalinha14,projetadoparacopiaralgunsdosdadosteno
retidospelakerneldosistemaoperacionalaumaregiodesignadadememriaacessvelaousurio.Amaioria
dasestruturasdedadosmantidaspelokernelnodeveserlegvelporumusurio,umavezquepodemcon
informaessensveisTainsobreoutrosusuriosecercadeoutrospostosdetrabalhoemexecuonosistema,masaregio
comokbuffoidestinadoaserumqueousuriopoderialer.Oparmetromaxlendestinaseaser
ocomprimentodobufferatribudopeloutilizadoreindicadasporuser_destargumento.oclculo
nalinha16,emseguida,tornasedequenomaisbytessocopiadosdoqueestodisponveisnodeorigemoua
bufferdedestino.
Suponhamos,porm,quealgumprogramadormaliciosoescrevecdigoquechamacopy_from_kernelcom
umvalornegativodemaxlen.Emseguida,oclculomnimonalinha16ircalcularestevalorparalen,
queirentoserpassadocomooparmetronparamemcpy.Notese,noentanto,queoparmetrondeclaradocomo
tertipodedadossize_t.Estetipodedadosdeclarado(viatypedef)nastdio.harquivodebiblioteca.Tipicamente
definidoparaserunsignedintemmquinasde32bits.Desdeargumentonassinado,memcpytratar
locomoumnmeromuitogrande,positivoetentativadecopiarquemuitosbytesdaregiodokernelparao
tampodousurio.Acpiaquemuitosbytes(pelomenos231)noirrealmentefuncionar,porqueoprogramavai
encontrarendereosinvlidosnoprocesso,masoprogramapodelerasregiesdamemriadokernel
paraoqualnoestautorizado.

https://translate.googleusercontent.com/translate_f#202 85/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina114

Seo2.3IntegerAritmtica 79

Podemosverqueesteproblemasurgedevidoincompatibilidadeentreostiposdedados:emumslugaro
parmetrodecomprimentoassinadoemoutrolugarquenoestassinado.Taisincompatibilidadespodeserumafontedeerros
e,comomostraesteexemplo,podeatlevaravulnerabilidadesdesegurana.Felizmente,nohouverelataram
casosemqueumprogramadortinhaexploradoavulnerabilidadenoFreeBSD.Elesemitiramumavisodesegurana,
"FreeBSDSA02:38.signederro",aconselhandoosadministradoresdosistemasobrecomoaplicarumpatchquefaria
removeravulnerabilidade.Obugpodesercorrigidodeclarandomaxlenparmetroparacopy_from_kernel
paraserdotiposize_t,parasercoerentecomoparmetrondememcpy.Tambmdevedeclararvarivellocal
leneovalorderetornoparaserdotiposize_t.

Vimosvriasmaneirasemqueascaractersticassutisdearithsemsinal
metecoe,especialmente,aconversoimplcitadeassinadoparanoassinado,podelevara
errosouvulnerabilidades.Umamaneiradeevitartaiserrosnuncausarunsigned
nmeros.Naverdade,algunsoutrosdoquedeapoioCinteirossemsinalidiomas.lhos
tementeessesoutrosprojetistasdalinguagemviramloscomomaisproblemasdoqueelesso
quevaleapena.Porexemplo,Javasuportaapenasassinadointeiros,eissorequerqueeles
serimplementadocomcomplementodedoisaritmtica.Aopedeslocamentoparaadireitanormal,
ator>>garantidopararealizarumamudanadearitmtica.Ooperadorespecial>>>
definidopararealizarumdeslocamentoparaadireitalgico.
Valoressemsinalsomuitoteisquandoqueremospensarempalavrascomoapenascol
lectionsdebitsseminterpretaonumrica.Istoocorre,porexemplo,quando
aembalagemdeumapalavracombandeirasdescrevendovriascondiesbooleanas.Osendereosso
naturalmente,semassinatura,paraqueosprogramadoresdesistemasdeencontrartiposnoassinadosparasertil.
valoresnoassinadostambmsoteisnaimplementaodepacotesmatemticospara
aritmticamodulareparaaaritmticamultiprecision,noqualosnmerossorepresen
ressentiapormatrizesdepalavras.

2.3IntegerAritmtica

Muitosprogramadoresiniciantessosurpreendidosaodescobrirqueaadiodedoisnmepositiva
berspodeproduzirumresultadonegativo,equeacomparaox<ypodeproduzirumdiferente
resultarqueoxycomparao<0.Estaspropriedadessoartefatosdonafinita
turadaaritmticacomputador.Entenderasnuancesdaaritmticacomputador
podeajudarosprogramadoresaescrevercdigomaisconfivel.

2.3.1noassinadoAdio
Consideredoisinteirosnonegativosxey,talque0x,y2W1.Cadaumdos
essesnmerospodeserrepresentadoporWnmerosdebitssemsinal.Secomputarmossua
soma,noentanto,temosumagamapossvel0x+y2w1 2.Representandoesta
somapoderiaexigirw+1pedaos.Porexemplo,aFigura2.20mostraumgrficodafuno
x+yquandoxeytmrepresentaesde4bits.Osargumentos(mostradosnahor
eixosizontal)variamde0a15,masasomavariade0a30.Aformado
funoumplanoinclinado(afunolinearemduasdimenses).Sensfossemos

Pgina115

80 Captulo2RepresentaoeManipulaodeInformao

alminteger

https://translate.googleusercontent.com/translate_f#202 86/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
32
28
24
20
16 14
12 12
10
8 8
4 6
0 4
0 2 2
4 6 8 10 0
12 14
Figura2.20Integerdisso.Comumtamanhodepalavrade4bits,asomapoderiaexigir5bits.

paramanterasomacomoumwnmero+1bitseadicionloparaoutrovalor,podemosre
quirew+2bits,eassimpordiante.Istocontinuou"ainflaotamanhodapalavra"significaquenopodemos
colocarqualquerobrigadodotamanhopalavranecessriopararepresentarplenamenteosresultadosdaarith
operaesMETIC.Algumaslinguagensdeprogramao,taiscomoLisp,naverdadesuportam
infinitaprecisoaritmticaparapermitirarbitrria(dentrodoslimitesdamemria
mquina,claro)integeraritmtica.Maiscomumente,linguagensdeprogramao
operaesdesuportedeprecisofixaaritmticas,e,portanto,como"alm"e
"Multiplicao"diferemdesuasoperaesdecontrapartidasobreinteiros.
aritmticasemsinalpodeservistocomoumaformadearitmticamodular.noassinado
Adicionalmenteequivalenteacalcularasomamdulo2w.Estevalorpodesercom
putedsimplesmentedescartarobitdealtaordemnowrepresentao+1bit
x+y.Porexemplo,considerarumarepresentaodeumnmerode4bitscomx=9ey=12,
comrepresentaesbit[1001]e[1100],respectivamente.Asuasoma21,tendo
umarepresentaode5bits[10101].Massedescartarobitdealtaordem,temos[0101],
ouseja,ovalordecimal5.Combinacomomodvalor2116=5.
Emgeral,podemosverque,sex+y<2w,aprincipalpouconow+1bit
representaodasomaseriguala0,e,portanto,descartarissonovaimudar
ovalornumrico.Poroutrolado,se2Wx+y<2W1 ,Olderbitem

Pgina116

Seo2.3IntegerAritmtica 81

Figura2.21 x+y
Relaoentreinteger 2w+1 Transbordar
adioesemsinal
Adio.Quandox+yest x+uy
superiora2W1,o 2w
somatransborda.

0 Normal

owrepresentaodasoma+1bitseriguala1,e,portanto,descartlo
equivalenteasubtracode2Wapartirdasoma.Estesdoiscasosestoilustradosnafigura
2.21.Issonosdarumvalornointervalode0x+y2w<2w+1 2w=2w,que
precisamenteomdulo2Wsomadexey.Vamosdefiniraoperao+
wpara
u

argumentosxeytalque0x,y<2wcomo
{
x+y, x+y<2w
x+Wy=
u (2.11)
x+y2w,2wx+y<2w+1
EsteprecisamenteoresultadoqueentraremCaoexecutaradioemdoiswbits
valoresnoassinados.
Umaoperaoaritmticaditoparatransbordarquandooresultadointeirocompletonopode
caberdentrodoslimitesdetamanhodepalavradotipodedados.ComoEquao2.11indica,estouro
ocorrequandoosdoisoperandosresumira2Woumais.AFigura2.22mostraumgrficodo
funodissonoassinadoparaotamanhodapalavraw=4.Asomacalculadamodulo
24 =16.Quandox+y<16,nohexcesso,ex+ 4 ysimplesmentex+y.Isto
L

mostradacomoaregioqueformaumplanoinclinadocomortulo"Normal".Quandox+y16,
osestourosdisso,teroefeitodediminuindoasomapor16.Este
comoaregioformandoumplanoinclinadocomortulo"Overflow".
AoexecutarprogramasemC,estourosnososinalizadascomoerros.svezes,
noentanto,poderamosdesejarparadeterminarseestouroocorreu.Paraaprova
https://translate.googleusercontent.com/translate_f#202 87/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
plo,suponhaquecalculars.=X+Wy,equeremosdeterminarsesiguala
u

x+y.Afirmamosqueestourotenhaocorridoseesomenteses<x(ouequivalentemente,
s<y).Paraverisso,observasequex+yx,e,portanto,sesnoestouro,vamos
certamentetersx.Poroutrolado,sesfeztransbordamento,temoss=x+y2W.
Dadoquey<2w,temosy2w<0,e,portanto,s=x+(y2w)<x.Nanossa
exemploanterior,vimosque9+ 412=5.Nspodemosverqueestourotenhaocorrido,umavezque
u

5<9.

PrticaProblema2.27
Escreverumafunocomoseguinteprottipo:

/*Determinarseosargumentospodemseradicionadossemoverflow*/
intuadd_ok(semsinalx,ynoassinado)
Estafunodeveretornar1seargumentosxeypodemseradicionadossemcausar
transbordar.

Pgina117

82 Captulo2RepresentaoeManipulaodeInformao

Almsemsinal(4bitpalavra)

Transbordar

16
14 Normal

12
10
8 14
12
6
10
4 8
2 6
0 4
0 2 2
4 6 0
8 10 12 14
Figura2.22dissonoassinado.Comumtamanhodepalavrade4bits,aadiorealizada
mdulo16.

Almmodularformaumaestruturamatemticaconhecidacomoumgrupoabeliano,
nomeadoapsomatemticodinamarqusNielsHenrikAbel(18021829).isso
comutativa(queondeaparte"abeliano"vemem)eassociativotem
umelementodeidentidade0,ecadaelementotemuminversoaditivo.Consideremos
oconjuntodewnmerosnoassinadosbitscomoperaodeadio+
w.Paracadavalordex,
u

devehaveralgumvalor Wxtalque Wx+WX=0.QuandoX=0,oaditivo


u u u

inversaclaramente0.Parax>0,considereovalor2wx.Observesequeessenmero
estnagamade0<2WX<2W,e(x+2WX)mod2w=2Wmod2w=0.Assim,
queoinversodoXsob+ w.Estesdoiscasos,levaraseguinteequaopara
L

0x<2w: {
X, x=0
WX= u (2.12)
2wx,x>0

PrticaProblema2.28
Podemosrepresentarumpadrodecomprimentodebitsw=4comumnicodgitohex.Paraum
unsignedinterpretaodessesdgitos,useaEquao2.12parapreencheroseguinte

https://translate.googleusercontent.com/translate_f#202 88/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina118

Seo2.3IntegerAritmtica 83

quadrocomosvaloreseasrepresentaesdebits(emhex)doaditivoassinado
inversosdosdgitosmostrado.
X 4 X
u

feitio Decimal Decimal feitio


0
5
8
D
F

2.3.2complementodedoisAdio
Comaadiocomplementodedois,temosdedecidiroquefazerquandooresultado
oumuitogrande(positiva)oumuitopequeno(negativo)pararepresentar.integerdada
valoresXeYnagama2W1 x,y2W1 1,suasomaestcompreendidanointervalo
2wx+y2w2,potencialmenteexigindow+1bitspararepresentarexatamente.Como
antes,evitamossempreemexpansotamanhosdedadostruncandoarepresentaoparaw
BITS.Oresultadonotofamiliarmatematicamentecomoadiomodular,noentanto.
Owsomabitcomplementodedoisdedoisnmerostemexatamenteomesmoemnveldebit
representaocomoasomanoassinado.Naverdade,amaioriadoscomputadoresusamamesmamquina
instruesparaexecutarqualqueradionoassinadoouassinado.Assim,podemosdefinir
AlmcomplementodedoisdetamanhodepalavraW,denotadocomo+
w,emoperandosxeyT

detalmodoque2W1 x,y<2
Como
W1

x+Wy.=U2Tw(T2Uw(x)+
T
WT2UW(Y))
u (2.13)
PelaEquao2.5,podemosescreverT2Uw(x)comoxw1 2w+x,eT2Uw(y)comoyw1 2w+
y.Utilizandoapropriedadeque+
Wsimplesmenteadiomdulo2W,juntamentecomoprop
u

ertiesdaadiomodular,temosento
x+Wy=U2Tw(T2Uw(x)+
T
WT2UW(Y))
u

=U2Tw[(xw1 2w+x+yw1 2w+y)mod2w]


=U2Tw[(x+y)mod2w]

Ostermosxw1 2weyw1 2wabandonamumavezqueelesiguala0modulo2w.


Paraentendermelhorestaquantidade,vamosdefinirzcomoasomainteiroz.=X+y,
.=Zmod2W,eZcomoZ.=U2TW(z).Ovalordezigualax+ y.Ns
ZcomoZ T

W
podedividiraanliseemquatrocasos,talcomoilustradonaFigura2.23:
1.2wz<2w1 .Entoteremosz=z+2w.Issoda0z<2w1 +
2w=2w1 .ExaminandoEquao2.8,vemosquezestnafaixadetalformaque
Z=z.Estecasoreferidocomoestouronegativo.Nsadicionamosdois
nmerosnegativosxey(queanicamaneiraquepodemosterz<2)e w1
obteveumnonegativoresultadoz=x+y+2w.

Pgina119

84 Captulo2RepresentaoeManipulaodeInformao

Figura2.23 x+y
Relaoentreinteger 2w estouropositivo
ecomplementodedois Caso4
Adio.Quandox+yest x+ty
inferiora2W1,Hsim 2wJ1 2wJ1

https://translate.googleusercontent.com/translate_f#202 89/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
umestouronegativo.Quando
quemaiordoque2W1+1, caso3
humestouropositivo. 0 Normal 0
Caso2
2WJ1 2WJ1
Caso1
2w estouronegativo

2.2w1 z<0.Emseguida,teremosnovamentez=z+2w,dando2w1 +2w=


2w1 z<2w.ExaminandoEquao2.8,vemosquezdetalalcanceque
z=z2w,e,portanto,z=z2w=z+2w2w=z.Isto,atwo's
complementosomazigualaonmerointeirosomax+y.
3.0z<2w1 .Entoteremosz=z,dando0z<2w1 ,E,portanto,Z=
Z=z.Maisumavez,ocomplementodedoissomazigualsomainteirox+y.
4.2w1 z<2w.Teremosnovamentez=z,dando2w1 z<2w.Masneste
gamatemosz=z2w,dandoz=x+y2w.Esteprocessoreferidocomo
estouropositivo.Nsadicionamosdoisnmerospositivosxey(queanica
forma,podemosterz2w)Eobteveumresultadonegativoz=x+y2
1 w.

Pelaanliseanterior,mostramosquequandoaoperao+ t
Waplicada
paraosvaloresxeynointervalo2w1 x,y2w1 1,temos
benzico.
x+y2w,2w1 x+yestouropositiva
x+ y= x+y, 2W1 x+y<2w1 Normal (2,14)
W
T

x+y+2w,x+y<2W1 estouronegativo
Attulodeilustrao,aFigura2.24apresentaalgunsexemplosde4bitscomplementodedois
Adio.Cadaexemplomarcadopelocasoquelhecorrespondena
derivaodaEquao2.14.Noteseque24 =16,e,portanto,osrendimentosdeestouronegativos
umresultadomais16doqueasomainteiroepositivodeexcessoproduzumresultadomenos16.
Nsincluemrepresentaesdenveldebitdosoperandoseoresultado.Observeaquilo
oresultadopodeserobtidoatravsdarealizaodeadiobinriadosoperandose
truncandooresultadodequatrobits.
Figura2.25ilustradissocomplementodedoisdetamanhodapalavraw=4.A
operandosvariarentre8e7.Quandox+y<8,complementodedoisalm
temumacapacidadeinsuficientenegativa,fazendocomqueomontanteaserincrementadopor16.Quando8
x+y<8,orendimentodeadiodex+y.Quandox+y8,aadiotemumnegativo
estouro,fazendocomqueomontanteaserdiminudoem16.Cadaumadessastrsfaixas
formaumplanoinclinadonafigura.

Page120

Seo2.3IntegerAritmtica 85

X Y x+y x+4 YT Caso


8 5 13 3 1
[1000][1011] [10011] [0011]
8 8 16 0 1
[1000][1000] [10000] [0000]
8 5 3 3 2
[1000][0101] [11101] [1101]
2 5 7 7 3
[0010][0101] [00111] [0111]
5 5 10 6 4
[0101][0101] [01010] [1010]

Figura2.24exemplosdeadiodecomplementodedois.Arepresentaodenvelpoucode
asomacomplementodedoisde4bitspodeserobtidaatravsdarealizaodeadiobinriado
operandosetruncandooresultadopara4bits.

Almcomplementodedois(4bitpalavra)

Normal
Negativo
https://translate.googleusercontent.com/translate_f#202 90/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
8 transbordar transbordar
Positivo
6
4
2
0 6
J2 4
J4 2
0
J6 J2
J8 J4
J8 J6 J6
J4 J2
0 J8
2 4 6
Figura2.25complementodedoisadio.Comumtamanhodepalavrade4bits,aadiopodeterum
estouronegativoquandox+y<8eumestouropositivoquandox+y8.

Pgina121

86 Captulo2RepresentaoeManipulaodeInformao

Equao2.14tambmpermitenosidentificaroscasosemquetenhaocorridoestouro.
Quandoambosxeysonegativos,masx+
y0,temosestouronegativo.Quando
W
t

ambosxeysopositivos,masx+
Wy<0,temosestouropositivo.
t

PrticaProblema2.29
Preenchaaseguintetabelanoestilodafigura2.24.Dosvaloresinteirosde
osargumentosde5bits,osvaloresdeambososseusinteiroesomascomplementodedois,
arepresentaodenveldebitdasomacomplementodedois,eocasodo
derivaodaEquao2.14.
X Y x+y x+5 YT Caso

[10100] [10001]

[11000] [11000]

[10111] [01000]

[00010] [00101]

[01100] [00100]

PrticaProblema2.30
Escreverumafunocomoseguinteprottipo:
/*Determinarseosargumentospodemseradicionadossemoverflow*/
inttadd_ok(intx,inty)
Estafunodeveretornar1seargumentosxeypodemseradicionadossemcausar
transbordar.

PrticaProblema2.31
Seucolegadetrabalhoficaimpacientecomasuaanlisedascondiesdeestourode
Almcomplementodedoiselheapresentaaseguinteimplementao
detadd_ok:
/*Determinarseosargumentospodemseradicionadossemoverflow*/
/*ATENO:Estecdigobuggy.*/
inttadd_ok(intx,inty){
intsoma=x+y
retorno(somax==y)&&(somay==x)
}
Vocolhaparaocdigoerir.Explicaroporqu.

https://translate.googleusercontent.com/translate_f#202 91/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina122

Seo2.3IntegerAritmtica 87

PrticaProblema2.32
Vocestatribudaatarefadeescrevercdigoparaumtsub_okfuno,comargumentos
XeY,queirretornar1seXYcomputaonocausartransbordamento.Tendoacabado
escritoocdigoparaProblema2.30,vocescreveoseguinte:

/*Determinarseosargumentospodesersubtradosemoverflow*/
/*ATENO:Estecdigobuggy.*/
inttsub_ok(intx,inty){
regressotadd_ok(X,Y)
}

Paraquevaloresofxandywillestafunodarresultadosincorretos?Escrevendoumacorreta
versodestafunodeixadacomoumexerccio(Problema2.74).

2.3.3complementodedoisNegao
Podemosverquecadanmeroxnointervalo2w1 x<2w1temumaditivoin
versosob+ t ,Podemosverqueoseuinversoaditivo
Wcomosesegue.Emprimeirolugar,paraX=2W1
simplesmentex.Ouseja,nstemos2 w1 w1 ex+
<X<2 t X=x+x=0.Para
W
X=2W1 =TMinW,poroutrolado,x=2W1 nopodeserrepresentadacomoumw
nmerodebit.Afirmamosqueestevalorespecialtemsecomooinversoaditivosob
+w.Ovalorde2w1
t t +w2W1dadapelaEquaoterceirocasode2,14,umavez
2w1 +2w1 =2w.Istod2W1
t+w2W1=2W+2W=0.Deste
anlise,podemosdefiniraoperaodenegaocomplementodedois t
wparaxno
range2w1 x<2w1 Como
{
2w1 ,X=2W1
WX=
t
X, (2,15)
x>2W1

PrticaProblema2.33
Podemosrepresentarumpadrodecomprimentodebitsw=4comumnicodgitohex.Paraumatwo's
complementarinterpretaodessesdgitos,preenchaatabelaaseguirparadeterminar
osinversosaditivosdosdgitosmostrado:

X 4 X
t

feitio Decimal Decimal feitio


0
5
8
D
F

Oquevocobservasobreospadresdebitsgeradospelocomplementodedois
esemsinal(Problema2.28)negao?

Pgina123

88 Captulo2RepresentaoeManipulaodeInformao

WebAlmDATA:TNEGrepresentaodenvelBitdecomplementodedoisnegao

https://translate.googleusercontent.com/translate_f#202 92/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Existemvriasmaneirasinteligentededeterminaranegaocomplementodedoisdeumvalorrepresentadono
nveldebit.Estastcnicassoteis,comoquandoseencontraa0xfffffffavalorquando
depurarumprograma,eelesemprestaminsightssobreanaturezadarepresentaocomplementodedois.
Umatcnicaparaarealizaodecomplementodedoisnegaononveldebitparacomplementarosbits
e,emseguida,incrementaroresultado.EmC,podemosafirmarque,paraqualquervalorinteirox,computarasexpresses
xe~x+1vaidarresultadosidnticos.
Aquiestoalgunsexemploscomumtamanhodepalavrade4bits:

X ~x incr(~x)
[0101] 5 [1010] 6 [1011] 5
[0111] 7 [1000] 8 [1001] 7
[1100] 4 [0011] 3 [0100] 4
[0000] 0 [1111] 1 [0000] 0
[1000] 8 [0111] 7 [1000] 8
Paraonossoexemploanterior,sabemosqueocomplementode0xf0x0,eocomplementode0xa
0x5,eassim0xfffffffaarepresentaodecomplementodedoisde6.
Umasegundaformaderealizaranegaocomplementodedoisdeumnmeroxbaseadonaseparaodobit
vetoremduaspartes.LetKseraposiomaisdireitado1,demodoquearepresentaodenveldebitsdeXtemo
formar[XW1,Xw2,...,xk1,1,0,...0].(Issopossveldesdequex=0)Anegaoentoescrito
naformabinriacomo[~xw1,~xw2,...~xk1,1,0,...,0].Isto,cadabitcomplementaresquerdade
posiodebitk.
Nsilustraressaidiacomalgunsnmerosde4bits,ondesedestacamopadromaisdireita1,0,...,0
emitlico:

X x
[1100] 4 [0100] 4
[1000] 8 [1000] 8
[0101] 5 [1011] 5
[0111] 7 [1001] 7

2.3.4Multiplicaosemsinal
Inteirosxeynointervalode0x,y2w1podeserrepresentadocomowbitsun
nmerosassinado,masoseuprodutoXYpodevariarentre0e(2w1)2 =
22w2w1 +1.Issopoderiaexigirqualquercoisacomo2wbitspararepresentar.Emvezdisso,un
multiplicaoassinadoemCdefinidoparaproduzirowvalorbitdadopelabaixaordem
wbitsdo2wbitsdoprodutointeiro.Pelaequao2.9,estepodeservistocomoequiva
alentparacalcularomdulodoproduto2w.Assim,oefeitodaWbitsemsinal
operaodemultiplicao* W u

x*WY=(x.y)mod2W
u (2.16)

Pgina124

Seo2.3IntegerAritmtica 89

2.3.5complementodedoisMultiplicao
Nmerosinteirosxeynagamade2W1 x,y2W1 1podeserrepresentadacomoW
bitnmeroscomplementodedois,masseuprodutoxypodevariarentre2w1.
(2w1 1)=22w2 +2w1 e2w1.2W1 =22w2 .Istopoderequerer
muitoscomo2wbitspararepresentaremcomplementodedoisformmaioriadoscasosseencaixam
em2w1bits,masocasoespecialde22w2 exigeaplena2wpedaos(paraincluir
umbitdesinalde0).Emvezdisso,amultiplicaoassinadoemCgeralmenterealizadapor
truncandoo2wbitprodutodewpedaos.Pelaequaode2,10,oefeitodoWbit
complementodedoismultiplicaooperao* t
W
x*Wy=U2Tw((x.y)mod2w)
t (2,17)

Afirmamosquearepresentaodenvelpoucodofuncionamentodoprodutoidntica
tantoparaamultiplicaosemsinalecomplementodedois.Isto,dadovetoresbitx
eydecomprimentow,arepresentaodenveldebitdoprodutonoassinadoB2U W w(x)* u

B2UW(Y)idnticarepresentaodenveldebitsdocomplementodedois
produtoB2Tw(x)*WB2TW(Y).Istoimplicaqueoaparelhopodeutilizarumnicotipo
t

deinstruodemultiplicaoparamultiplicardoisnmerosinteirosassinadosenoassinados.
Comoilustraes,Figura2.26apresentaosresultadosdamultiplicaodiferentede3bits
nmeros.Paracadapardeoperandosdenveldebit,realizamostantosemsinale
multiplicaocomplementodedois,produzindoprodutosde6bits,emseguida,truncaresses
para3bits.Oprodutotruncadosemsinalsempreigualxymod8.Opouco

https://translate.googleusercontent.com/translate_f#202 93/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
representaesdenveldeambososprodutostruncadossoidnticasparaambossemsinal
ecomplementodedoismultiplicao,emboraasrepresentaesde6bitscompletos
diferem.
Paramostrarqueosbitsdebaixaordemdosdoisprodutos(semsinaledoisde
complementar)soidnticos,deixex=B2TW(x)ey=B2TW(Y)serotwo's
complementarvaloresindicadosporestespadresdebit,edeixarX=B2UW(x)ey=
B2Uw(y)serosvaloresnoassinados.ApartirdaEquao2.5,temosX=X+XW1 2W,

Modo X Y Xy truncadaxy
noassinado 5 [101] 3 [011] 15 [001111] 7 [111]
compdois. 3 [101] 3 [011] 9 [110111] 1 [111]
noassinado 4 [100] 7 [111] 28 [011100] 4 [100]
compdois. 4 [100] 1 [111] 4 [000100] 4 [100]
noassinado 3 [011] 3 [011] 9 [001001] 1 [001]
compdois. 3 [011] 3 [011] 9 [001001] 1 [001]
Figura2,26exemplosdemultiplicaodetrsbitsnoassinadosecomplementodedois.
Emboraasrepresentaesdenveldebitsdosprodutoscheiospodemserdiferentes,aquelesdo
produtostruncadossoidnticos.

Pgina125

90 Captulo2RepresentaoeManipulaodeInformao

ey=y+yw1 2w.Calculandooprodutodestesvaloresdemdulo2Wdo
Segue:
(x.y)mod2w=[(x+xw1 2w).(y+yw1 2w)]mod2w (2,18)
=[Xy+(xw1y+yw1x)2w+xw1yw1 22w]mod2w
=(X.Y)mod2W
Todosostermoscompeso2wabandonardevidoaooperadormdulo,eassimns
mostraramqueabaixaordemWbitsdeXYex.ysoidnticos.

PrticaProblema2.34
Enchanatabelaaseguirmostraosresultadosdamultiplicaodiferentede3bitsnme
bros,noestilodafigura2.26:
Modo X Y Xy truncadaxy
noassinado [100] [101]
compdois. [100] [101]
noassinado [010] [111]
compdois. [010] [111]
noassinado [110] [110]
compdois. [110] [110]

Podemosverqueaaritmticaecomplementodedoisaritmticasemsinalmais
wnmerosdebitssoisomrficasasoperaes+
w,w,e* wtemexatamenteomesmo
u
u u
efeitononveldebitcomofazer+ t
w,w,e* w.
t t

PrticaProblema2.35
Estdadaaatribuioparadesenvolverocdigoparaumafunoqueirtmult_ok
determinarsedoisargumentospodemsermultiplicadossemcausarestouro.
Aquiasuasoluo:
/*Determinarseosargumentospodemsermultiplicadossemoverflow*/
inttmult_ok(intx,inty){
intP=x*y
/*OuXigualazero,oudividindopeloPxdy*/
voltar!x||p/x==y
}
estecdigoparatestarumnmerodevaloresdexey,eparecefuncionar
devidamente.Seucolegadetrabalhodesafiao,dizendo:"Seeunopuderusarsubtraopara
testarsedissotransbordou(vejaoProblema2.31),entocomovocpodeusar
divisoparatestarseamultiplicaotransbordou?"

https://translate.googleusercontent.com/translate_f#202 94/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Conceberumajustificaomatemticadasuaabordagem,aolongodaseguinte
Linhas.Emprimeirolugar,argumentamqueocasox=0tratadacorretamente.Casocontrrio,considere

Pgina126

Seo2.3IntegerAritmtica 91

wBITnmerosx(x=0),Y,p,eq,emqueporesultadodarealizaotwo's
multiplicaodocomplementoemXeY,eQoresultadodadivisopporx.

1.Mostraquexy,oprodutointeirodexey,podeserescritasobaforma
XY=p+t2W,emquet=0seesomenteseoclculodeptransborda.
2.Mostrequeppodeserescritanaformap=xq+r,onde|r|<|x|.
3.Mostrequeq=yseesomenteser=t=0.

PrticaProblema2.36
Paraocasoemquetipodedadosinttem32bits,elaborarumaversodotmult_ok(Prob
2,35LEM)queutilizaaprecisodotipodedadosdecomprimentolongode64bits,semusar
diviso.

AlmvulnerabilidadedesegurananabibliotecaXDR
Em2002,foidescobertoqueocdigofornecidoporSunMicrosystemsparaimplementarabibliotecaXDR,uma
instalaoamplamenteusadoparacompartilharestruturasdedadosentreprogramas,tinhaumavulnerabilidadedeseguranadecorrentes
dofatodequeamultiplicaopodetransbordarsemqualqueravisoaserdadoaoprograma.
Cdigosemelhantecontendoavulnerabilidademostradoabaixo:

1 /*
2 *Ilustraodevulnerabilidadecdigosemelhanteaoencontradoem
3 *BibliotecaXDRdoSol.
4 */
5 copy_elementsvoid*(void*ele_src[],intele_cnt,size_tele_size){
6 /*
7 *Alocarbufferparaobjetosele_cnt,cadaumdosele_sizebytes
8 *Ecopiarapartirdelocaisdesignadospelaele_src
9 */
10 void*result=malloc(ele_cnt*ele_size)
11 if(resultado==NULL)
12 /*Mallocfalhou*/
13 retornarNULL
14 void*prximos=resultar
15 inti
16 for(i=0i<ele_cnti++){
17 /*ObjetoCopiariparaodestino*/
18 memcpy(aolado,ele_src[i],ele_size)
19 /*PonteiroMoverparaaregiodememriaprximo*/
20 prxima+=ele_size
21 }
22 retornarresultado
23 }

Pgina127

92 Captulo2RepresentaoeManipulaodeInformao

https://translate.googleusercontent.com/translate_f#202 95/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Oscopy_elementsfunoprojetadoparacopiarestruturasdedadosele_cnt,cadaumaconsistindodeele_
tamanhobytesemumbufferalocadopelafunonalinha10.Onmerodebytesnecessriocalculado
comoele_cnt*ele_size.
Imaginese,noentanto,queumprogramadormaliciosochamaessafunocomele_cntsendo1.048.577
(220+1)esendoele_size4096(212).Emseguida,amultiplicaonalinha10vaitransbordar,causandoapenas
4096bytesaseralocada,emvezdeos4,294,971,392bytesnecessriosparamanteressaquantidadededados.Olao
comeandonalinha16vaitentarcopiartodososbytes,aultrapassagemdofinaldobufferalocado,
e,portanto,corrompendooutrasestruturasdedados.Issopoderiafazercomqueoprogramadeixedefuncionaroudeoutraforma
comportassemmal.
OcdigoSunfoiusadoporquasetodosossistemasoperacionaise,emtaisprogramasamplamenteutilizadoscomo
InternetExplorereosistemadeautenticaoKerberos.AComputerEmergencyResponseTeam
(CERT),umaorganizaodirigidapeloSoftwareEngineeringInstitutedaCarnegieMellonparacontrolarasegurana
vulnerabilidadesebrechas,emitidoconsultivo"CA200225",emuitasempresascorreramparacorrigirasua
cdigo.Felizmente,nohouvefalhasdeseguranarelatadoscausadosporestavulnerabilidade.
Avulnerabilidadesemelhanteexistiaemmuitasimplementaesdocallocfunodebiblioteca.estestm
jfoicorrigido.

PrticaProblema2.37
EstdadaatarefaderemendaravulnerabilidadenocdigoXDRmostradoacima.
Estdecidireliminarapossibilidadedeamultiplicaotransbordante(em32
mquinadebit,pelomenos),calculandoonmerodebytesparaalocarusandootipodedados
longlongsemsinal.Vocsubstituirachamadaoriginalparamalloc(linha10)comosegue:

longonoassinadoasizelongo=
ele_cnt*(longlongsemsinal)ele_size
void*result=malloc(asize)

A.Serqueoseucdigodefornecerqualquermelhoriaemrelaoaooriginal?
B.Comovocalterarocdigoparaeliminaravulnerabilidade,assumindo
tipodedadossize_tomesmoqueintnoassinado,eestesso32bits?

2.3.6MultiplicandoporConstantes
Namaioriadasmquinas,ainstruomultiplicaointeirabastantelento,querequer10ou
maisciclosdeclock,enquantooutrasoperaes,taisinteiroscomoadio,subtrao
o,asoperaesdenveldebit,edeslocandorequeremapenas1cicloderelgio.Comoumaconse
quncia,umaotimizaoimportanteusadoporcompiladoresatentativadesubstituir
multiplicaesporfatoresconstantescomcombinaesdemudanaeadioope
Aes.Vamosprimeiroconsiderarocasodemultiplicadorporumapotnciade2,eemseguida
generalizarestaparaconstantesarbitrrias.
Deixexserointeirosemsinalrepresentadopelopadrodebits[xw1,xw2,...,x0 ].
Ento,paraqualquerk0,reivindicamosarepresentaodenvelpoucodex2kdadapor

Pgina128

Seo2.3IntegerAritmtica 93

[XW1,Xw2,...,x0,0,...,0],ondekzerosforamadicionadosparaadireita.este
propriedadepodeserderivadousandoaEquao2.1:

W1
B2UW+K([XW1,Xw2,...,x0,0,...,0])= xi 2i +k
[i=0
W1 ]

= xi 2i .2k
i=0
=X2k

ParaK<W,quepodetruncarovectorpoucodeslocadoparaserdecomprimentoW,qued
[XwK1,xwk2,...,x0,0,...,0].PelaEquao2.9,estevectorbittemnumrica
valorx2kmod2w=x* u
W2k.Assim,pornoassinadosvarivelx,aexpressoCx<<k
equivalenteax*pwr2k,ondepwr2kiguala2k.Emparticular,podemoscalcular
pwr2kcomo1U<<k.
Porumraciocniosemelhante,podemosmostrarqueparaumnmerocomplementodedoisx
Tendoempadrodebits[XW1,Xw2,...,x0 ],equalquerknafaixade0K<W,pouco
padro[xwK1,...,x0,0,...,0]serarepresentaocomplementodedois

https://translate.googleusercontent.com/translate_f#202 96/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
dex*W2k.Portanto,paraassinadosxvarivel,aexpressoCx<<kequivalente
ax*pwr2k,ondepwr2kiguala2k.
t

Notesequeamultiplicaoporumapotnciade2podecausarestourocomqualquerunsigned
ouaritmticacomplementodedois.Nossoresultadomostraque,mesmoassim,teremosa
mesmoefeito,deslocando.
Dadoqueamultiplicaointeiromuitomaiscarodoqueodeslocamentoeacrescentando:
muitoscompiladoresCtentarremovermuitoscasosemqueumnmerointeirosermulti
manejadoporumaconstantecomcombinaesdemudana,adioesubtrao.Para
exemplo,suponhaqueumprogramacontmaexpressox*14.Reconhecendoque14=
23 +22 +21 ,ocompiladorpodereescreveramultiplicaocomo(x<<3)+(x<<2)+
(X<<1),substituindoumamultiplicaocomtrsturnoseduasadies.Osdois
computaesirproduziromesmoresultado,independentementedexnoassinadoou
complementodedois,emesmoqueamultiplicaocausariaumasobrecarga.(Este
podesermostradoapartirdaspropriedadesdearitmticainteira.)Mesmomelhor,ocompilador
Tambmpossvelusarapropriedade14=24 21 parareescreveramultiplicaocomo(x<<4)
(x<<1),exigindoapenasdoisturnoseumasubtrao.

PrticaProblema2.38
ComoveremosnoCaptulo3,ainstruoleapoderealizarclculosde
aforma(um<<K)+b,ondek0,1,2,ou3,eb0oualguns
valordoprograma.Ocompiladorutilizafrequentementeestainstruopararealizarmultiplicaes
porfactoresconstantes.Porexemplo,podemoscalcularcomoum3*(uma<<1)+um.
Considerandoseoscasosemqueb0ouigualaum,etodososvalorespossveisde
k,oquemltiplosdeumpodesercalculadacomumanicainstruolea?

Pgina129

94 Captulo2RepresentaoeManipulaodeInformao

Generalizandodonossoexemplo,considereatarefadegerarcdigopara
a*expressoxK,paraalgumaconstanteK.Ocompiladorpodeexpressarobinrio
representaodeKcomoumasequnciaalternadadeunsezeros:

[(0...0)(1...1)(0...0)...(1...1)].

Porexemplo,14podeserescritacomo[(0...0)(111)(0)].Considereseumprazodemaisde
posiodebitnataposiodebitm(nm).(Paraocasode14,temosn=3
em=1.)podemoscalcularoefeitodestesbitsnoprodutoutilizandoumdos
duasformasdiferentes:

FormulrioA:
(x<<n )+(x<<n 1 )+...+(x<<m)
FormulrioB:
(x<<N1 )(x<<m)

Somandoosresultadosdecadacorrida,somoscapazesdecalcularx*Kcom
quaisquermultiplicaes.Naturalmente,otradeoffentreousodecombinaesde
mudando,acrescentando,esubtraindoversusumainstruonicamultiplicaodepende
sobreasvelocidadesrelativasdeestasinstrues,eestespodemseraltamentedemquina
PendenteAmaioriadoscompiladoressexecutarestaotimizaoquandoumpequenonmerode
mudanas,acrscimosesubtraessuficiente.

PrticaProblema2.39
ComopoderamosmodificaraexpressoparaaformaBparaocasoemposiodebitn
obitmaissignificativo?

PrticaProblema2.40
ParacadaumdosseguintesvaloresdeK,encontrarmaneirasdeexpressarx*Kusandoapenaso
determinadonmerodeoperaes,ondepodemosconsiderarambososacrscimosesubtrao
esdetercustocomparvel.Vocpodeprecisarusaralgunstruquesparaalmdasimples
regrasBformaAetemosconsideradoatagora.

K mudanasAdicionar/Subs
Expresso
6 2 1
31 1 1
6 2 1
55 2 2

PrticaProblema2.41
https://translate.googleusercontent.com/translate_f#202 97/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Paraumacorridade1scomeandonaposiopouconataposiodebitm(nm),vimos
quepodegerarduasformasdecdigo,AeB.Comoseocompiladordecidir
qualaformadeusar?

Page130

Seo2.3IntegerAritmtica 95

K >>K(binrio) Decimal 12340/2k


0 0011000000110100 12340 12340,0
1 0001100000011010 6170 6170,0
4 0000001100000011 771 771,25
8 0000000000.110.000 48 48.203125
Figura2.27Dividindoosnmerosnoassinadosporpotnciasde2.Osexemplosilustramcomo
realizandoumdeslocamentoparaadireitalgicaporktemomesmoefeitoquedividindopor2k e,emseguida,
arredondamentoemdireoazero.

2.3.7Dividindoporpotnciasdedois
divisointeiranamaioriadasmquinasaindamaislentodoqueintegermultiplication
exigindo30oumaisciclosdeclock.Dividindoporumapotnciade2podetambmserrealizada
utilizandooperaesdedeslocamento,masusamosumdeslocamentoparaadireitaemvezdeumdeslocamentoparaaesquerda.Osdoisdife
ferentesturnoslgicaearitmticadeserviraessepropsitoparanoassinadoetwo's
complementarosnmeros,respectivamente.
Divisointeirasemprearredondaemdireoazero.Parax0ey>0,oresultado
deveserx/y,emqueparaqualquernmerorealum,umdefinidocomosendoanica
integerumtalmodoqueumaum<a+1.Comoexemplos,3.14=3,3.14=4,e
3=3.
Considereoefeitodaaplicaodeumdeslocamentoparaadireitalgicaporkaumnmerosemsinal.
Afirmamosissodomesmoresultadoquedividindopor2k.Comoexemplos,Figura2.27
mostraosefeitosdeserealizarcertasmudanaslgicassobreumarepresentaode16bits
12.340pararealizaradivisopor1,2,16e256.Oszerosdeslocadodaesquerdaso
mostradoemitlico.Mostramostambmoresultadoqueobteriaseofizssemosessasdivises
comaaritmticareal.Estesexemplosmostramqueoresultadodatrocaconsistentemente
arredondaemdireoazero,comoaconvenoparaadivisointeira.
Paramostraressarelaoentreocertodesviolgico,edividindoporumpoder
de2,deixexserointeirosemsinalrepresentadopelopadrodebits[xw1,xw2,...,x0 ],
eKsernointervalode0K<w.Deixexseronmeronoassinadocomwk
bitrepresentao[xw1,xw2,...,xk],exseronmeronoassinadocom
krepresentaobit[XK1,...,x
W1 0 ].Afirmamosquex=x/2
W1 k.Paraveristo,por
K1
Equao2.1,quetemx= i=0xi 2i ,x= i=kxi 2i k,ex=
K1 i=0xi 2i .Ns
pode,portanto,escreverxcomox=2kx+x.Observeque0x i=02 i =2k1,e

portanto,0x<2k,oqueimplicaquex/2k=0.Portanto,x/2k=x+x/2k=
x+x/2k=x.
Realizandoumamudanalgicadireitodevetordebits[xw1,xw2,...,x0 ]porkrendimentos
ovectordebits

[0,...,0,Xw1,Xw2,...,xk]

Estevetordebitstemnumricovalordex.Portanto,paranoassinadosvarivelx,oC
expressox>>kequivalenteax/pwr2k,ondepwr2kiguala2k.

Pgina131

https://translate.googleusercontent.com/translate_f#202 98/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

96 Captulo2RepresentaoeManipulaodeInformao

K >>K(binrio) Decimal 12.340/2K


0 1100111111001100 12340 12.340,0
1 1110011111100110 6170 6170,0
4 1111110.011.111.100 772 771,25
8 1111111111.001.111 49 48,203125

Figura2.28Aplicandodeslocamentoparaadireitaaritmtica.Osexemplosilustramqueaaritmtica
deslocamentoparaadireitasemelhantedivisoporumapotnciade2,excetoqueelearredondaparabaixo,emvezde
emdireoazero.

Agora,considereoefeitoderealizarumaaritmticadeslocamentoparaadireitaemumtwo's
nmerodecomplemento.Paraumnmeropositivo,temos0comoobitmaissignificativo,
eassimoefeitoomesmoqueparaumdeslocamentoparaadireitalgico.Assim,umdireitoaritmtica
deslocamentoporkamesmaqueadivisopor2kparaumnmeropositivo.Comoumexemplode
umnmeronegativo,aFigura2.28mostraoefeitodaaplicaodedeslocamentoparaadireitaaritmtica
paraumarepresentaode16bitsde12340paradiferentesquantidadesdedeslocamento.Comopodemosver,o
resultadoquaseomesmoquedividindoporumapotnciade2.Paraocasoquandonenhumarredondamento
necessria(K=1),oresultadocorrecta.Masquandooarredondamentonecessria,deslocando
fazcomqueoresultadoserarredondadoparabaixoemvezdeparazero,comodeveser
aconveno.Porexemplo,aexpresso7/2devecederemvezde34.
Vamosentendermelhoroefeitodaaritmticadireitomudandoecomons
podeuslopararealizaradivisoporumapotnciade2.Letxserocomplementodedois
representadoporinteiropadrodebits[XW1,Xw2,...,x0 ],ekestarnointervalo
0k<w.Deixexseronmerocomplementodedoisrepresentadapelawk
bocados[xw1,xw2,...,xk],exserounsignednmerorepresentadopela
baixaordemkpedaos[xk1,...,x0 ].Porumaanlisesemelhantedocasosemsinal,ns
temx=2kx+x,e0x<2k,dandox=x/2k.Almdisso,observaseque
deslocandovectorbit[xw1,xw2,...,x0 ]direitoaritmeticamenteporkproduzovetordebits

[Xw1,...,xw1,xw1,xw2,...,xk]

queaextensodesinalwkbitsparaWbitsde[XW1,Xw2,...,xk].
Assim,estemudoupoucovectorarepresentaocomplementodedoisdex/2k.
EstaanliseconfirmanossosresultadosapartirdosexemplosdaFigura2.28.
Parax0,ouquandonenhumarredondamentonecessria(X=0),aanlisemostraque
esteresultadodeslocadoovalordesejado.Parax<0ey>0,noentanto,oresultadode
divisointeiradeveserx/y,ondeporqualquernmerorealum,adefinidocomo
seroniconmerointeiroumtalmodoqueuma1<aum.Ouseja,adivisointeiradeve
resultadosnegativosrodadaparacimaemdireoazero.Assim,mesmomudandoumnmeronegativo
peloknoequivalentedividindoopor2kquandoarredondamentoocorre.Estaanlisetambm
confirmanossosresultadosapartirdoexemplodaFigura2.28.
Nspodemoscorrigirparaestearredondamentoindevidode"polarizao"ovalorantes
deslocamento.Estatcnicaexploraapropriedadequex/y=(x+y1)/ypara
nmerosinteirosxeytaisquey>0.Comoexemplos,quandox=30ey=4,ns
temx+y1=27,e30/4=7=27/4.Quandox=32ey=4,

Pgina132

Seo2.3IntegerAritmtica 97

K Vis 12.340+Vis(binrio) >>K(binrio) Decimal 12.340/2K


0 0 1100111111001100 1100111111001100 12340 12.340,0
1 1 1100111111001101 1110011111100110 6170 6170,0
4 15 110.011.111.1011011 1111110.011.111.101 771 771,25
8 255 11.010.00011001011 1111111111.010.000 48 48,203125

Figura2.29divisodenmeroscomplementodedoisporpotnciasde2.Aoadicionarumvis
antesdodeslocamentoparaadireita,oresultadoarredondadoparazero.

temosx+y1=29,e32/4=8=29/4.Paraverqueessarelao
contm,emgeral,suponhamosquex=ky+R,emque0r<y,dando(x+y1)/Y=
k+(r+y1)/y,eassim(x+y1)/y=k+(r+y1)/y.Oltimotermo
seriguala0quandor=0,1equandoR>0.Ouseja,pelaadiodeumapolarizaodeY1a
xe,emseguida,oarredondamentodadivisoparabaixo,teremoskquandoydividexe
k+1emcontrrio.Assim,parax<0,seadicionarprimeiro2k1axantesdedeslocarcerto,ns
irobterumresultadocorretamentearredondado.
https://translate.googleusercontent.com/translate_f#202 99/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Estaanlisemostraque,paraumcomplementodedoismquinausandoaritmtica
mudanascertas,aexpressoC

(?X<0X+(1<<k)1:x)>>k
equivalenteaX/pwr2k,ondepwr2kiguala2k.
AFigura2.29demonstracomoaadiodepolarizaoapropriadoantesderealizar
odeslocamentoparaadireitaaritmticafazcomqueoresultadoasercorrectamentearredondado.Noterceiro
coluna,mostramosoresultadodeadicionarovalordepolarizaopara12.340,comomenork
bocados(aquelesqueserdeslocadoparaadireita)emitlico.Nspodemosverisso
osbitsparaaesquerdadequeestespodemounopodemserincrementado.Paraocasoondenenhuma
arredondamentonecessria(K=1),adicionandoapolarizaoafectaapenasosbitsquesodeslocadasfora.
Paraoscasosemquenecessriooarredondamento,acrescentandoqueapolarizaofazcomqueosbitssuperiorespara
serincrementado,demodoqueoresultadoserarredondadoparazero.

PrticaProblema2.42
Escreverumadiv16funoqueretornaovalorx/16paranmerointeiroargumentox.Seu
funonodeveusaradiviso,mdulo,multiplicao,qualquercondicionais(seou
?:),Quaisqueroperadoresdecomparao(porexemplo,<,>,ou==),ouquaisquerloops.Vocpodeassumir
quetipodedadosint32bitsdecomprimentoeusaumarepresentaocomplementodedois,e
queasmudanascertassorealizadasaritmeticamente.

Vemosagoraqueadivisoporumapotnciade2podeserimplementadousandolgicaou
aritmticosturnoscertas.Estaprecisamentearazopelaqualosdoistiposdemudanascertasso
disponvelnamaioriadasmquinas.Infelizmente,estaabordagemnogeneralizarpara
divisoporconstantesarbitrrias.Aocontrriodemultiplicao,nopodemosexpressardiviso
porconstantesarbitrriasKemtermosdedivisoporpotnciasde2.

Pgina133

98 Captulo2RepresentaoeManipulaodeInformao

PrticaProblema2.43
Nocdigoaseguir,omitimosasdefiniesdeconstantesMeN:

#defineM /*Mistrionmero1*/
#defineN /*Mistrionmero2*/
intarith(intx,inty){
resultadoint=0
result=x*M+y/N/*MeNsonmerosdemistrio.*/
retornarresultado
}

NscompilouestecdigoparavaloresparticularesdeMeN.Ocompiladoropti
mizadosamultiplicaoedivisousandoosmtodosquediscutimos.o
aseguirumatraduodocdigodemquinageradodevoltaparaC:

/*Traduodecdigodemontagemparaarith*/
intoptarith(intx,inty){
intt=x
x<<=5
x=t
if(y<0)y+=7
y>>=3/*Deslocamentoaritmtico*/
voltarx+y
}

QuaissoosvaloresdeMeN?

2.3.8ConsideraesfinaissobreIntegerAritmtica
Comovimos,aaritmtica"inteiro"realizadaporcomputadoresrealmenteum
formadearitmticamodular.Otamanhodapalavrafinitousadapararepresentarnmeroslimites
agamadepossveisvaloreseasoperaesresultantespodemtransbordar.Nstemos
tambmviquearepresentaocomplementodedoisforneceumamaneirainteligentedeser
capazderepresentarambososvaloresnegativosepositivos,enquantoutilizandoomesmonveldebit
implementaescomosousadosparaexecutararitmticaoperaesnoassinados,taiscomo
adio,subtrao,multiplicaoedivisoaindatmidnticasou
comportamentosdenveldebitmuitosemelhantesseosoperandosestoemnoassinadooutwo's
https://translate.googleusercontent.com/translate_f#202 100/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
formulriodecomplemento.
VimosquealgumasdasconvenesdalinguagemCpoderenderalguns
resultadossurpreendentes,eestespodemserfontesdeerrosquesodifceisdereconhecerou
Compreendo.Temosvistoespecialqueotipodedadosnoassinado,enquantoconcepo
tualmentesimples,podelevaracomportamentosqueosprogramadoresaindaexperientes
noespere.Vimostambmqueestetipodedadospodemsurgirdeformainesperada,
porexemplo,aoescreverconstantesinteiraseaoinvocarrotinasdebiblioteca.

Pgina134

Seo2.4pontoflutuante 99

PrticaProblema2.44
Suponhaqueestamosexecutandocdigoemumamquinade32bitsusandocomplementodedoisarith
metecoparavaloresassinados.mudanascertassorealizadasaritmeticamenteparavaloresassinados
elogicamenteparavaloresnoassinados.Asvariveissodeclaradaseinicializadocomo
Seguinte:
intx=foo() /*Valorarbitrrio*/
inty=bar() /*Valorarbitrrio*/

noassinadosUX=x
unsigneduy=y
ParacadaumadasseguintesexpressesC,ou(1)argumentamqueverdadeiro(ava
atespara1)paratodososvaloresdexey,ou(2)dosvaloresdexeyparaoqualelafalsa
(Avaliaa0):
A.(x>0)||(X1<0)
B.(X&7)!=7||(X<<29<0)
C.(x*x)>=0
D.x<0||x<=0
E.x>0||x>=0
F.x+y==uy+UX
G.x*~+uyy*UX==x

2.4pontoflutuante

UmarepresentaodepontoflutuantecodificanmerosracionaisdaformaV=x2y.
tilparaarealizaodeclculosenvolvendonmerosmuitograndes(|V|0),
nmerosmuitoprximosde0(|V|1),emaisgeralmentecomoumaaproximaoverdadeira
aritmtica.
Atosanos1980,todososfabricantesdecomputadorinventadosuasprpriasconvenes
parasabercomonmerosdepontoflutuanteforamrepresentadoseosdetalhesdasoperaes
realizadasobreeles.Almdisso,elesmuitasvezesnosepreocuparmuitocomo
aprecisodasoperaes,avisualizaodavelocidadeefacilidadedeimplementaocomosendo
maiscrticodoqueprecisonumrica.
Tudoissomudouporvoltade1985comoadventodopadroIEEE754,um
padrocuidadosamentetrabalhadapararepresentarnmerosdepontoflutuanteeaope
esexecutadassobreeles.Esteesforocomeouem1976sobopatrocniodaIntel
comodesigndo8087,umchipqueforneceuapoiodepontoflutuanteparao8086
processador.ElescontrataramWilliamKahan,professordaUniversidadedaCalifrnia,
Berkeley,comoconsultorparaajudaraprojetarumpadrodepontoflutuanteparaoseufuturo
processadores.ElespermitiramKahanparaunirforascomumacomissogerandoum
padrodetodaaindstria,sobosauspciosdoInstituteofElectricaleelectrnicos
TronicsEngineers(IEEE).Acomissoacabouporseradoptadaumaestreitapadropara

Page135

https://translate.googleusercontent.com/translate_f#202 101/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

100 Captulo2RepresentaoeManipulaodeInformao

oKahantinhainventadoparaIntel.Hojeemdia,praticamentetodososcomputadoresdeapoio
oquesetornouconhecidocomoIEEEpontoflutuante.Istotemmelhoradomuitoa
portabilidadedeprogramasdeaplicaocientficosemdiferentesmquinas.

AlmAIEEE
OInstitutodeEngenheirosEltricoseEletrnicos(IEEEpronunciase"EyeTripleEee")umpro
sociedadefissionalqueabrangetodaatecnologiaeletrnicaecomputador.Elapublicarevistas,
patrocinaconferncias,edefinesecomissesparadefinirnormassobretemasquevodesdetransportedeenergia
missodeengenhariadesoftware.

Nestaseo,vamosvercomoosnmerossorepresentadosnoIEEEflutuante
formatodeponto.Vamostambmexplorarquestesdearredondamento,quandoumnmeronopodeser
representadoexatamentenoformatoe,portanto,deveserajustadaparacimaouparadown
enfermaria.Ns,ento,exploraraspropriedadesmatemticasdeadio,multiplicao
o,eosoperadoresrelacionais.Muitosprogramadoresconsiderampontoflutuanteparaser
namelhordashiptesesdesinteressanteenapiordashiptesesarcanoeincompreensvel.Veremosque
umavezqueoformatoIEEEbaseiasenumapequenaeconsistenteconjuntodeprincpios,
realmentemuitoeleganteecompreensvel.

2.4.1nmerosbinriosfracionrios
Aprimeiraetapaemnmerosdepontoflutuantecompreensoadeconsiderarosnmerosbinrios
tervaloresfracionrios.Vamosprimeiroexaminaranotaodecimalmaisfamiliar.
Notaodecimalusaumarepresentaodaformadmdm1...d1d0.d1d2...d N,
ondecadaalgarismodecimaldi variaentre0e9.Estanotaorepresentaum
valorddefinidacomo
M
d= 10i di
i=N

Aponderaodosdgitosdefinidoemrelaoaosmbolodepontodecimal("."),
oquesignificaquedgitosesquerdasoponderadosporpotnciaspositivasde10,dandointegrante
valores,enquantodgitosdireitasoponderadaspelopotnciasnegativasde10,dando
valoresfracionrios.Porexemplo,12.3410 representaonmero1101 +2100 +
3101+4102=1234 .
100
Poranalogia,considereumanotaodaformabmbm1 ...b1b0.B1b2...
bN1bN,ondecadadgitobinrio,oupouco,bi variaentre0e1,comoilustrado
naFigura2.30.Estanotaorepresentaumnmerobdefinidocomo
M
b= 2i bi (2,19)
i=N
Osmbolo'.'Agorasetornaumpontodebinrio,compedaosdoladoesquerdoaponderao
porpotnciaspositivasde2,eaquelesdireitaaserponderadosporforasnegativas
de2.Porexemplo,101.112 representaonmero122 +0x21 +120 +1
21+122=4+0+1+1 2+14=534.

Pgina136

Seo2.4pontoflutuante 101

Figura2.30 2m

represenbinriofracionrio
sentao.Dgitosesquerda 2
m 1

dopontobinriotm
pesosdaforma2i, 4
enquantoqueaquelesparaadireita 2
tmpesosdoformulrio
1/2i. 1
b b b
m m 1 2 b b b b
1 0 1 2 b b b
3 n 1 n

1/2
1/4
1/8

1/2
n 1

https://translate.googleusercontent.com/translate_f#202 102/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
1/2
n

PodeseverfacilmenteapartirdaEquao2.19queodeslocamentodopontobinrioum
posioesquerdatemoefeitodedividironmeropor2.Porexemplo,enquanto
101.112 representaonmero53 ,10.1112 representaonmero2+0+1
4 2+
1 .Damesmaforma,deslocandoopontodebinrioumaposioparaadireitatemo
4+18=278
efeitodamultiplicaodonmerode2.Porexemplo,1.011.12 representaonmero
8+0+2+1+12=1112.
Notequeosnmerosdaforma0.11...12 representarnmerosumpoucoabaixo1.Para
exemplo,0.1111112 representa64
63.Vamosusaranotaoabreviada1.0para
representartaisvalores.
Assumindoqueconsiderarapenascodificaesdecomprimentofinito,notaodecimalnopode
representamnmerostaiscomo
3 e51 7 exatamente.Damesmaforma,anotaobinriafraccionada
spoderepresentarnmerosquepodemserescritasx2y.Outrosvaloresspodemser
aproximadas.Porexemplo,onmero1 5 podeserrepresentadaexactamentecomoafraco
cionalnmerodecimal0,20.Comoumnmerobinriofracionrio,noentanto,nopodemos
representloexatamenteeemvezdissodeveaproximarlocomprecisocadavezmaiorpor
alongandoarepresentaobinria:

Representao Valor Decimal


0.02 0 0.010
2
0.012 1 0.2510
4
0.0102 2 0.2510
8
0.00112 3 0.187510
16
0.001102 6 0.187510
32
0.001.1012 13 0.203.12510
64
0.00110102 26 0.203.12510
128
0.001100112 51 0.1992187510
256

Pgina137

102 Captulo2RepresentaoeManipulaodeInformao

PrticaProblema2.45
Preenchaasinformaesemfaltanatabelaaseguir:

valorfracionrio representaobinria representaodecimal


1 0.001 0.125
8
3
4
25
16
10.1011
1.001
5.875
3.1875

PrticaProblema2.46
Aimprecisodearitmticadepontoflutuantepodeterefeitosdesastrosos.emFebru
ary25de1991,duranteaprimeiraGuerradoGolfo,umabateriademsseisPatriotamericanoem
Dharan,ArbiaSaudita,noconseguiuinterceptarummssildeentradaIraqiScud.o
ScudatingiuumamericanoquartisdoExrcitoemataram28soldados.OsEUAGeral
AccountingOffice(GAO)realizouumaanlisedetalhadadafalha[72]ede
determinaramqueacausasubjacenteeraumaimprecisoemumclculonumrico.
Nesteexerccio,vocvaireproduzirpartedaanlisedoGAO.
OsistemaPatriotcontmumrelgiointerno,implementadocomoumcontador
queincrementadoacada0,1segundos.Paradeterminarotempoemsegundos,o
programaseriamultiplicarovalordestecontadorporumaquantidadede24bitsquefoi
umaaproximaobinriofraccionadapara
10.Emparticular,arepresentaobinria
uma

de1 asequncianonterminating0.000110011[0011]...2,ondeaparteem
10
colchetesserepeteindefinidamente.Oprogramaaproximada0.1,comoumvalordex,por
considerandoapenasosprimeiros23bitsdasequnciaparaadireitadopontobinrio:
X=0.00011001100110011001100.(VerProblema2,51paraumadiscussodecomoeles
poderiateraproximado0.1maisprecisamente.)
A.Qualarepresentaobinriade0.1x?
B.Qualovalordecimalaproximadade0.1x?
C.Orelgiocomeaem0quandoosistemaligadopelaprimeiravezemantmcontagem
https://translate.googleusercontent.com/translate_f#202 103/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
apartirda.Nestecaso,osistematinhasidoexecutadoporcercade100horas.
Qualfoiadiferenaentreotempoefectivoeotempocalculadopela
osoftware?
D.Osistemaprevondeummssildeentradaaparecercombasenasua
velocidadeeahoradaltimadetecoderadar.DadoqueumScudviaja
emcercade2000metrosporsegundo,quolongefoiasuapreviso?
Normalmente,umpequenoerronotempoabsolutorelatadoporumaleituraderelgiofaria
noafectarumacomputaodeacompanhamento.Emvezdisso,eledevedependerotemporelativo
entreduasleiturassucessivas.OproblemaeraqueosoftwarePatriotteve

Pgina138

Seo2.4pontoflutuante 103

foiatualizadoparausarumafunomaisprecisoparaotempodeleitura,masnotodos
aschamadasdefunotinhasidosubstitudopelonovocdigo.Comoresultado,oacompanhamento
softwareusadootempoprecisoparaumaleituraeotempoimprecisoparao
outros[100].

2.4.2RepresentaoIEEEFloatingPoint
notaoposicional,comoconsideradonaseoanteriornoseriaEF
ficientepararepresentarnmerosmuitograndes.Porexemplo,arepresentaode
52100 consistirianopadrodebits101seguidode100zeros.Emvezdisso,
gostariapararepresentarnmerosemumaformaX2y,dandoosvaloresdexey.
OpadrodepontoflutuanteIEEErepresentaumnmerodeumaformaV=(1)s
H2E:
. Osinalsdeterminaseonmeronegativo(s=1)oupositiva
(S=0),emqueainterpretaodobitdesinalparavalornumrico0manuseado
comoumcasoespecial.
. OsignificandMumnmerobinriodefractionalquevariatantoentre1
e2ouentre0e1.
. Oexpoentepesosdovalorporumpoder(possivelmentenegativo)de2.
Arepresentaodeumnmerodepontoflutuantebitdivididoemtrscampospara
codificaressesvalores:

. Osinglesignbitscodificadiretamenteosinals.
. Okbitscampodeexpoenteexp=e...ek1 1e0 codificaoexpoenteE.

. Onfracbitscampodefrao=fn 1...f1f0 codificaosignificandoH,maso


valorcodificadotambmdependeseounoocampodeexpoenteiguala0.
AFigura2.31mostraaembalagemdessestrscamposempalavrasparaosdois
formatosmaiscomuns.Noformatodepontoflutuantedeprecisosimples(umflutuadorem
C),camposs,exp,efracso1,k=8,en=23bitscada,produzindouma32
representaobit.Noprecisoduplaformatodepontoflutuante(umquartoduplona
C),oscamposs,exp,efracso1,k=11,en=52bitscada,obtendoseum64bit
representao.
Ovalorcodificadoporumarepresentaodebitsdadapodeserdivididoemtrs
casosdiferentes(oltimotendoduasvariantes),dependendodovalordeexp.
EstesestoilustradosnaFigura2.32paraoformatodeprecisosimples.

Caso1:NormalizadoValores
Esteocasomaiscomum.Elaocorrequandoopadrodebitsnonemexp
todososzeros(valornumrico0),nemtodososqueridos(valornumrico255deprecisosimples,
2047paraodobro).Nestecaso,ocampodeexpoenteinterpretadacomorepresentandouma
inteiroassinadoemtendenciosaformulrio.Isto,ovalordeexpoenteE=EPolarizaoondee
onmerosemsinaldeterpoucoarepresentaoek1...e1e0 ,evisumvis

Pgina139
https://translate.googleusercontent.com/translate_f#202 104/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Pgina139

104 Captulo2RepresentaoeManipulaodeInformao

precisosimples
31 30 23 22 0
S exp frac

Duplapreciso
63 62 52 51 32
S exp frac(51:32)

31 0
frac(31:0)
Figura2,31formatosdepontoflutuantepadro.Nmerosdepontoflutuantesorepresentados
portrscampos.Paraosdoisformatosmaiscomuns,estassoembaladosem32bit(single
preciso)ou64bits(precisodupla)palavras.

1.Normalizada
S 0&255 F

2.desnormalizado
s00000000 F

3a.Infinidade
s1111111100000000000000000000000

3b).NaN
s11111111 0

Figura2.32Categoriasdeprecisonica,valoresdepontoflutuante.Ovalordo
expoentedeterminaseonmero(1)normalizado,(2)denormalized,ouum
(3)valorespecial.

valoriguala2k1 1(127paraprecisonicae1023paraodobro).Esterendimento
expoentevariade126a+127deprecisosimplese1.0221023para
duplapreciso.
Afraccampodefraointerpretadocomorepresentandoovalorfracionriof,
onde0f<1,tendorepresentaobinria0.Fn 1 ...f1f0 ,isto,coma
pontodebinrioesquerdadobitmaissignificativo.Osignificandodefinidocomosendo
M=1+f.Issosvezeschamadodeimplicoulevandoumarepresentao,porque
podemosvisualizarMparaseronmerocomrepresentaobinria1.f ...f 0 .este
n 1fn 2
representaoumtruqueparaobterumbitadicionaldeprecisodegraa,desdeque
podeajustarsempreoexpoenteEassimquesignificandoMestnagamade1M<2
(Assumindoquenohoverflow).Ns,portanto,noprecisarepresentarexplicitamente
obitesquerda,umavezquesempreiguala1.

Pgina140

Seo2.4pontoflutuante 105

Caso2:desnormalizadoValores
Quandoocampodeexpoentetodososzeros,onmerorepresentadoestemdesnormalizado
Formato.Nestecaso,ovalordeexpoenteE=1Polarizao,eovalorsignificando
H=F,isto,ovalordocampofracosemumimplicavaqueconduzum.

AlmPordefinirovisdestaformaparavaloresdesnormalizados?
Tendoovalorexpoenteser1VisemvezdesimplesmenteVispodeparecercontraintuitivo.Nsvamos
vejalogoqueeleforneceumatransiosuavededenormalizedparavaloresnormalizados.

nmerosdesnormalizadosserviradoispropsitos.Emprimeirolugar,elesfornecemumamaneirade

https://translate.googleusercontent.com/translate_f#202 105/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
representamumvalornumrico0,umavezquecomumnmeronormalizadodevemostersempre
M1,e,portanto,nopodemosrepresentar0.Naverdade,arepresentaodepontoflutuante
de+0.0temumpadrodebitstodososzeros:obitdesinalde0,ocampodeexpoentetudo
zeros(indicandoumvalordenormalized),eocampofracotodososzeros,dando
H=F=0.Curiosamente,quandoobitdesinalum,masosoutroscampossotodoszeros,ns
obterovalor0.0.ComoformatoIEEEdepontoflutuante,osvalores0.0e0.0
soconsideradosdiferentesemalgunsaspectos,eomesmonosoutros.
Asegundafunodosnmerosdesnormalizadorepresentarnmerosqueso
muitoprximode0,0.Elesfornecemumapropriedadeconhecidacomounderflowgradualnosquais
valoresnumricospossveissoespaadasuniformementeperto0.0.

Caso3:valoresespeciais
Altimacategoriadevaloresocorrequandoocampoexpoentetodososqueridos.Quandoo
campodefraotodososzeros,osvaloresresultantesrepresentamoinfinito,seja+quando
s=0,ouquandos=1.Infinitopoderepresentarresultadosquetransbordam,comoquando
multiplicardoisnmerosmuitograndes,ouquandonsdividirporzero.Quandoafraco
campodiferentedezero,ovalorresultantechamadode"NaN",abreviaode"noumnmero."
Taisvaloressoretornadoscomooresultadodeumaoperaoemqueoresultadonopodeser

1Ou.Eles
dadacomoumnmerorealoucomoinfinito,comoquandocomputao
tambmpodesertilemalgumasaplicaespararepresentardadosnoinicializados.

2.4.3Osnmerosdosexemplos
AFigura2.33apresentaoconjuntodevaloresquepodemserrepresentadosnumade6bitshipottica
Tendoemformatok=3bitsdeexpoenteen=2bitsdefraco.Atendnciade231 1=
3.AparteAdafiguramostratodososvaloresrepresentveis(excetoNaN).o
doisinfinitosestonosextremos.Osnmerosnormalizadoscomomximo
magnitudeso14.Osnmerosdesnormalizadosestoagrupadosemtorno0.Estes
podeservistomaisclaramentenaparteBdafigura,ondesemostramapenasosnmeros
entre1.0e1.0.Osdoiszerossocasosespeciaisdenmerosdesnormalizados.
Observasequeosnmerosrepresentveisnosouniformementedistribudos,elesso
maisdensomaispertodaorigem.
Figura2.34mostraalgunsexemplosparaumformatodepontoflutuantede8bitshipottica
tendokpedaos=4expoenteen=3bitsdefrao.Atendnciade241 1=7.A

Pgina141

106 Captulo2RepresentaoeManipulaodeInformao

J J10 J5 0 +5 +10 +
denormalized normalizadaInfinidade
(A)Umagamacompleta

J0 +0

J1 J0.8 J0.6 J0.4 J0.2 0 +0.2 +0.4 +0.6 +0,8 +1


denormalized normalizadaInfinidade
(B)Valoresentrej1.0e+1.0
Figura2,33valoresrepresentvelparaoformatodepontoflutuantede6bits.Existemk=3
bitsdeexpoenteen=2bitsdefrao.Atendnciade3.

Expoente Frao Valor


Descrio representaobit E E 2E F M 2EM V Decimal
Zero 00000000 0 6 1 0 0 0 0 0,0
64 8 8 512
Menorpos. 00000001 0 6 1 1 1 1 1 0.001953
64 8 8 512 512
00000010 0 6 1 2 2 2 1 0.003906
64 8 8 512 256
00000011 0 6 1 3 3 3 3 0.005859
... 64 8 8 512 512
Maiordenorm. 00000111 0 6 1 7 7 7 7 0.013672
64 8 8 512 512
Menornorma. 00001000 1 6 1 0 8 8 1 0.015625
64 8 8 512 64
00001001 1 6 1 1 9 9 9 0.017578
... 64 8 8 512 512
00110110 6 1 1 6 14 14 7 0,875
2 8 8 16 8
00110111 6 1 1 7 15 15 15 0,9375
2 8 8 16 16
1 00111000 7 0 1 0 8 8 1 1,0
https://translate.googleusercontent.com/translate_f#202 106/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

00111001 7 0 1 81 8
9 8
9 9 1,125
8 8 8 8
00111010 7 0 1 2 10 10 5 1,25
... 8 8 8 4

01110110 14 7 128 6 14 1792 224 224,0


8 8 8
Maiornorma. 01110111 14 7 128 7 15 1920 240 240,0
8 8 8
Infinidade 01111000 benzico.

Figura2,34valoresnonegativosexemploparaformatodepontoflutuantede8bit.tem
k=4bitsdeexpoenteen=3bitsdefrao.Atendnciade7.

Page142

Seo2.4pontoflutuante 107

AFiguradivididaemtrsregiesquerepresentamastrsclassesdenmeros.o
diferentescolunasmostramaformacomoocampodeexpoentecodificaoexpoenteE,enquantoo
campodefraocodificaasignificandM,ejuntoselesformamorepresentado
valorV=2EM.Maisprximode0soosnmerosdesnormalizado,comeandocom0
Prprio.NmerosdesnormalizadosnesteformatotemE=17=6,dandoumpeso
2E=164.AsfracesfesignificandsMfaixasobreosvalores0,1 8,...,7 8,
dandonmerosVnagamade0a1 6478=7512.
OsmenoresnmerosnormalizadosnesteformatotambmtmE=17=6,
easfracestambmvariaraolongodosvalores0,
8,...7 18.Noentanto,ossignificands
emseguida,variarde1+0=11+7 ,DandonmerosVnagamade8
8=15
8 512=1 64
para 15.
512
Observeatransiosuaveentreomaiornmerodesnormalizado7 512
eomenornmeronormalizado8 512.Estasuavidadedevidoanossadefinio
deEparavaloresdesnormalizados.Fazendoo1Vis,emvezdepolarizao,quecom
pensateparaofactodequeosignificandoumnmerodedesnormalizadonotm
umimplicavalevando1.
medidaqueaumentamosoexpoente,temosvaloresnormalizadossucessivamentemaiores,
passandoatravsde1,0e,emseguida,paraomaiornmeronormalizado.Estenmerotem
expoenteE=7,dandoumpeso2E=128.Afraoiguala7 8,Dandoumasignificativa
candM=158 .Assim,ovalornumricoV=240.Indoalmdestatransbordapara
+.
Umapropriedadeinteressantedestarepresentaoque,seinterpretarobit
representaesdosvaloresnafigura2.34inteirossemsinalcomo,elesocorremem
ordemcrescente,assimcomoosvaloresqueelesrepresentamcomonmerosdepontoflutuante.Isto
Noporacaso,oformatoIEEEfoiprojetadoparaqueosnmerosdepontoflutuantepudesse
serclassificadosutilizandoumnmerointeirodetriagemderotina.Umadificuldademenorocorrequandoselida
comnmerosnegativos,umavezqueelestmumlder1,eocorrememdescendente
ordem,masissopodesersuperadosemanecessidadedeoperaesdepontoflutuantepara
realizarcomparaes(vejaoProblema2.83).

PrticaProblema2.47
Considereumarepresentaodepontoflutuante5bitsbaseadonodepontoflutuanteIEEE
formato,comumbitdesinal,doisbitsdeexpoente(k=2),edoisbitsdasfraces(n=2).
Ovisexpoente221 1=1.
Atabelaquesesegueenumeratodaagamanonegativoparaeste5bits
representaodepontoflutuante.Preenchaasentradasdatabelaembrancousandooseguinte
instrues:

e:Ovalorrepresentadoporconsiderarocampodeexpoenteparaserumsemassinatura
Inteiro
E:Ovalordoexpoenteapspolarizao
2E:Opesonumricodoexpoente
F:Ovalordafraco

https://translate.googleusercontent.com/translate_f#202 107/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina143

108 Captulo2RepresentaoeManipulaodeInformao

M:Ovalordosignificando
2EM:O(noreduzida)valorfracionriodonmero
V:Oreduzidovalorfracionriodonmero
Decimal:Arepresentaodecimaldonmero
Expressamosvaloresde2E,F,M,2EMeV,quercomointeiros(quandopossvel)
oucomofracesdeformaX
y,ondeyumapotnciade2.Vocnoprecisapreencherentradas
marcado"".
Bits E E 2E F M 2EM V Decimal
00000
00001
00010
00011
00100
00101 1 0 1 1 5 5 5 1,25
4 4 4 4
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111

AFigura2.35mostraasrepresentaesevaloresnumricosdealgumasimportantes
nmerosdepontoflutuantesimpleseduplapreciso.Talcomoacontececomoformatode8bits
mostradonaFigura2.34,podemosveralgumaspropriedadesgeraisparaumpontoflutuante
representaocomumkexpoentebitseumnfraodebits:
. Ovalor0.0temsempreumarepresentaodetodososzerospouco.
. Omenorvalordesnormalizadopositivotemumarepresentaobitconsisteem
um1naposiodebitmenossignificanteedeoutraformatodososzeros.Temumafraco
(esignificand)valorM=f=2n eumvalordeexpoenteE=2k1 +2.
Ovalornumrico,portanto,V=2n 2 +2 . k 1

. Omaiorvalordesnormalizadotemumarepresentaodeumbitqueconsiste
campodeexpoentedetodososzeroseumcampodefraodetodososqueridos.Temumafraco
(esignificand)valorM=f=12n (quensescrevemos1)e
umvalordeexpoenteE=2k1 +2.Ovalornumrico,portanto,V=(1
2N)22 +2
k 1
,Queapenasligeiramentemenordoqueomenornormalizada
valor.

Pgina144

Seo2.4pontoflutuante 109

precisosimples Duplapreciso
Descrio exp frac Valor Decimal Valor Decimal
Zero 00...000...00 0 0.0 0 0.0
Menordenorm. 00...000...01 2232 126 1.41045 2522 1022 4.910 324
Maiordenorm. 00...001...11 (1)2126 1.21038 (1)21022 2.210308
Menornorma. 00...010...00 12126 1.21038 121022 2.210308
1 01...110...00 1x20 1.0 1x20 1.0

https://translate.googleusercontent.com/translate_f#202 108/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Maiornorma. 11...101...11 (2)2127 3.41038 (2)21023 1.810308
Figura2.35Exemplosdenmerosdepontoflutuantenonegativos.

. Omenorvalornormalizadopositivotemumarepresentaodebitscomum1,em
obitmenossignificativodocampoexpoenteedeoutraformatodososzeros.Temum
significandvalorM=1eumvalordeexpoenteE=2k1 +2.Anumrica
valor,porconseguinte,V=22. 2
K 1

. Ovalor1.0temumarepresentaodebitscomtodosmasobitmaissignificativodo
ocampodeexpoenteiguala1etodososoutrosbitsiguala0.Oseuvalorsignificando
M=1eseuvalorexpoenteE=0.
. Omaiorvalornormalizadotemumarepresentaodebitscomumbitdesinalde0,o
bitmenossignificativodoexpoenteiguala0,etodososoutrosbitsiguala1.
temumvalorfracodef=12N,dandoumsignificandoH=22N(que
nsescrevemos2).TemumvalordeexpoenteE=2k1 1dandoumvalornumrico
valorV=(22 N)x22 1=(12 N1
K 1
)22 .
K 1

Umexercciotilpararepresentaescompreensodepontoflutuantecon
valoresinteirosamostravertemformadepontoflutuante.Porexemplo,vimosnaFigura
2.14que12.345temrepresentaobinria[11000000111001].Criamosumnormal
representaodestezada,deslocando13posiesdireitadopontobinrio,
dando12345=1.10000001110012 213 .ParacodificarissoemIEEEdeprecisosimples
formato,nsconstruirocampodefrao,largandoaprincipal1eadicionando10
zerosatofim,dandorepresentaobinria[10000001110010000000000].Para
construirocampodeexpoente,acrescentamosvisde127a13,dando140,quetembi
naryrepresentao[10001100].Nscombinamosissocomumbitdesinalde0aobtero
representaodepontoflutuanteembinriode[01000110010000001110010000000000].
Lembresedoponto2.1.4,quefoiobservadaaseguintecorrelaonapouco
representaesnveldovalorinteiro12345(0x3039)eodeprecisosimples
12.345,0valordepontoflutuante(0x4640E400):

0 0 0 0 3 0 3 9
00000000000000000011000000111001
*************
4 6 4 0 E 4 0 0
01000110010000001110010000000000

Pgina145

110 Captulo2RepresentaoeManipulaodeInformao

Podemosveragoraquearegiodecorrelaocorrespondebaixaordem
bitsdonmerointeiro,parandoapenasantesdobitmaissignificativoiguala1(estebit
constituiaimplcitalevando1),coincidindocomosbitsdeordemsuperiornapartefrao
arepresentaodepontoflutuante.

PrticaProblema2.48
ComomencionadonoProblema2.6,ointeiro3.510.593temrepresentaohexadecimal
o0x00359141,enquantoosinglepreciso,nmerodepontoflutuante3.510.593.0tem
representaohexadecimal0x4A564504.Derivarestepontoflutuanterepresentao
oeexplicaracorrelaoentreosbitsdointeiroedepontoflutuante
representaes.

PrticaProblema2.49

A.Paraumformatodepontoflutuantecomumnfraobits,dumafrmulaparaa
menornmerointeiropositivoquenopodeserrepresentadoexatamente(porque
exigiriaumNfraco1bit+paraserexacto).Suponhaqueocampodeexpoente
tamanhokgrandeosuficientequeagamadeexpoentesnorepresentveis
proporcionarumalimitaoparaesteproblema.
B.Qualovalornumricodestainteiroparaoformatodeprecisosimples
(N=23)?

2.4.4arredondamento
Aritmticadepontoflutuantespodeaproximararitmticareal,jqueorepresen
sentaotemalcanceeprecisolimitada.Assim,paraumvalorx,quegeralmentequerem

https://translate.googleusercontent.com/translate_f#202 109/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
ummtodosistemticodeencontraro"maisprximo"valorcorrespondenteXquepodemserrepresen
ressentiunoformatodepontoflutuantedesejado.Estaatarefadoarredondamento
Operao.Umproblemachavedefiniradireoparaarredondarumvalorque
ameiocaminhoentreduaspossibilidades.Porexemplo,seeutiverUS$1,50edesejaarredondar
loparaodlarmaisprximo,nocasodeoresultadoserdeUS$1ouUS$2?Umaabordagemalternativa
paramanteruminferioreumlimitesuperiorsobreonmeroreal.Porexemplo,ns
poderiadeterminarvaloresrepresentveisx eX + detalmodoqueovalordeXdeGarantia
teedasituarseentreeles:x xx +.OsdefineformatodepontoflutuanteIEEE
quatrodiferentesmodosdearredondamento.Omtodopadroencontraumacorrespondnciamaisprxima,enquanto
osoutrostrspodemserutilizadosparacalcularoslimitessuperioreseinferiores.
AFigura2.36ilustraosquatromodosdearredondamentoaplicadaaoproblemade
arredondamentoumvalormonetrioaodlarinteiromaisprximo.Roundamesmo(tambm
chamadoderoundamaisprxima)omodopadro.Eletentaencontrarumacorrespondnciamaisprxima.
Assim,arredonda$1,40aUS$1eUS$1,60aUS$2,umavezqueestessoosmaisprximosdodlarinteiro
Valores.Anicadecisodeprojetodeterminaroefeitodosvaloresdearredondamento
queestameiocaminhoentredoisresultadospossveis.modoRoundamesmoadotaa

Page146

Seo2.4pontoflutuante 111

Modo $1,40 $1,60 $1,50 $2,50 $1,50


Roundaeven $1 2 2 2 $2
Rodadaemdireodezero
$1 $1 $1 2 $1
Arredondarparabaixo$1 $1 $1 2 $2
Arredondarparacima 2 2 2 $3 $1
Figura2.36Ilustraodearredondamentomodosdedlararredondamento.Asprimeirasrodadaspara
umvalormaisprximo,enquantoosoutrostrsligadooresultadoacimaouabaixo.

convenoquearredondaonmeroparacimaouparabaixodetalmodoqueo
dgitomenossignificativodoresultadoainda.Assim,arredondaambosdeUS$1,50eUS$2,50
para$2.
Osoutrostrsmodosdeproduzirlimitesgarantidosnovalorreal.Estes
podesertilemalgumasaplicaesnumricas.Rodadaemdireodezerorodadasmodo
nmerospositivosparabaixoenmerosnegativosparacima,dandoumvalorxtal
que|x||x|.Mododearredondamentoparabaixorodadasambososnmerospositivosenegativos
descendente,dandoumvalorx detalmodoqueX
x.ModoRounduprodadastanto
nmerospositivosenegativosparacima,dandoumvalorx + detalmodoquexX
+.
Roundamesmoprimeiraparecequetemumobjetivoporissobastantearbitrriaestl
qualquerrazoparapreferirnmerospares?valoresporquenoconsistentementeredondosnomeiodocaminho
entredoisvaloresrepresentveisparacima?Oproblemacomtalconveno
quesepodefacilmenteimaginarcenriosemqueoarredondamentodeumconjuntodevaloresdedados
seria,emseguida,introduzirumapolarizaoestatsticaparaoclculodeumamdiado
Valores.Amdiadeumconjuntodenmerosquearredondadoporessemeiofosse
serligeiramentemaiselevadadoqueamdiadosprpriosnmeros.Poroutrolado,se
semprearredondadosnmerosameiocaminhoentrebaixo,amdiadeumconjuntode
nmerosarredondadosserialigeiramentemenordoqueamdiadosnmeroseles
eus.Arredondamentoparanmerosparesevitaessevisestatsticonamaiorpartedavidareal
situaes.Eleirarredondarparacimacercade50%dotempoecercadequedarodada
50%dotempo.
Roundamesmoarredondamentopodeseraplicadomesmoquandonosoarredondadospara
umnmerointeiro.Nssimplesmenteconsiderarseodgitomenossignificativoainda
oumpar.Porexemplo,suponhaquedesejaarredondarnmerosdecimaisparaomaisprximo
centsimo.Gostaramosdearredondar1.2349999para1,23e1,23500011,24,independentemente
demododearredondamento,umavezqueelesnoestoameiocaminhoentre1,23e1,24.Nooutro
manualmente,iramoscompletartanto1.2350000e1.2450000para1,24,desde4ainda.
Damesmaforma,redondaseaindadearredondamentopodeseraplicadoanmefraccionadabinrio
bros.Consideramosvalorbitmenossignificativo0paraseraindae1paraserestranho.Emgeral,
omododearredondamentossignificativoquandotemosumpadrodeformapouco
XX...XYY...Y100...,emqueXeYindicamvaloresdebitsarbitrriocomo
maisdireitaYsendoaposioparaaqualdesejamosrodada.Apenasospadresdebit
estaformadenotamvaloresqueestoameiocaminhoentredoisresultadospossveis.comoexem
ples,considereoproblemadearredondamentovaloresparaotrimestremaisprximo(ouseja,2bitspara
direitadopontobinrio).Gostaramoscompletam10.00011 )Abaixode10.00
2 (23 2 (2),
32

https://translate.googleusercontent.com/translate_f#202 110/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina147

112 Captulo2RepresentaoeManipulaodeInformao

e10.001102 (2316)At10.012 (241 ),PorqueessesvaloresnosomeiocaminhoBE


interpolardoisvalorespossveis.Gostaramoscompletam10.11100
8)At11.00
2 (2
2 (3)e
7

10.101002 (2
8)Abaixode10.10
5
22 (2
),Umavezqueestesvaloressoameiocaminhoentredois
1
resultadospossveis,enspreferimosterobitmenossignificativoigualazero.

PrticaProblema2.50
Mostrarcomoosseguintesvaloresfracionriosbinriosseriaarredondadoparaomaisprximo
metade(1bitparaadireitadopontobinrio),deacordocomaregraderedondamesmo.
Emcadacaso,mostramosvaloresnumricos,tantoantescomoapsoarredondamento.
A.10.0102
B.10.0112
C.10.1102
D.11.0012

PrticaProblema2.51
VimosnoProblema2.46queosoftwaredemsseisPatriotaproximada0.1comox=
0.000110011001100110011002 .Suponhaque,emvezdequeelestinhamusadoIEEEredonda
tomesmomodoparadeterminarumaaproximaoxpara0.1com23bitsdireita
opontobinrio.
A.Qualarepresentaobinriadex?
B.Qualovalordecimalaproximadodex0.1?
C.Comolongequeorelgiocomputadorizadatersidoaps100horasdeoperao
o?
D.ComolongefariaprevisodoprogramadaposiodoScud
mssiltersido?

PrticaProblema2.52
Considereosdoisseguintesrepresentaesdepontoflutuantede7bitscombasenoIEEE
formatodepontoflutuante.Nemtemumpouco,elessinalspoderepresentarnonegativo
nmeros.
1.FormatoA
Existemk=3bitsdeexpoente.Ovisexpoente3.
Existemn=4bitsdefraco.
2.FormatB
Existemk=4bitsdeexpoente.Ovisexpoente7.
Existemn=3bitsdefraco.
Abaixo,vocdadoalgunspadresdebitsnoformatoA,esuatarefaconverter
losparaovalormaisprximoemformatoB.Senecessrio,vocdeveaplicaroroundto
mesmoarredondamentoregra.Almdisso,dosvaloresdenmerosdadoscomoformatodeum

Pgina148

Seo2.4pontoflutuante 113

epadresdebitsFormatoB.Destesnmeroscomoumtodo(porexemplo,17)oucomofraces
(porexemplo,em17/64).
formatoA FormatB
Bits Valor Bits Valor
0110000 1 0111000 1

https://translate.googleusercontent.com/translate_f#202 111/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
1011110
0101001
1101111
0000001

2.4.5operaesdepontoflutuante
OpadroIEEEespecificaumaregrasimplesparadeterminaroresultadodeumaarith
operaometecocomoadiooumultiplicao.Visualizandovaloresdepontoflutuante
xeycomonmerosreais,ealgunsoperaodefinidasobrenmerosreais,o
computaodeverenderBsico(xy),oresultadodaaplicaoarredondamentoparao
resultadoexactodaoperaoreal.Naprtica,existemtruquesinteligentesdepontoflutuante
designersdeunidadeusarparaevitaraexecuodeesseclculoexato,umavezqueocomputacional
taosprecisadesersuficientementeprecisaparagarantirumresultadocorretamentearredondado.
Quandoumdosargumentosumvalorespecial,como0,,ouNaN,oPa
dardespecificaconvenesquetentamserrazovel.Porexemplo,1/0
definido,paraseobter,enquanto1/+0definida,paraseobter+.
UmaforadomtododopadroIEEEdeespecificarocomportamentode
operaesdepontoflutuantequeeleindependentedequalquerhardwareparticularou
realizaodesoftware.Assim,podemosanalisarassuaspropriedadesmatemticasabstratas
semconsiderarcomorealmenteimplementado.
Vimosanteriormentequeaadiointeiro,tantosemsinalecomplementodedois,
formaumgrupoabeliano.Adioaolongodenmerosreaistambmformaumgrupoabeliano,
masdevemosconsideraroarredondamentotemefeitosobreessaspropriedades.Vamosdefinir
x+ yserquadrado(x+y).Estaoperaodefinidaparatodososvaloresdexey,
f

emborapossaproduziroinfinito,mesmoquandoambosxeysonmerosreais,devido
transbordar.Aoperaocomutativa,comx+ y=y+ xparatodososvaloresdexe
f f

y.Poroutrolado,aoperaonoassociativa.Porexemplo,comanica
Precisodepontoflutuanteaexpresso(3.14+1e10)1e10avaliaa0,0a
valor3,14perdidodevidoaarredondamentos.Poroutrolado,aexpresso3.14+(1e10
1e10)avaliaa3,14.Talcomoacontececomumgrupoabeliano,amaioriadosvalorestminversos
sobaadiodepontoflutuante,ouseja,x+ x=0.Asexceessoinfinitos
f

(desde+=NaN),eNaN's,umavezqueNaN+ X=NaNparaqualquerx.
F

Afaltadeassociamentoalmdepontoflutuanteogrupomaisimportante
propriedadequeestfaltando.Eletemimplicaesimportantesparaosprogramadorescientficos
eescritoresdecompiladores.Porexemplo,suponhaqueumcompiladordadooseguintecdigo
fragmento:
X=a+b+c
y=b+c+d

Pgina149

114 Captulo2RepresentaoeManipulaodeInformao

Ocompiladorpodesertentadoparasalvarumaadiodepontoflutuantepormeiodagerao
oseguintecdigo:
t=b+c
X=A+T
y=t+d
Noentanto,esteclculopodeproduzirumvalordiferentedeXdoqueofaria
original,umavezqueutilizaumaassociaodiferentedasoperaesdeadio.Namaioria
aplicaes,adiferenaseriatopequenaquantosejainconsequente.Unfor
Infeliz,compiladoresnotmnenhumamaneiradesaberoqueostradeoffsqueousurioestdispostoa
fazerentreeficinciaefidelidadeparacomocomportamentoexatodoprooriginais
grama.Comoresultado,elestendemasermuitoconservadora,evitandoquaisqueroptimizaes
quepoderiateratmesmoomenorefeitosobreafuncionalidade.
Poroutrolado,depontoflutuantedisso,satisfazaseguintemonotonicidade
Propriedade:seab,entox+ax+bparaquaisquervaloresdeum,b,exdiferentedeNaN.
Estapropriedadedoreal(einteiro)adionoobedecidapornoassinadooutwo's
Almcomplementar.
Depontoflutuantemultiplicaotambmobedeceamuitasdaspropriedadesquenormalmente
associadoscommultiplicao.Vamosdefinirx* yserquadrado(xy).Estaopera
f

ofechadosobmultiplicao(emborapossivelmenterendendoinfinitoouNaN),
conmutativo,equetemumaidentidadede1,0multiplicativa.Poroutrolado,
noassociativo,devidopossibilidadedetransbordamentoouaperdadepreciso
devidoaoarredondamento.Porexemplo,compontoflutuantedeprecisosimples,aexpresso
(1e20*1e20)*1e20avaliaa+,enquanto1e20*(1e20*1e20)avaliadacomo
1e20.Almdisso,depontoflutuantemultiplicaonosedistribuisobreaadio.
Porexemplo,comumnicopontoflutuantedepreciso,aexpresso1e20*(1e20
1e20)avaliaa0,0,enquanto1e20*1e201e20*1e20avaliadacomoNaN.

https://translate.googleusercontent.com/translate_f#202 112/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Poroutrolado,depontoflutuantemultiplicaosatisfazaseguintemono
Propriedadesdetonicidadeparaquaisquervaloresdeum,becoutrosdoqueNaN:
abec0a* cb* c
f f

abec0a* cb* c
f f

Almdisso,tambmestgarantidoquea* a0,enquantoa=NaN.Comons
f

viuanteriormente,nenhumadestaspropriedadesdemonotonicidadesegurepornoassinadooutwo's
complementarmultiplicao.
Estafaltadeassociatividadeedistributividadedegrandepreocupaoparacientfica
programadoreseparacompiladorescritores.Mesmoumatarefaaparentementetosimplescomoescrever
cdigoparadeterminarseduaslinhassecruzamem3dimensionalpodeserumespao
Desafioprincipal.

2.4.6depontoflutuanteemC
TodasasversesdoCfornecerdoistiposdedadosdepontoflutuantediferentes:floate
Duplo.EmmquinasquesuportamIEEEpontoflutuante,essestiposdedadoscor
respondemanicaepontoflutuantedeprecisodupla.Almdisso,osaparelhosconsomem

Pgina150

Seo2.4pontoflutuante 115

arodadaamesmomododearredondamento.Infelizmente,umavezqueospadresC.No
exigemamquinaparausarIEEEdepontoflutuante,nohmtodospadropara
alteraromododearredondamentoouparaobtervaloresespeciais,taiscomo0,+,,ouNaN.
Amaioriadossistemasdefornecerumacombinaodeincluirarquivos('eh')ebibliotecasdeprocedimento
paraforneceracessoaessesrecursos,masosdetalhesvariamdeumsistemaparaan
deoutros.Porexemplo,ocompiladorGNUgccdefineconstantesdoprogramaINFINITY
(por+)eNaN(paraNaN)quandoaseguintesequnciaocorrenoprograma
Arquivo:
#define_GNU_SOURCE1
#include<math.h>
VersesmaisrecentesdoC,incluindoISOC99,incluemumterodepontoflutuante
tipodedados,longdouble.Paramuitasmquinasecompiladores,estetipodedados
equivalenteaotipodedadosduplo.ParaIntelcompatvelcomasmquinas,noentanto,gcc
implementaestetipodedadosusandoumformatode80bits"estendidadepreciso",proporcionando
umagamaeprecisomuitomaiordoqueoformatode64bitspadro.o
PropriedadesdesteformatosoinvestigadosnoProblema2.85.

PrticaProblema2.53
Preenchaosseguintesdefiniesdemacroparagerarosvaloresdeprecisodupla+,
,E0:

POS_INFINITY#define
NEG_INFINITY#define
#defineNEG_ZERO
Vocnopodeusarqualquerincluirarquivos(comomath.h),masvocpodefazerusodo
fatodequeomaiornmerofinitoquepodeserrepresentadocomprecisodupla
decercade1.810308 .

Aoconvertervaloresentreint,float,eformatosdeduplas,oprograma
alteraosvaloresnumricoseosbitrepresentaesdaseguinteforma(assumindouma
int32bits):

. Deintparaflutuar,onmeronopodetransbordar,maspodeserarredondado.
. Deintouflutuarparaodobro,ovalornumricoexatopodeserpreservadaBE
causarduplatemtantomaioramplitude(ouseja,ointervalodevaloresrepresentveis),
bemcomoumamaiorpreciso(isto,onmerodebitsmaissignificativos).
. Deduploparaflutuar,ovalorpodetransbordarpara+ou,umavezqueafaixa
menor.Casocontrrio,podeserarredondado,porqueaprecisomenor.
. Defloatoudoubleparaintovalorserarredondadoparazero.Para
exemplo,um.999irserconvertidoemum,enquanto1.999vaiserconvertidaem
1.Almdisso,ovalorpodetransbordar.OspadresCnoespecificar
resultadofixadoparaestecaso.microprocessadoresIntelcompatveisdesignara

https://translate.googleusercontent.com/translate_f#202 113/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina151

116 Captulo2RepresentaoeManipulaodeInformao

bitpadro[10...00](TMinwparaotamanhopalavraw)comoumindefinidonmerointeirodevalor.
Qualquerconversodepontoflutuanteparainteiroquenopodeatribuirumrazovel
aproximaointeiroproduzessevalor.Assim,aexpresso(int)+1e10
rendimentos21483648,gerandoumvalornegativodeumaformapositiva.

WebAlmDATA:IA32FParitmticadepontoflutuanteIntelIA32
Noprximocaptulo,vamoscomearumestudoaprofundadodeprocessadoresIntelIA32,oprocessadorencontrado
emmuitosdoscomputadorespessoaisdehoje.Aquidestacamosumaidiossincrasiadessasmquinasquepodem
afetarseriamenteocomportamentodeprogramasqueoperamcomnmerosdepontoflutuantequandocompiladocomgcc.
ProcessadoresIA32,comoamaioriadosoutrosprocessadores,temelementosdememriaespeciaischamadosregistrospara
segurandovaloresdepontoflutuantecomoelesestosendocalculadoeusado.AcaractersticaincomumdeIA32que
osregistradoresdepontoflutuanteusarumespecialde80bitsestendidadeprecisoformatoparafornecerumagamamaiore
precisodoqueosformatosnormaisde32bitdeprecisosimplese64bitdeprecisoduplautilizadosparavalores
retidonamemria.(VejaoProblema2.85.)Todososnmerosdesimpleseduplaprecisosoconvertidosparaeste
formatoqueelessocarregadosdamemriapararegistradoresdepontoflutuante.Aaritmticasempreexecutada
naprecisoestendida.Nmerossoconvertidosdeprecisoestendidaanicaouduplapreciso
formatoqueelessoarmazenadosemmemria.
Estaextensode80bitsparatodososdadosderegistroe,emseguida,acontraodeumformatomenorparaamemria
dadostemalgumasconsequnciasindesejveisparaosprogramadores.Istosignificaqueoarmazenamentodeumnmeroapartirdeum
registarseparaamemriaedepoisrecuperlodevoltaparaoregistopodecausaramudar,devidoaoarredondamento,
underflow,ouestouro.EstearmazenamentoerecuperaonosemprevisvelparaoprogramadorC,levando
aalgunsresultadosmuitopeculiares.
VersesmaisrecentesdeprocessadoresdaIntel,incluindotantoIA32emquinasde64bitsmaisrecentes,fornecem
suportedehardwarediretoparaoperaesdepontoflutuantesimpleseduplapreciso.aspeculiaridades
daabordagemhistricaIA32irdiminuiremimportnciacomonovohardwareecomcompiladoresque
gerarcdigocombasenasinstruesmaisrecentesdepontoflutuante.

AlmAriane5:oaltocustodepontoflutuantedeestouro
Convertendonmerosdepontoflutuantegrandesparainteirosumafontecomumdeerrosdeprogramao.Tal
umerroteveconsequnciasdesastrosasparaaviageminauguraldofogueteAriane5,em4deJunhode1996.Apenas
37segundosapsadecolagem,ofoguetesaiudesuatrajectriadevoo,quebrouse,eexplodiu.Comunicao
satlitesavaliadosemUS$500milheseramabordodofoguete.
Umainvestigaoposterior[69,39]mostrouqueocomputadorquecontrolaosistemadenavegaoporinrcia
tinhaenviadodadosinvlidosparaocomputadorcontrolarosbicosdomotor.Emvezdeenviarcontroledevo
informaes,eletinhaenviadoumpadrodebitsdediagnsticoindicandoqueumestourotinhaocorridoduranteo
conversodeumnmerodepontoflutuantede64bitsparauminteiroassinadode16bits.
Ovalorquetransbordoumediuavelocidadehorizontaldofogueto,quepoderiasermais
de5vezesmaiselevadodoqueoobtidopelofogueteAriane4anterior.NaconcepodoAriane4
software,elestinhamanalisoucuidadosamenteosvaloresnumricosedeterminouqueavelocidadehorizontal

Pgina152

Seo2.4pontoflutuante 117

nuncairiatransbordarumnmerode16bits.Infelizmente,elessimplesmentereutilizadoestapartedosoftwareem
oAriane5semverificarospressupostosemquesebasearam.

https://translate.googleusercontent.com/translate_f#202 114/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Fourmy/REA/SABA/Corbis

PrticaProblema2.54
Suponhavariveisx,f,edsodotipoint,floatedouble,respectivamente.
Seusvaloressoarbitrrios,excetoqueigualanemfnemd+,,ouNaN.
ParacadaumadasseguintesexpressesC,ouargumentarqueelesempreserverdade
(Ouseja,avaliara1)oudoumvalorparaasvariveisdetalmodoquenoverdadeira(ouseja,
avaliaa0).
A.x==(int)(double)x
B.x==(int)(float)x
C.d==(duplo)(float)d
==FD.(float)(double)f
E.f==(f)
F.1.0/2==1/2.0
G.d*d>=0,0
H.(f+d)f==d

Pgina153

118 Captulo2RepresentaoeManipulaodeInformao

2.5Resumo

Computadorescodificarinformaescomobits,geralmenteorganizadasemsequnciasdebytes.
Codificaesdiferentessousadosparainteirosquerepresentam,nmerosreais,eca
cordasTER.Diferentesmodelosdecomputadoresusamdiferentesconvenesparaacodificao
nmeroseparaaordenaodosbytesdentrodedadosmultibyte.
AlinguagemCconcebidaparaacomodarumavastagamadediferentescao
atividadesmentaisemtermosdetamanhosdepalavraecodificaesnumricas.Amaioriadasmquinasactuais
tmtamanhospalavrade32bits,emboramquinashighendtmcadavezmaispalavrasde64bits.
AmaioriadasmquinasusamcodificaocomplementodedoisdeinteiroseEncodersIEEE
ingdepontoflutuante.Entenderessascodificaesnonveldebits,bemcomo
compreenderascaractersticasmatemticasdasoperaesaritmticas,im
portanteparaescreverprogramasquefuncionamcorrectamenteemtodaagamadenumrico
Valores.
Quandoaconversoentrenmerosinteirosassinadosenoassinadoscomomesmotamanho,amaioria
implementaesCseguemaconvenodequeopadrodebitssubjacentefaz
nomudam.Emumamquinadecomplementodedois,estecomportamentocaracterizadopor
funesT2UweU2Tw,paraumwvalordebits.AconversoimplcitadeCdresultados
quemuitosprogramadoresnoantecipar,muitasvezeslevandoaprogramarbugs.
Devidoaoscomprimentosfinitosdoscodificaes,computadoraritmticatempropriedades
bastantediferentedointeiroconvencionalearitmticareal.Ocomprimentofinitopode
causarnmerosatransbordar,quandoexcederafaixadarepresentao.
Valoresdepontoflutuantetambmpodeestouronegativo,quandoelessotoprximode0.0queeles
soalteradasparazero.
AaritmticainteirafinitoimplementadoporC,assimcomoamaioriadosoutrospro

https://translate.googleusercontent.com/translate_f#202 115/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
gramaolnguas,temalgumaspropriedadespeculiaresemrelaoaoverdadeirointeiroarith
meteco.Porexemplo,aexpressox*xpodeavaliarparaumnmeronegativo,devido
atransbordar.Noentanto,tantoaaritmticasemsinalecomplementodedoissatisfazer
muitasdasoutraspropriedadesdearitmticainteira,incluindoassociatividade,com
mutativityedistributividade.Issopermitequeoscompiladoresparafazermuitasotimizaes.Para
exemplo,nasubstituiodaexpresso7*xpor(x<<3)x,fazemosusodaas
Propriedadessociative,comutativaedistributiva,juntamentecomarelao
entremudanaemultiplicandoporpotnciasde2.
Vimosvriasmaneirasinteligentesparaexplorarcombinaesdedenvelbitoperao
eseoperaesaritmticas.Porexemplo,vimosque,comcomplementodedois
aritmtica~x+1equivalenteax.Comooutroexemplo,suponhaquequeremosumpouco
padrodaforma[0,...,0,1,...,1],queconsistedeWkzerosseguidodeK
uns.Taispadresdebitssoteisparaoperaesdemascaramento.Estepadropodeserge
radopelaexpressodeC(1<<k)1,explorandoapropriedadedequeodesejado
padrodebitstemvalornumrico2k1.Porexemplo,aexpresso(1<<8)1vontade
geraropadrodebits0xFF.
Depontoflutuanterepresentaesnmerosreaisaproximadosatravsdacodificaonme
brosdaformax2y.Arepresentaomaiscomumdepontoflutuantedefinida
pelopadroIEEE754.Eleprevvriasprecisesdiferentes,comomais
comunssoindividuais(32bits)edupla(64bits).IEEEpontoflutuantetambmtem
representaesparavaloresespeciaisquerepresentammaisemenosinfinito,bemcomo
noumnmero.

Pgina154

problemasdecasa 119

Aritmticadepontoflutuantedeveserusadocommuitocuidado,porquestem
alcancelimitadoepreciso,eporquenoobedececomummatemtica
propriedades,taiscomoaassociatividade.

Notasbibliogrficas
livrosderefernciasobreC[48,58]discutempropriedadesdosdiferentestiposdedadose
operaes.(Destesdois,nicaSteeleeHarbison[48]cobriromaisrecenteFEA
turasencontradaemISOC99).OspadresCnoespecificardetalhes,taiscomopr
CISEtamanhosdepalavraoucodificaesnumricas.Taisdetalhessoomitidosintencionalmentepara
tornarpossvelaimplementaoCemumavastagamadediferentesmquinas.Devrias
livrosforamescritosdarconselhosaosprogramadoresC[59,70],queadvertemsobre
problemascomexcesso,aconversoimplcitaparanoassinado,ealgumasdasoutraspit
quedasnscobrimosnestecaptulo.Esteslivrostambmfornecerconselhosteis
nanomenclaturadevariveis,estilosdecodificaoetestedecdigo.OlivrodeSeacordsobresegurana
questesemprogramasemCeC++[94],combinainformaessobreprogramasemC,
comoelessocompiladoseexecutados,ecomopodemsurgirvulnerabilidades.livros
emJava(recomendamosacoautoriadeJamesGosling,ocriadorde
alngua[4])descrevemosformatosdedadoseoperaesaritmticassuportadas
porJava.
Amaioriadoslivrossobredesigndelgica[56,115]temumaseosobrecodificaesearith
operaesMETIC.Taislivrosdescrevemdiferentesformasdearitmticaimplementao
circuitos.OlivrodeOvertonemIEEEpontoflutuante[78]forneceumadescriodetalhada
odoformato,bemcomoaspropriedadesdopontodevistadeumnumrica
aplicaesprogramador.

problemasdecasa

2.55
Compilareexecutarocdigodeexemploqueusashow_bytes(arquivodeshowbytes.c)sobre
mquinasdiferentesaquevoctemacesso.Determinarasordenaesbyteusado
porestasmquinas.

2.56
Tenteexecutarocdigoparashow_bytesparadiferentesvaloresdeamostra.

2.57
Escreverprocedimentosshow_short,show_longeshow_doublequeimprimirobyte
representaesdeobjetosCdetiposshortint,longintedouble,res
Mente.Experimenteasemvriasmquinas.

2,58
Escreverumais_little_endianprocedimentoqueirretornar1quandocompiladoeexecutado
emumamquinalittleendian,eirretornar0quandocompiladoeexecutadoemumgrande
mquinaendian.Esteprogramadeveserexecutadoemqualquermquina,independentementedasuapalavra
https://translate.googleusercontent.com/translate_f#202 116/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Tamanho.

Page155

120 Captulo2RepresentaoeManipulaodeInformao

2,59
EscrevaumaexpressoCqueirproduzirumapalavraqueconsisteemomenossignificativo
bytedex,eosrestantesbytesdey.Paraoperandosxey=0x89abcdef=
0x76543210,issodaria0x765432EF.

2.60
Suponhaquenumerarosbytesemumwpalavrabitde0(menossignificativo)paraw/81
(maissignificante).EscrevercdigoparaafunoCaseguir,queirretornaruma
unsignedvaloremquebytedeargumentoxifoisubstitudaporbyteb:
replace_bytesemsinal(unsignedx,inti,unsignedcharb)
Aquiestoalgunsexemplosquemostramcomoafunodevefuncionar:
replace_byte(0x12345678,2,0xAB)>0x12AB5678
replace_byte(0x12345678,0,0xAB)>0x123456AB

regrasinteirodecodificaodenvelBit
Emvriosdosseguintesproblemas,vamosartificialmenterestringiroqueaprogramao
construesquevocpodeusarparaajudloaobterumamelhorcompreensododenveldebits,
lgicaearitmticaoperaesdeC.Emresponderessesproblemas,oseucdigo
deveseguirestasregras:
. Premissas
Inteirossorepresentadosemformacomplementodedois.
turnosdireitodedadosassinadossorealizadasaritmeticamente.
Tipodedadosintwbitsdecomprimento.Paraalgunsdosproblemas,vocserdadoum
valorespecficoparaw,mascasocontrrio,seucdigodevefuncionar,desdequewum
mltiplode8.Vocpodeusaraexpressosizeof(int)<<3paracalcularw.
. Proibido
Condicionais(seou?:),Loops,instruesswitch,chamadasdefunoemacro
invocaes.
Division,mduloemultiplicao.
operadoresdecomparaorelativos(<,>,<=e>=).
Fundio,explcitoouimplcito.
. operaespermitidas
Todasasoperaesdenveldebitsedalgica.
Turnosesquerdaedireita,masapenascomvaloresdedeslocamentoentre0ew1.
Adioesubtrao.
Igualdade(==)edadesigualdade(!=)Testes.(Algunsdosproblemasnopermitem
estes.)
IntegerconstantesINT_MINeINT_MAX.
Mesmocomestasregras,vocdevetentarfazeroseucdigolegvel,escolhendo
nomesdevariveisdescritivaseusandocomentriosparadescreveralgicaportrsdeseu
solues.Comoumexemplo,oseguintecdigoextraiobytemaissignificativo
deinteiroargumentox:

Pgina156

problemasdecasa 121

https://translate.googleusercontent.com/translate_f#202 117/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
/*Obterbytemaissignificativoapartirx*/
intget_msb(intx){
/*Deslocamentoporw8*/
intshift_val=(sizeof(int)1)<<3
/*Deslocamentoaritmtico*/
intXdireito=x>>shift_val
/*Zerotodos,masLSB*/
voltarXdireito&0xFF
}

2,61
EscreverexpressesCqueavaliama1quandoasseguintescondiesforemverdadeiras,e
para0quandoelassofalsas.Suponhaquexdotipoint.
A.Qualquerpoucodexiguala1.
B.Qualquerpoucodexiguala0.
C.Qualquerbitsnobytemenossignificativodexiguala1.
D.Qualquerbitnobytemaissignificativodexiguala0.
Ocdigodeveseguiraregrasdecodificaointeirodenveldebit(pgina120),como
restrioadicionaldequevocnopodeusarigualdade(==)outestesdedesigualdade(!=).

2,62
Escreverumafunoint_shifts_are_arithmetic()queproduz1quandoexecutadoemum
mquinaqueusamudanascertasaritmticasparaint,e0casocontrrio.Seucdigo
devetrabalharemumamquinacomqualquertamanhodetexto.Testarseucdigoemvriasmquinas.

2,63
PreenchacdigoparaasseguintesfunesC.Funosrlrealizaumacertalgica
deslocarusandoumdeslocamentoparaadireitaaritmtica(dadopelovalorxsra),seguidoporoutraopera
esnoincluindomudanascertasoudiviso.Funosrarealizaumaaritmtica
deslocamentoparaadireitausandoumdeslocamentoparaadireitalgico(dadopelovalorxsrl),seguidoporoutra
operaesnoincluindomudanascertasoudiviso.Vocpodeusaracomputao
8*sizeof(int)paradeterminarW,onmerodebitsnotipodedadosint.Oturno
kquantidadepodevariarde0aw1.

srlsemsinal(unsignedx,intk){
/*Executaradeslocaoaritmeticamente*/
unsignedxsra=(int)x>>k
.
.
.

Page157

122 Captulo2RepresentaoeManipulaodeInformao

intsra(intx,intk){
/*Executaradeslocaologicamente*/
intxsrl=(unsigned)x>>k
.
.
.

}
2.64
Escrevercdigoparaimplementaraseguintefuno:
/*Retorno1quandoqualquerbitmpardexiguala10casocontrrio.
Suponhaquew=32.*/
any_odd_oneint(semsinalx)
Suafunodeveseguiraregrasdecodificaointeirodenveldebit(pgina120),excepto
quevocpodeassumirquetipodedadosinttemw=32bits.
2.65
Escrevercdigoparaimplementaraseguintefuno:
/*Retorno1quandoxcontmumnmeromparde1s0casocontrrio.
Suponhaquew=32.*/
intodd_ones(semsinalx)
https://translate.googleusercontent.com/translate_f#202 118/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Suafunodeveseguiraregrasdecodificaointeirodenveldebit(pgina120),excepto
quevocpodeassumirquetipodedadosinttemw=32bits.
Seucdigodeveconterumtotaldenomximo12aritmtico,bitabit,elgico
operaes.

2,66
Escrevercdigoparaimplementaraseguintefuno:
/*
*Gerarmscaraindicandomaisesquerda1emx.Suponhaquew=32.
*Porexemplo0xFF00>0x8000e0x6600>0x4000.
*Sex=0,emseguida,retornar0.
*/
leftmost_oneint(semsinalx)
Suafunodeveseguiraregrasdecodificaointeirodenveldebit(pgina120),excepto
quevocpodeassumirquetipodedadosinttemw=32bits.
Seucdigodeveconterumtotaldenomximo15aritmtico,bitabit,elgico
operaes.
Dica:Primeirotransformarxemumvetordaforma[bit0...011...1].

2,67
Estdadaatarefadeescreverumint_size_is_32procedimento()queproduz1
quandoexecutadoemumamquinaparaaqualumintde32bits,eosrendimentos0casocontrrio.Tues
notempermissoparausarooperadorsizeof.Aquiestumaprimeiratentativa:

Pgina158

problemasdecasa 123

1 /*Ocdigoaseguirnofuncionacorretamenteemalgumasmquinas*/
2 bad_int_size_is_32int(){
3 /*Definabitmaissignificativo(MSB)damquinade32bit*/
4 intset_msb=1<<31
5 /*MudanapassadoMSBdapalavrade32bit*/
6 intbeyond_msb=1<<32
7
8 /*Set_msbdiferentedezeroquandoapalavrasize>=32
9 beyond_msbzeroquandotamanhodapalavra<=32*/
10 voltarset_msb&&beyond_msb!
11 }
QuandocompiladaseexecutadasemumSunSPARCde32bits,noentanto,esteprocedimentoretorna
0.Aseguintemensagemcompiladornosdumaindicaodoproblema:

aviso:deixoucontagemshift>=larguradotipo
A.DequemaneiraonossocdigonocumprircomopadroC?
B.Modificarocdigosejaexecutadocorretamenteemqualquermquinaparaaqualtipodedadosint
pelomenos32bits.
C.Modificarocdigosejaexecutadocorretamenteemqualquermquinaparaaqualtipodedadosint
pelomenos16bits.

2,68
Escrevercdigoparaumafunocomoseguinteprottipo:

/*
*Mscaracommenossignficantnbitsdefinidocomo1
*Exemplos:n=6>0x2F,n=17>0x1FFFF
*Suponha1<=n<=w
*/
intlower_one_mask(intn)
Suafunodeveseguironmerointeirodenvelpoucodecodificaoregras(pgina120).Estar
cuidadodocason=w.

2,69
Escrevercdigoparaumafunocomoseguinteprottipo:

/*
*Faagirardesvioesquerda.Suponha0<=n<w
*Exemplosquandox=0x12345678ew=32:
* n=4>0x23456781,n=20>0x67812345
*/

https://translate.googleusercontent.com/translate_f#202 119/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
rotate_leftsemsinal(unsignedx,intn)
Suafunodeveseguironmerointeirodenvelpoucodecodificaoregras(pgina120).Estar
cuidadodocason=0.

Pgina159

124 Captulo2RepresentaoeManipulaodeInformao

2,70
Escrevercdigoparaafunocomoseguinteprottipo:

/*
Retorno*1quandoosmboloXpodeserrepresentadocomoumnbits,complementosde2
*nmero0casocontrrio
*Suponha1<=n<=w
*/
intfits_bits(intx,intn)
Suafunodeveseguironmerointeirodenvelpoucodecodificaoregras(pgina120).

2.71
Vocapenascomeouatrabalharparaumaempresaqueestaimplementarumconjuntodeprocedimentos
paraoperaremumaestruturadedadosonde4bytesassinadossoembaladosemum32bit
semsinal.Bytesdentrodapalavrasonumeradosde0(menossignificativo)a3
(maissignificante).Vocfoidesignadoatarefadeimplementarumafuno
paraumamquinausandoaaritmticadocomplementodedoiseasmudanascertasaritmticascom
oseguinteprottipo:

/*Declaraodetipodedadosonde4bytessoembalados
emumunsigned*/
typedefunsignedpacked_t

/*Extratodebytesdepalavra.Regressoseointeiroassinado*/
xbyteint(palavrapacked_t,intbytenum)
Ouseja,afunoirextrairobytedesignadoeassinarestendloaserum
int32bits.
Oseupredecessor(quefoidemitidoporincompetncia)escreveuoseguintecdigo:

/*Tentativafracassadadexbyte*/
intxbyte(palavrapacked_t,intbytenum)
{
retorno(palavra>>(bytenum<<3))&0xFF
}
A.Oqueesterradocomestecdigo?
B.Dacorrectaexecuodafunoquesutilizaaesquerdaedireita
desloca,juntamentecomumasubtraco.

2,72
Estdadaatarefadeescreverumafunoqueircopiarumvalinteiroemum
tampobuf,masdevefazloapenassehouverespaodisponvelnobuffer.
Aquiestocdigoquevocescreve:

/*Cpiainteiroemtamposehouverespaodisponvel*/
/*ATENO:Ocdigoaseguirbuggy*/

Pgina160

https://translate.googleusercontent.com/translate_f#202 120/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
problemasdecasa 125

copy_intvoid(valint,void*buf,intMaxBytes){
if(MaxBytessizeof(val)>=0)
memcpy(buf,(void*)&val,sizeof(val))
}
Estecdigofazusodomemcpyfunodebiblioteca.Emboraseuusoumpouco
artificialaqui,ondenssimplesmentedesejacopiarumint,eleilustraumaabordagem
comumenteusadoparacopiarestruturasdedadosmaiores.
Voccuidadosamentetestarocdigoedescobrirqueelesemprecopiaovalorparaa
tampo,mesmoquandoMaxBytesmuitopequeno.
A.Expliqueporqueotestecondicionalnocdigosempretemsucesso.Dica:O
operadorsizeofretornaumvalordotiposize_t.
B.Mostrecomovocpodereescreverotestecondicionalparaqueelefuncionecorretamente.

2,73
Escrevercdigoparaumafunocomoseguinteprottipo:
/*AdioquesaturaaTMinouTMax*/
intsaturating_add(intx,inty)
Emvezdetransbordaramaneiraalmnormaldecomplementodedoisfaz,SAT
AlmuratingretornaTMaxquandohaveriatransbordamentopositivo,eTMin
quandohaveriatransbordonegativo.Saturandoaaritmticacomumenteusado
emprogramasquerealizamoprocessamentodesinaldigital.
Suafunodeveseguironmerointeirodenvelpoucodecodificaoregras(pgina120).

2,74
Escreverumafunocomoseguinteprottipo:
/*Determinarseosargumentospodesersubtradosemoverflow*/
inttsub_ok(intx,inty)
Estafunodeveretornar1seoclculoxynotransborde.

2.75
Suponhaquequeremoscalcularacompleta2wbitrepresentaoxy,onde
ambosxeyestosemsinal,emumamquinaparaaqualtipodedadosnoassinadowpedaos.
AbaixaordemWbitsdoprodutopodesercalculadocomaexpressox*y,assim
queapenasnecessitadeumprocedimentocomprottipo
unsignedintunsigned_high_prod(noassinadosx,semsinalY)
quecalculaaaltaordemwpedaosdexyparavariveisnoassinados.
Temosacessoaumafunodebibliotecacomprottipo
signed_high_prodint(intx,inty)
quecalculaaaltafimWbitsdeXYparaocasoemqueXeYestoemtwo's
formulriodecomplemento.Escrevercdigochamandoesteprocedimentoparaimplementarafuno
paraargumentosnoassinados.Justificarajustezadasuasoluo.

Page161

126 Captulo2RepresentaoeManipulaodeInformao

Dica:Olheparaarelaoentreoprodutoassinadoxyeo
unsignedprodutox.YnaderivaodaEquao2,18.

2,76
Suponhaquenosdadaatarefadegerarcdigoparamultiplicarinteirovarivelx
porvriosdiferentesfactoresconstantesK.Parasereficiente,nsqueremosusarapenaso
operaes+,,e<<.ParaosseguintesvaloresdeK,paraescreverexpressesC
executaramultiplicaoutilizandonomximotrsoperaesporexpresso.

UMA. K = 17:
B. K = 7:
C K = 60:
D. K = 112:

2,77
Escrevercdigoparaumafunocomoseguinteprottipo:

/*Divideporpotnciadedois.Suponha0<=k<w1*/
divide_power2int(intx,intk)
https://translate.googleusercontent.com/translate_f#202 121/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Afunodevecalcularx/2kcomarredondamentocorreta,edeveseguiro
regrasinteirodecodificaodenveldebit(pgina120).

2,78
Escrevercdigoparaumafunomul3div4que,porinteiroargumentox,calcula3*x/4,
masseguindoasregrasdecodificaointeirodenveldebits(pgina120).Ocdigodeve
replicarofactodeoclculo3*xpodecausartransbordamento.

2,79
Escrevercdigoparaumafunothreefourthsque,porinteiroargumentox,calcula
ovalorde3 4x,arredondadoparazero.Elenodevetransbordar.Suafunodeve
sigaonmerointeirodenveldebitdecodificaoregras(pgina120).

2.80
FaaexpressesCparagerarospadresdebitsqueseseguem,emqueumkrepresenta
krepetiesdesmbolodeum.Assumirumwtipodedadosbit.Seucdigopodeconter
refernciasaosparmetrosJeK,representandoosvaloresdeJeK,masnoum
parmetrorepresentandoW.
A.1wk0k
B.0wKJ1K0J

2.81
Estamosexecutandoprogramasemumamquinaondevaloresdotipointso32bits.Eles
sorepresentadosemcomplementodedois,eelessodeslocadosparaadireitaaritmeticamente.
Osvaloresdotiposemsinaltambmso32bits.

Pgina162

problemasdecasa 127

Geramosvaloresarbitrriosxey,econvertlosparaosvaloresnoassinadoscomo
Seguinte:

/*Criealgunsvaloresarbitrrios*/
intx=aleatrio()
inty=aleatrio()
/*Converteremunsigned*/
=(Unsigned)xunsignedUX
unsigneduy=(unsigned)y

ParacadaumadasseguintesexpressesC,vocdeveindicarse
noaexpressosempreretorna1.Seelesempreproduz1,descreverosubjacente
princpiosmatemticos.Casocontrrio,darumexemplodeargumentosqueotornam
produzir0.
A.(x<y)==(x>y)
B.((x+y)<<4)+yx==17*y+15*x
C.~x~+y+1==~(x+y)
D.==(UXuy)(semassinatura)(yx)
E.((x>>2)<<2)<=x

2,82
Considereosnmerosquetmumarepresentaobinriaconsisteemumacadeiainfinita
deformaa0.yyyyyy...,ondeyumksequnciadebits.Porexemplo,obinrio
representaodeum3 0.01010101...(Y=01),enquantoquearepresentaode
5 um
0.001100110011...(y=0011).
A.LetY=B2UK(y),isto,onmerobinrioquetemrepresentaoy.Dar
umafrmulaemtermosdeYeKparaovalorrepresentadopelacadeiainfinita.
Dica:Considereoefeitodedeslocardopontobinriokposiesparaadireita.
B.Qualovalornumricodastringparaosseguintesvaloresdey?
(A)101
(B)0110
(C)010011

2.83
Preenchaovalorderetornoparaoseguinteprocedimento,quetestaseoseuprimeiro
argumentomenordoqueouigualsuasegunda.Suponhaqueafunoretornaumf2u
nmerode32bitssemsinaldeteramesmarepresentaobitcomoseupontoflutuante

https://translate.googleusercontent.com/translate_f#202 122/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
argumento.VocpodeassumirquenemoargumentoNaN.Osdoissaboresdezero,
+0E0,soconsideradosiguais.

float_leint(floatx,flutuadory){
unsignedux=f2u(x)
unsigneduy=f2u(y)

Pgina163

128 Captulo2RepresentaoeManipulaodeInformao

/*Obterosbitsdesinal*/
unsignedsx=ux>>31
unsignedsy=uy>>31

/*Dumaexpressoutilizandoapenasux,uy,sxesy*/
Retorna
}

2.84
Dadoumformatodepontoflutuantecomumakexpoentebitseumnfraobits,escrever
frmulasparaoexpoenteE,significandoM,afraof,eovalorVpara
Asquantidadesqueseseguem.Almdisso,descrevemarepresentaodebits.
A.Onmero7.0
B.Omaiornmerointeirompar,quepodeserrepresentadoexactamente
C.Orecprocodamenorvalornormalizadopositiva

2.85
processadorescompatveiscomInteltambmapoiaruma"precisoestendida"depontoflutuante
formatocomumapalavrade80bitsdivididoemumbitdesinal,k=15bitsdeexpoente,umnico
nmerointeirodebits,en=63bitsdefraces.Obitinteiroumacpiaexplcitado
bitimplcitanarepresentaoIEEEdepontoflutuante.Ouseja,iguala1para
valoresnormalizadose0paravaloresdesnormalizada.Preenchaoseguintedoaodemesa
osvaloresaproximadosdealgunsnmeros"interessantes"nesteformato:

precisoestendida
Descrio Valor Decimal
Menordesnormalizadopositiva
Menorpositivonormalizado
maiornormalizada

2.86
Considereumarepresentaodepontoflutuantede16bitsbaseadonodepontoflutuanteIEEE
formato,comumbitdesinal,setebitsdeexpoente(k=7),eoitobitsdefrao
(N=8).Ovisexpoente271 1=63.
Enchanatabelaquesesegueparacadaumdosnmerosindicados,comaseguinte
instruesparacadacoluna:

hex: Osquatrodgitoshexadecimaisquedescrevemaformacodificada.
H: Ovalordosignificando.Istodeveserumnmerodo
formulriodexou x
y,ondexumnmerointeiro,eYumintegral
poderde2.Exemplosincluem:0, 64,E
67 1
256.
E: Ovalorinteirodoexpoente.
V: Ovalornumricorepresentado.Useanotaoxou
xx2Z,ondeXeZsonmerosinteiros.

Pgina164

https://translate.googleusercontent.com/translate_f#202 123/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

problemasdecasa 129

Comoumexemplo,pararepresentaronmero
8,Teramoss=0,M=
7 7
4e
E=1.Nossonmeroteria,portanto,umcampodeexpoenteda0x3E(decimal
valor631=62)eumcamposignificand0xC0(binrio110000002 ),dandoumhex
3EC0representao.
Vocnoprecisapreencherentradasmarcadas"".
Descrio feitio M E V
0
Menorvalor>2
512
maiordesnormalizado

Nmerocomrepresentaohexadecimal3BB0

2,87
Considereosdoisseguintesrepresentaesdepontoflutuantede9bitscombasenoIEEE
formatodepontoflutuante.
1.FormatoA
Humbitdesinal.
Existemk=5bitsdeexpoente.Ovisexpoente15.
Existemn=3bitsdefraco.
2.FormatB
Humbitdesinal.
Existemk=4bitsdeexpoente.Ovisexpoente7.
Existemn=4bitsdefraco.
Abaixo,vocdadoalgunspadresdebitsnoformatoA,esuatarefaconverter
losparaovalormaisprximoemformatoB.Seoarredondamentofornecessrio,vocdevearredondar
para+.Almdisso,dosvaloresdenmerosdadospeloformatodeAe
padresBbitDefinio.Destesnmerosinteiroscomo(porexemplo,17),oucomofraces(porexemplo,
17de/64ou17/26 ).
formatoA FormatB
Bits Valor Bits Valor
101111001 9 101110010 9
8 8
010110011
100111010
000000111
111100000
010111100
2.88
Estamosexecutandoprogramasemumamquinaondevaloresdotipointtemum32
bitrepresentaocomplementodedois.Valoresdotipofloatusara32bitIEEE
formatoevaloresdotipoduplousooformatoIEEE64bit.

Pgina165

130 Captulo2RepresentaoeManipulaodeInformao

Geramosvaloresinteirosarbitrriosx,y,ez,econvertlosparavalores
dotipodoublecomosegue:

/*Criealgunsvaloresarbitrrios*/
intx=aleatrio()
inty=aleatrio()
intz=aleatrio()
/*Converterparadobrar*/
Duplo dx=(double)x
Duplo dy=(double)y
Duplo dz=(double)z
ParacadaumadasseguintesexpressesC,vocdeveindicarse
noaexpressosempreretorna1.Seelesempreproduz1,descreverosubjacente
princpiosmatemticos.Casocontrrio,darumexemplodeargumentosquefazem
eledeu0.NotequevocnopodeusarumamquinadeexecuogccIA32paratestarasua

https://translate.googleusercontent.com/translate_f#202 124/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
respostas,umavezqueusamarepresentaoestendidadeprecisode80bitsparaambos
floatedouble.
A.(float)x==(float)dx
B.dx==dy(duplo)(xy)
C.(dx+dy)+dz==dx+(dy+dz)
D.(dx*dy)*dz==dx*(*dzdy)
E.dx/dx==dz/dz

2.89
VocfoidesignadoatarefadeescreverumafunoCparacalcularumflutuante
representaodepontode2x.Vocdecidequeamelhormaneiradefazerissodiretamente
construirarepresentaodeprecisosimplesIEEEdoresultado.QuandoXdemasiado
pequeno,suarotinavairetornar0.0.Quandoxmuitogrande,eleirretornar+.Preenchao
partesembrancodocdigoquesegueparacalcularoresultadocorreto.Assumaa
funoU2Fretornaumvalordepontoflutuantecomumarepresentaobitidnticos
comoseuargumentonoassinado.

flutuarfpwr2(intx)
{

/*Resultadoexpoenteefraode*/
unsignedexp,frac
unoassinado

Se(x< ){
/*Muitopequeno.Retorno0,0*/
exp=
frac=
}Elseif(x< ){

Pgina166

problemasdecasa 131

/*Resultadodesnormalizado*/
exp=
frac=
}Elseif(x< ){
/*Resultadonormalizado.*/
exp=
frac=
}outro{
/*Muitogrande.Retorno+oo*/
exp=
frac=
}

/*ExpPackefracem32bits*/
u=exp<<23|frac
/*Retornocomofloat*/
voltarU2F(u)
}

2.90
Porvoltade250aC,omatemticogregoArquimedesprovouque223 71 <<227 .
Seeletivessetidoacessoaumcomputadoreabibliotecapadro<math.h>,eleteria
foramcapazesdedeterminarqueaaproximaodeprecisosimplesdepontoflutuantede
temarepresentaohexadecimal0x40490FDB.Claro,tudoissosoapenas
aproximaes,jquenoracional.
A.Qualonmerobinriodefractionalassinaladoscomestevalordepontoflutuante?
B.Qualarepresentaobinriafracionriode22 7 ?Dica:VejaoProblema2.82.
C.Emquemordeuposio(emrelaoaopontobinrio)fazerestesdoisaproximao
esparadivergem?

regrasdecodificaodepontoflutuantedenvelBit
Nosseguintesproblemas,vocvaiescrevercdigoparaimplementarpontoflutuantefuno
es,operandodiretamentesobrerepresentaesdenveldebitsdenmerosdepontoflutuante.
OcdigodeveexatamentereplicarasconvenesparaIEEEoperadepontoflutuante
es,inclusiveusandoomodoroundamesmoquandooarredondamentonecessria.

https://translate.googleusercontent.com/translate_f#202 125/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Paraestefim,definimostipofloat_bitsdedadosparaserequivalenteaUN
assinado:

/*RepresentaodenvelpoucoAcessonmerodepontoflutuante*/
typedeffloat_bitsnoassinados

Aoinvsdeusardadosdetipoflutuantenoseucdigo,vocvaiusarfloat_bits.
Vocpodeusarambosostiposdedadosintenoassinados,incluindosemsinaleinteiro
constanteseoperaes.Vocnopodeusarquaisquersindicatos,estruturasoumatrizes.Amaioria

Page167

132 Captulo2RepresentaoeManipulaodeInformao

significativamente,vocnopodeusarqualquerpontoflutuantetiposdedados,operaes,oucon
Stants.Emvezdisso,seucdigodeveexecutarasmanipulaesdebitsqueimplementam
asoperaesdepontoflutuanteespecificados.
Afunoseguinteilustraautilizaodestasregrasdecodificao.paraargumento
f,eleretorna0sefdesnormalizada(preservandoosinaldef)eretornaf
deoutraforma.

/*Sefdenorm,oretorno0.Casocontrrio,oretornof*/
float_bitsfloat_denorm_zero(float_bitsf){
/*Representaobitdecompemempartes*/
semsinalsinal=f>>31
unsignedexp=f>>23e0xFF
unsignedfrac=f &0x7FFFFF
if(exp==0){
/*Desnormalizado.Definirfraoa0*/
frac=0
}
/*Remontarpedaos*/
retorno(sinal<<31)|(Exp<<23)|frac
}

2,91
Apsacodificaoderegrasflutuantepontoanveldebit,implementarafunocom
oseguinteprottipo:

/*Calculef.SefNaN,emseguida,retornarf.*/
float_bitsfloat_negate(float_bitsf)

Paraonmerodepontoflutuantef,estafunocalculaf.SefNaN,asuafuno
odevesimplesmenteretornarf.
Testeasuafuno,avaliandooparatodosos232 valoresdeargumentofecom
aparaoresultadoaqueseriaobtidautilizandopontoflutuantedasuamquina
operaes.

2,92
Apsacodificaoderegrasflutuantepontoanveldebit,implementarafunocom
oseguinteprottipo:

/*Compute|f|.SefNaN,emseguida,retornarf.*/
float_bitsfloat_absval(float_bitsf)

Paraonmerodepontoflutuantef,estafunocalcula|f|.SefNaN,asuafuno
devesimplesmenteretornarf.
Testeasuafuno,avaliandooparatodosos232 valoresdeargumentofecom
aparaoresultadoaqueseriaobtidautilizandopontoflutuantedasuamquina
operaes.

168

https://translate.googleusercontent.com/translate_f#202 126/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

problemasdecasa 133

2,93
Apsacodificaoderegrasflutuantepontoanveldebit,implementarafunocom
oseguinteprottipo:
/*Calcule2*f.SefNaN,emseguida,retornarf.*/
float_bitsfloat_twice(float_bitsf)
Paraonmerodepontoflutuantef,estafunocalcula2.0.f.SefNaN,oseu
funodevesimplesmenteretornarf.
Testeasuafuno,avaliandooparatodosos232 valoresdeargumentofecom
aparaoresultadoaqueseriaobtidautilizandopontoflutuantedasuamquina
operaes.

2,94
Apsacodificaoderegrasflutuantepontoanveldebit,implementarafunocom
oseguinteprottipo:
/*Calcule0,5*f.SefNaN,emseguida,retornarf.*/
float_bitsfloat_half(float_bitsf)
Paraonmerodepontoflutuantef,estafunocalcula0.5.f.SefNaN,oseu
funodevesimplesmenteretornarf.
Testeasuafuno,avaliandooparatodosos232 valoresdeargumentofecom
aparaoresultadoaqueseriaobtidautilizandopontoflutuantedasuamquina
operaes.

2.95
Apsacodificaoderegrasflutuantepontoanveldebit,implementarafunocom
oseguinteprottipo:
/*
*Compute(int)f.
*SeaconversofazcomqueestourooufNaN,oretorno0x80000000
*/
intfloat_f2i(float_bitsf)
Paraonmerodepontoflutuantef,estafunocalcula(int)f.Suafuno
devearredondarparazero.Sefnopodeserrepresentadocomoumnmerointeiro(porexemplo,
foradafaixa,ouNaN),emseguida,afunodeveretornar0x80000000.
Testeasuafuno,avaliandooparatodosos232 valoresdeargumentofecom
aparaoresultadoaqueseriaobtidautilizandopontoflutuantedasuamquina
operaes.

2,96
Apsacodificaoderegrasflutuantepontoanveldebit,implementarafunocom
oseguinteprottipo:
/*Compute(float)i*/
float_bitsfloat_i2f(inti)

Pgina169

134 Captulo2RepresentaoeManipulaodeInformao

Paraargumentoi,estafunocalculaarepresentaodenvelpoucode
(Float)i.
Testeasuafuno,avaliandooparatodosos232 valoresdeargumentofecom
aparaoresultadoaqueseriaobtidautilizandopontoflutuantedasuamquina
operaes.

SoluodosProblemas

Soluoparaoproblema2.1(pgina35)
Compreenderarelaoentrehexadecimaisebinriosformatosserim
portante,umavezquecomearaolharparaosprogramasdenveldemquina.Omtodoparafazer
essasconversesestnotexto,masprecisoumpoucodeprticaparasetornarfamiliar.

https://translate.googleusercontent.com/translate_f#202 127/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
A.0x39A7F8parabinrio:
hexadecimal 3 9 UMA 7 F 8
Binrio 0011 1001 1010 0111 1111 1000

B.binrio1100100101111011parahexadecimal:

Binrio 1100 1001 0111 1011


hexadecimal C 9 7 B

C.0xD5E4Cparabinrio:

hexadecimal D 5 E 4 C
Binrio 1101 0101 1110 0100 1100

D.binrio1001101110011110110101parahexadecimal:

Binrio 10 0110 1110 0111 1011 0101


hexadecimal 2 6 E 7 B 5

Soluoparaoproblema2.2(pgina35)
Esteproblemadlheumachancedepensarsobrepotnciasde2esuahexadecimal
representaes.

N 2n(Decimal) 2N(hexadecimal)
9 512 0x200
19 524,288 0x80000
14 16.384 0x4000
16 65.536 0x10000
17 131,072 0x20000
5 32 0x20
7 128 0x80

Pgina170

SoluodosProblemas 135

Soluoparaoproblema2.3(pgina36)
Esteproblemadlheumachancedeexperimentarconversesentrehexadecimale
representaesdecimaisparaalgunsnmerosmenores.Paraosmaiores,tornase
muitomaisconvenienteeconfivelparausarumprogramadecalculadoraouconverso.

Decimal Binrio hexadecimal


0 00000000 0x00
167=10.16+7 10100111 0xA7
62=3.16+14 00111110 0x3E
188=11.16+12 10111100 0xBC
3.16+7=55 00110111 0x37
8.16+8=136 10001000 0x88
15.16+3=243 11110011 0xF3
5.16+2=82 01010010 0x52
10.16+12=172 10101100 0xAC
14.16+7=231 11100111 0xE7
Soluoparaoproblema2.4(pgina37)
Quandovoccomearadepuraodeprogramasdenveldemquina,vocvaiencontrarmuitoscasos
ondealgunsaritmticasimpleshexadecimalseriatil.Vocpodesempre
converternmerosparadecimal,executaraaritmtica,econvertlosdevolta,mas
sercapazdetrabalhardiretamenteemhexadecimalmaiseficienteeinformativo.
A.0x503c+0x8=0x5044.Adicionando8ahexcd4comumtransportede1.
B.0x503c0x40=0x4ffc.Subtraindo4apartirde3nasegundaposiododgito
requerumborrowapartirdoterceiro.Umavezqueestedgito0,devemostambmtomaremprestado
apartirdaquartaposio.
C.0x503c+64=0x507c.Decimal64(26 )iguala0x40hexadecimal.
D.0x50ea0x503c=0xAE.Parasubtrairhexc(decimal12)dehexa(decimal
10),tomamosemprestado16dosegundodgito,dandohexe(decimal14).Dentro
osegundodgito,agorasubtrair3dehexd(decimal13),dandohexum
(Decimal10).

https://translate.googleusercontent.com/translate_f#202 128/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Soluoparaoproblema2.5(pgina45)
Esteproblematestaasuacompreensodarepresentaobytededadosea
doisordenamentosbytediferentes.

Littleendian:21 Bigendian:87
Littleendian:2143 Bigendian:8765
Littleendian:214365 Bigendian:876543
Recordesequeshow_bytesenumeraumasriedebytesapartirdeumacom
menorendereoetrabalharemdireoaumcomendereomaisalto.Emumpouco
mquinaendian,eleirlistarosbytesdemenossignificativoparaamaioria.Emumbigendian
mquina,eleirlistarbytesdobytemaissignificativoparaomnimo.

Pgina171

136 Captulo2RepresentaoeManipulaodeInformao

Soluoparaoproblema2.6(pgina46)
Esteproblemamaisumaoportunidadeparaaprticadehexadecimalparaconversodebinrio.isto
Tambmfazvocpensarsobreinteirosedepontoflutuanterepresentaes.Nsvamos
explorarestasrepresentaesemmaisdetalhesmaisadiantenestecaptulo.
A.Usandoanotaodoexemplonotexto,escrevemosasduascadeiascomo
Seguinte:
0 0 3 5 9 1 4 1
00000000001101011001000101000001
*********************
4 UMA5 6 4 5 0 4
01001010010101100100010100000100
B.Comasegundapalavradeslocadaduasposiesparaadireitaemrelaoprimeira,
encontramosumasequnciacom21bitscorrespondentes.
C.Nsencontramostodososbitsdointeiroembutidononmerodepontoflutuante,excepto
paraobitmaissignificativotendovalor1.Esteocasoparaoexemplo
notextotambm.Almdisso,onmerodepontoflutuantetemalgumdiferentedezero
bitsdeordemsuperiorquenocorrespondemaosdointeiro.
Soluoparaoproblema2.7(pgina46)
Elaimprime616263646566.Lembresetambmqueostrlenrotinadebibliotecanofunciona
contarocaracterenulodeterminao,eassimshow_bytesimpressasomenteatravsda
carter'f'.
Soluoparaoproblema2.8(pgina49)
EsteproblemaumabrocaparaajudloatornarsemaisfamiliarizadocomoperaesBooleanas.
Operao Resultado
uma [01101001]
B [01010101]
~um [10010110]
~b [10101010]
um&b [01000001]
A|B [01111101]
a^b [00111100]
Soluoparaoproblema2.9(pgina50)
Esteproblemailustracomolgebrabooleanapodeserusadoparadescrevererazo
sobreossistemasdomundoreal.Podemosverqueessalgebracoridntica
lgebrabooleanasobrevetoresdetamanho3bits.
A.AscoressocomplementadosporcomplementandoosvaloresdeR,GeB.
Apartirdisso,podemosverqueobrancoocomplementodePreto,Amareloo
complementodeazul,magentaocomplementodoverde,eociano
complementardeRed.

https://translate.googleusercontent.com/translate_f#202 129/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina172

SoluodosProblemas 137

B.Realizamosoperaesbooleanascombaseemumarepresentaobitvectorda
Cores.Apartirdisso,obteroseguinte:

Azul(001) | Verde(010) = Cyan(011)


Amarelo(110) &Amp
Cyan(011) = Verde(010)
Vermelho(100)
^ Magenta(101) = Azul(001)

Soluoparaoproblema2,10(pgina51)
EsteprocedimentosebaseianofatodequeExclusiveOrcomutativaeassociao
tivo,equeuma^um=0paraqualquerum.

Degrau *x *y
Inicialmente uma B
Passo1 uma a^b
Passo2 um^(a^b)=(a^a)^b=b a^b
etapa3 B b^(a^b)=(b^b)^a=a

VejaoProblema2.11paraumcasoemqueestafunoirfalhar.

Soluoparaoproblema2.11(pgina52)
Esteproblemailustraumacaractersticasutileinteressantedenossainplacedeswaprou
tine.
A.Tantooprimeiroeoltimotemvalork,porissoestamosatentartrocaromeio
elementocomeleprprio.
B.Nestecaso,osargumentosxeyparainplace_swapambosapontamparaamesma
localizao.Quandocalculamos*x^*y,obtemos0.Emseguida,armazenar0paraomeio
elementodamatriz,eospassossubsequentesmanteradefiniodeesteelementopara
0.PodemosverqueonossoraciocnionoProblema2.10implicitamenteassumidoquex
eyindicamlocaisdiferentes.
C.Bastasubstituirotestenalinha4doreverse_arrayparaseroprimeiro<ltima,umavezque
nohnecessidadedetrocaroelementodomeiocomsi.

Soluoparaoproblema2,12(pgina53)
Aquiestoasexpresses:
A.x&0xFF
B.x^~0xFF
C.x|0xFF
Estasexpressessotpicasdostiposcomumenteencontradosembaixonveldesempenho
operaesdebit.Aexpresso~0xFFcriaumamscaraondeo8menossignificativa
osbitsiguala0eorestoiguala1.Observasequeumtalmscarairsergerado
independentementedotamanhodapalavra.Porcontraste,aexpresso0xFFFFFF00apenas
trabalharemumamquinade32bits.

Pgina173

138 Captulo2RepresentaoeManipulaodeInformao

Soluoparaoproblema2,13(pgina53)
Estesproblemasajudloapensarsobrearelaoentreoperaesbooleanas
eformastpicasqueosprogramadoresaplicaroperaesmascaramento.Aquiestocdigo:

/*Declaraesdefunesdeexecuobisoperaese*bic/
intbis(intx,intm)
intbic(intx,intm)

/*Computex|yusandoapenaschamadasparafunesbise*BIC/
intbool_or(intx,inty){

https://translate.googleusercontent.com/translate_f#202 130/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
intresultado=bis(x,y)
retornarresultado
}

/*Computex^yusandoapenaschamadasparafunesbise*BIC/
intbool_xor(intx,inty){
intresultado=bis(bic(x,y),bic(y,x))
retornarresultado
}
AoperaobisequivalenteabooleanaOuabitdefinidoemzsequeresta
bitdefinidoemxoueledefinidoemm.Poroutrolado,aBIC(x,m)equivalenteaX&~m
queremosoresultadoparaigualar1somentequandoobitcorrespondentedex1ede
m0.
Tendoemcontaque,podemosimplementar|comumanicachamadaparabis.Paraimplementar^,ns
tirarproveitodapropriedade
x^y=(x&~y)|(~Xey).
Soluoparaoproblema2,14(pgina54)
Esteproblemadestacaarelaoentreoperaesbooleanasdenveldebite
operaeslgicasemC.Umerrodeprogramaocomumautilizaodeumaoperaodenveldebits
quandoumalgicaumsedestina,ouviceversa.
Expresso Valor Expresso Valor
xey 0x20 x&&y 0x01
x|Y 0x7F x||Y 0x01
~X|~y 0xDF !X||!y 0x00
x&!y 0x00 x&&~y 0x01
Soluoparaoproblema2,15(pgina54)
Aexpresso!(X^y).
Isto,x^yserzeroseesomentesetodososbitsdexcorrespondeaocorrespondente
poucodey.Ns,ento,exploraracapacidadedo!paradeterminarsecontmqualquerumapalavra
bitdiferentedezero.
Nohnenhumarazorealparausarestaexpresso,emvezdesimplesmenteescreverx==
y,masdemonstraalgumasdasnuancesdenveldebitseoperaeslgicas.

Pgina174

SoluodosProblemas 139

Soluoparaoproblema2.16(pgina56)
Esteproblemaumabrocaparaajudarvocaentenderasdiferentesoperaesdedeslocamento.

(Lgico) (Aritmtica)
X x<<3 x>>2 x>>2
feitio Binrio Binrio feitio Binrio feitio Binrio feitio
0xC3 [11000011] [00011000] 0x18 [00110000] 0x30 [11110000] 0xF0
0x75 [01110101] [10101000] 0xA8 [00011101] 0x1D [00011101] 0x1D
0x87 [10000111] [00111000] 0x38 [00100001] 0x21 [11100001] 0xE1
0x66 [01100110] [00110000] 0x30 [00011001] 0x19 [00011001] 0x19
Soluoparaoproblema2,17(pgina61)
Emgeral,trabalhandoatravsdeexemplosparatamanhosdetextomuitopequenosumaboaforma
compreenderaritmticadocomputador.
OsvaloressemsinaiscorrespondemaosdaFigura2.2.Paraotwo's
valoresdocomplemento,hexdgitosde0a7tmumbitmaissignificativode0,obtendose
valoresnonegativos,enquantodgitoshexadecimais8aFtemumpoucomaissignificativade1,
obtendoseumvalornegativo.

X
hexadecimal Binrio B2U4(x) B2T4(x)
0xE [1110] 23+22+21=14 23+22+21=2
0x0 [0000] 0 0
0x5 [0101] 22+20=5 22+20=5
0x8 [1000] 23=8 23=8
0xD [1101] 23+22+20=13 23+22+20=3
0xF [1111] 23+22+21+20=15 23+22+21+20=1

Soluoparaoproblema2,18(pgina64)
Paraumamquinade32bits,qualquervalorqueconsistedeoitodgitoshexadecimaiscomeando
comumdosdgitos8afrepresentaumnmeronegativo.bastantecom
https://translate.googleusercontent.com/translate_f#202 131/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
comumdosdgitos8afrepresentaumnmeronegativo.bastantecom
monvernmerosquecomeamcomumaseqnciadefde,umavezqueosprincipaisbitsdeum
nmeronegativosotodosqueridos.Vocdeveolharcomcuidado,noentanto.Porexemplo,a
nmero0x8048337temapenassetedgitos.Enchendoissocomumzeroesquerdad
0x08048337,umnmeropositivo.

8048337:81ecb8010000 sub $0x1b8,%esp UMA.440


804833d:8b5508 mov 0x8(%ebp),%edx
8048340:83c214 adicionar$0x14,%edx B. 20
8048343:8b8558feffff mov 0xfffffe58(%ebp),%eaxC.424
8048349:0302 adicionar(%EDX),%eax
804834b:898574feffff mov %eax,0xfffffe74(%ebp)D.396
8048351:8b5508 mov 0x8(%ebp),%edx
8048354:83c244 adicionar$0x44,%edx E. 68
8048357:8b85c8feffff mov 0xfffffec8(%ebp),%eaxF.312

Pgina175

140 Captulo2RepresentaoeManipulaodeInformao

804835d:8902 mov %Eax,(%EDX)


804835f:8b4510 mov 0x10(%ebp),%eax G 16
8048362:03450C adicionar0xc(%ebp),%eax H. 12
8048365:8985ecfeffff mov %eax,0xfffffeec(%ebp)I.276
804836b:8b4508 mov 0x8(%ebp),%eax
804836e:83c020 adicionar$0x20,%eax J. 32
8048371:8b00 mov (%Eax),%eax

Soluoparaoproblema2,19(pgina67)
AsfunesT2UeU2Tsomuitopeculiaresdopontodevistamatemtico.
importanteentendercomoelessecomportam.
Nsresolveresteproblema,reordenandoaslinhasnasoluodoproblemade2,17
deacordocomovalordecomplementodedoise,emseguida,listandoovalorsemsinalcomo
oresultadodaaplicaodefuno.Nsmostramososvaloreshexadecimaisparafazer
esteprocessomaisconcreto.

x(hex) X T2U4(x)
0x8 8 8
0xD 3 13
0xE 2 14
0xF 1 15
0x0 0 0
0x5 5 5

Soluoparaoproblema2,20(pgina68)
EsteexercciotestasuacompreensodaEquao2.6.
Paraosprimeirosquatroentradas,osvaloresdeXsonegativoseT2U4(x)=x+24 .
Paraasrestantesduasentradas,osvaloresdeXsoenonegativosT2U4(X)=x.

Soluoparaoproblema2,21(pgina70)
Esteproblemareforasuacompreensodarelaoentretwo's
complementoerepresentaessemsinal,eosefeitosdepromooC
regras.LembresequeTMin32 2.147.483.648,eque,quandoconvertidoparaunsignedlotornar
vem2147483648.Almdisso,sequalqueroperandoforassinado,depoisooutro
operandoserolanadosparanoassinadoantesdecomparar.

Expresso Tipo Avaliao


21474836471==2147483648U noassinado 1
21474836471<2147483647 assinado 1
21474836471U<2147483647 noassinado 0
21474836471<2147483647 assinado 1
21474836471U<2147483647 noassinado 1

https://translate.googleusercontent.com/translate_f#202 132/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina176

SoluodosProblemas 141

Soluoparaoproblema2,22(pgina74)
Esteexerccioproporcionaumademonstraoconcretadecomoconservasdeextensosinal
ovalornumricodeumarepresentaocomplementodedois.
UMA. [1011]: 23+21+20 = 8+2+1 = 5
B. [11011]: 24+23+21+20 = 16+8+2+1 = 5
C [111011]: 25+24+23+21+20 = 32+16+8+2+1 = 5
Soluoparaoproblema2,23(pgina74)
Asexpressesnestasfunessocomuns"idiomas"Programadeextrair
valoresdeumapalavraemquevrioscamposdebitsforamembalados.elesexploram
oenchimentozeroeassinarestendendopropriedadesdasdiferentesoperaesdedeslocamento.
Observecuidadosamenteaordenaodasoperaesdeelencoededeslocamento.Emfun1,osdeslocamentos
sorealizadasnapalavravarivelsemsinal,e,portanto,solgicas.Emfun2,mudanas
sorealizadasapsafundiopalavraparainte,portanto,soaritmtica.
UMA. W fun1(w) fun2(w)
0x00000076 0x00000076 0x00000076
0x87654321 0x00000021 0x00000021
0x000000C9 0x000000C9 0xFFFFFFC9
0xEDCBA987 0x00000087 0xFFFFFF87
B.Funofun1extraiumvalorentreosdebaixaordem8bitsdoargumento,
dandoumnmerointeirovariandoentre0e255.Funofun2extraiumvalor
dabaixaordem8bitsdoargumento,mastambmrealizaassinarextenso.
Oresultadoserumnmeroentre128e127.
Soluoparaoproblema2,24(pgina76)
Oefeitodotruncamentobastanteintuitivaparanmerossemsinal,masnoparatwo's
complementarnmeros.Esteexercciopermiteexplorarsuaspropriedadesusandomuitopequeno
tamanhosdepalavra.
feitio noassinado complementodedois
Original Truncado Original Truncado Original Truncado
0 0 0 0 0 0
2 2 2 2 2 2
9 1 9 1 7 1
B 3 11 3 5 3
F 7 15 7 1 1
ComoEquao2.9estados,oefeitodestetruncamentoemvaloresnoassinados
simplesmenteencontraroseuresduo,omdulo8.Oefeitodotruncamentoemvaloresassinados
umpoucomaiscomplexa.DeacordocomaEquao2,10,nscalcularprimeiroomdulo8
resduodoargumento.Istovaidarvaloresde0a7paraosargumentosde0a
7,etambmparaosargumentosde8a1.Emseguida,apliqueafunoU2T3 aestes
resduos,dandoduasrepetiesdesequnciasde0a3e4a1.

Pgina177

142 Captulo2RepresentaoeManipulaodeInformao

Soluoparaoproblema2,25(pgina77)
Esteproblemaconcebidoparademonstrarafacilidadecomqueoserrospodemsurgirdevidoao
aconversoimplcitadeassinadoparanoassinado.Parecebastantenaturalparapassarparmetro
comprimentoqueumsemassinatura,jquenuncairiaquererusarumcomprimentonegativo.o
pararcritrioi<=comprimento1tambmparecebastantenatural.Mascombinaresses
doisproduzumresultadoinesperado!
Desdecomprimentoparmetronoassinado,oclculo01realizadautilizando

https://translate.googleusercontent.com/translate_f#202 133/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
aritmticasemsinal,queequivalenteadiomodular.Oresultado,emseguida,
UMAX.Acomparaotambmrealizadautilizandoumacomparaosemsinal,e
umavezquequalquernmeromenorouigualaUmax,acomparaosempremantm!
Assim,ocdigotentaacessarelementosinvlidosdearraya.
Ocdigopodeserfixada,queraodeclararcomprimentoaseruminteiro,oualterando
otestedoloopforparaseri<comprimento.
Soluoparaoproblema2,26(pgina77)
Esteexemplodemonstraumacaractersticasutildearitmticasemsinal,etambma
propriedadeque,porvezes,realizararitmticasemsinalsemperceber.este
podelevaraerrosmuitocomplicado.
A.Paraquecasosserestafunoproduzumresultadoincorreto?Afuno
incorretamenteretornar1quandosmaiscurtodoquet.
B.Expliquecomoesseresultadoincorretoacontece.Umavezquedefinidoparastrlen
produzirumresultadonoassinado,adiferenaeacomparaosoamboscom
putedusandoaritmticasemsinal.QuandosmenordoqueT,adiferena
strlen(s)strlen(t)devesernegativo,masemvezdissotornasegrande,
unsignednmero,oqualmaiordoque0.
C.Mostracomocorrigirocdigoparaqueelefuncionedeformaconfivel.Substituaotestecom
Osseguintes:

regressostrlen(s)>strlen(t)
Soluoparaoproblema2,27(pgina81)
Estafunoumaimplementaodirectadasregrasdadasparadeterminarse
ounoumaadiosemsinaltransborda.

/*Determinarseosargumentospodemseradicionadossemoverflow*/
uadd_okint(semsinalx,ynoassinado){
somaunsigned=x+y
somaderetorno>=x
}
Soluoparaoproblema2,28(pgina82)
Esteproblemaumademonstraosimplesdaaritmticamodulo16.Amaneiramaisfcil
resolvloconverteropadrohexagonalemseuvalordecimalsemsinal.paradiferentedezero
valoresdex,devemoster( x)+x=16.Emseguida,converterocomplementada
4
u

valordevoltaparahex.

Pgina178

SoluodosProblemas 143

X 4Xu

feitio Decimal Decimal feitio


0 0 0 0
5 5 11 B
8 8 8 8
D 13 3 3
F 15 1 1
Soluoparaoproblema2,29(pgina86)
Esteproblemaumexerccioparacertificarquevocentendeucomplementodedois
Adio.
X Y x+y x+5Y
T Caso
12 15 27 5 1
[10100] [10001] [100101] [00101]
8 8 16 16 2
[11000] [11000] [110000] [10000]
9 8 1 1 2
[10111] [01000] [111111] [11111]
2 5 7 7 3
[00010] [00101] [000111] [00111]
12 4 16 16 4
[01100] [00100] [010000] [10000]
Soluoparaoproblema2,30(pgina86)
Estafunoumaimplementaodirectadasregrasdadasparadeterminarse
ounoumaadiodecomplementodedoistransborda.

https://translate.googleusercontent.com/translate_f#202 134/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
/*Determinarseosargumentospodemseradicionadossemoverflow*/
inttadd_ok(intx,inty){
intsoma=x+y
intneg_over=x<0&&y<0&&soma>=0
intpos_over=x>=0&&y>=0&&sum<0
voltarneg_over&&pos_over!
}
Soluoparaoproblema2,31(pgina86)
Seucolegadetrabalhopoderiateraprendido,pormeiodoestudoSeo2.3.2,quetwo's
Almcomplementarformaumgrupoabeliano,eassimaexpresso(x+y)x
seravaliadacomoyindependentementedehaverounoosestourosdeadio,eque
(X+y)ysempreavaliarax.
Soluoparaoproblema2,32(pgina87)
Estafunoirdarvalorescorretos,excetoquandoyTMin.Nestecaso,
temytambmigualaTMin,eassimporfunotadd_okirconsiderarquehaja

Pgina179

144 Captulo2RepresentaoeManipulaodeInformao

estouronegativoemqualqueralturaxnegativo.Naverdade,xynotransbordeparaestes
Casos.
UmalioaseraprendidaapartirdesteexerccioqueTMindevemserincludos
comoumdoscasosemqualquermtododeensaioparaumafuno.
Soluoparaoproblema2,33(pgina87)
Esteproblemaajudaaentendercomplementodedoisnegaousandoumamuitopequena
tamanhodapalavra.
Paraw=4,temosTMin4 =8.Assim8asuaprpriainversaaditivo,enquantooutra
Osvaloressonegadospelanegaointeiro.

X 4 Xt

feitio Decimal Decimal feitio


0 0 0 0
5 5 5 B
8 8 8 8
D 3 3 3
F 1 1 1
Ospadresdebitssoosmesmosqueparaanegaosemsinal.
Soluoparaoproblema2,34(pgina90)
Esteproblemaumexerccioparacertificarquevocentendeucomplementodedois
multiplicao.

Modo X Y Xy truncadaxy
noassinado 4 [100] 5 [101] 20 [010100] 4 [100]
compdois. 4 [100] 3 [101] 12 [001100] 4 [100]
noassinado 2 [010] 7 [111] 14 [001110] 6 [110]
compdois. 2 [010] 1 [111] 2 [111110] 2 [110]
noassinado 6 [110] 6 [110] 36 [100100] 4 [100]
compdois. 2 [110] 2 [110] 4 [000100] 4 [100]
Soluoparaoproblema2,35(pgina90)
Norealistaparatestaressafunoparatodososvalorespossveisdexey.Mesmosevoc
poderiaexecutar10milmilhesdetestesporsegundo,serianecessriomaisde58anosparatestartodas
combinaesquandootipodedadosintde32bits.Poroutrolado,possveltestar
seucdigoescrevendoafunocomtipodedadoscurtaoucaracteree,emseguida,teste
loexaustivamente.
Aquiestumaabordagemmaisbaseadaemprincpios,seguindooconjuntopropostodeargumentos:
1.Sabemosquexypodeserescritocomoa2wbitnmerodecomplementodedois.Deixei
udenotamonmeronoassinadorepresentadapelomenorwpedaos,evdenotam
onmerocomplementodedoisrepresentadapelossuperioreswpedaos.Emseguida,combase
naEquao2.3,podemosverquexy=v2w+u.

https://translate.googleusercontent.com/translate_f#202 135/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina180

SoluodosProblemas 145

Sabemostambmqueu=T2Uw(p),umavezqueestosemsinaletwo's
complementarosnmerosdecorrentesdeummesmopadrodebits,eassimporEquao
ode2,5,podeseescreverL=P+PW1 2W,emquepw1 obitmaissignificativo
dep.Deixandot=v+pw1 ,temosxy=p+t2w.
Quandot=0,temosXY=Pamultiplicaonotransborde.Quando
t=0,temosXY=Pamultiplicaofaztransbordamento.
2.Pordefiniodadivisointeira,dividindoppornonuloxdumquociente
qeumrestortalquep=xq+r,e|r|<|x|.(Nsusamosabsoluta
Osvaloresaqui,porqueossinaisdexerpodemserdiferentes.Porexemplo,dividindo7
pordoisdquociente3e1restante.)
3.Suponhaqueq=y.Entonstemosxy=xy+r+t2w.Apartirdisso,podemosver
quer+t2w=0.Noentanto|r|<|x|2W,eassimestaidentidadepodeconterapenasseT=0,
casoemquer=0.
Suponhaquer=t=0.Emseguida,teremosxy=xq,oqueimplicaquey=q.

Quandoxiguala0,amultiplicaonotransborde,eassimvemosqueonossocdigo
forneceumamaneiraconfivelparatestarseounocomplementodedoismultiplicao
provocatransbordamento.
Soluoparaoproblema2,36(pgina91)
Com64bits,podemosrealizaramultiplicaosemtransbordar.Emseguida,testamos
seconverteroprodutopara32bitsmudaovalor:

1 /*Determinarseosargumentospodemsermultiplicadossemoverflow*/
2 inttmult_ok(intx,inty){
3 /*ProdutoComputesemoverflow*/
4 longlongPLL=(longlong)x*y
5 /*Vejaselanandoparaintpreservaovalor*/
6 voltarPLL==(int)PLL
7 }
Notesequeovazamentodoladodamodireitadalinha4crtica.Se,emvez
escreveualinhacomo

longlongPLL=x*y
oprodutoseriacalculadacomoumvalorde32bits(possivelmentetransbordando)e,emseguida
assinarestendidopara64bits.

Soluoparaoproblema2,37(pgina92)
A.Estamudananoajudaemtudo.Emboraoclculodaasizevai
serprecisa,achamadaparamallocfarcomqueestevaloraserconvertidoemumde32bits
Nmerosemsinal,eassimasmesmascondiesdeexcessovaiocorrer.
B.Commallocterumnmeronoassinadode32bitscomoseuargumento,nopode
possivelmentealocarumblocodemaisde232 bytes,eassimnohnenhumponto
tentaralocaroucopiaressaquantidadedememria.Emvezdisso,afuno

Pgina181

146 Captulo2RepresentaoeManipulaodeInformao

deveabortareretornarNULL,comoilustradopeloseguintesubstituio
chamadaoriginalparamalloc(linha10):

longonoassinadorequired_sizelongo=
ele_cnt*(longlongsemsinal)ele_size
https://translate.googleusercontent.com/translate_f#202 136/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
request_sizesize_t=(size_t)required_size
Se(required_size!=request_size)
/*Overflowdeveterocorrido.Abortaroperao*/
retornarNULL
void*result=malloc(request_size)
if(resultado==NULL)
/*Mallocfalhou*/
retornarNULL
Soluoparaoproblema2,38(pgina93)
NoCaptulo3,veremosmuitosexemplosdainstruoleaemao.o
instruofornecidaparaapoiaraaritmticadeponteiro,masocompiladorC,muitasvezes
usalocomoumamaneiraderealizaramultiplicaoporpequenasconstantes.
Paracadavalordek,podemoscalcularduasmltiplos:2K(quandob0)2ek+1
(Quandobum).Assim,podemoscalcularmltiplos1,2,3,4,5,8e9.

Soluoparaoproblema2,39(pgina94)
Aexpressoapenassetorna(X<<m).Paraveristo,deixeotamanhodapalavraserwparaque
n=w1.FormulrioBafirmaquedevemoscalcular(x<<w)(x<<m),masdeslocando
XparaaesquerdaporWirproduzirovalor0.

Soluoparaoproblema2,40(pgina94)
Esteproblemaexigequevocexperimentarasotimizaesjdescritosetambm
parafornecerumpoucodesuaprpriaingenuidade.

K mudanasAdicionar/Subs
Expresso
6 2 1 (X<<2)+(x<<1)
31 1 1 (X<<5)X
6 2 1 (X<<1)(x<<3)
55 2 2 (X<<6)(x<<3)X

ObservesequeoquartocasousaumaversomodificadadeformaB.Nspodemosver
opadrodebits[110111]comotendoumacorridade6queridoscomumzeronomeio,eassim
aplicamosaregraparaaformaB,masdepoissubtrairotermocorrespondenteao
middlebitzero.

Soluoparaoproblema2,41(pgina94)
Supondosequeaadioeasubtraotmamesmaperformance,aregra
paraescolheraformaA,quandon=m,querseformarquandonpara=m+1,eformaB,quando
n>m+1.

Pgina182

SoluodosProblemas 147

Ajustificaoparaestaregraaseguinte.Suponhaprimeiroquem>1.Quando
n=m,tipoArequerapenasumnicoturno,enquantoqueaformaBrequerdoisturnos
eumasubtraco.Quandonpara=m+1,ambasasformasexigemdoisturnosequerum
adioouumasubtraco.Quandon>m+1,aformaBexigeapenasdoisturnoseum
subtrao,enquantoqueaformaArequernm+1>2turnosenm>1adies.
Paraocasodem=1,obtemosummenordeslocamentoparaambasasformasAeB,eassimo
mesmasregrasseaplicamparaescolherentreosdois.

Soluoparaoproblema2,42(pgina97)
Onicodesafioaquicalcularovissemqualquertesteoucondicional
operaes.Nsusamosotruquequeaexpressox>>31geraumapalavracomtoda
queridossexfornegativo,etodososzerosdeoutraforma.Mascarandoforaosbitsapropriados,
obtemosovalorpolarizaodesejado.

intdiv16(intx){
/*Calcularvisparaser0(x>=0)ou15(x<0)*/
visint=(x>>31)&0xF
retornar(x+bias)>>4
}

Soluoparaoproblema2,43(pgina98)
Descobrimosqueaspessoastmdificuldadecomesteexerccioaotrabalhardi
tamentecomocdigodemontagem.Tornasemaisclaraquandocolocadonaformamostradana
optarith.
PodemosverqueM31X*Mcalculadocomo(x<<5)x.
PodemosverqueN8umvalordepolarizao7,adicionadaquandoYnegativo,eo
https://translate.googleusercontent.com/translate_f#202 137/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
deslocamentoparaadireitade3.

Soluoparaoproblema2,44(pgina99)
Estesproblemas"CPuzzle"fornecerumademonstraoclaradequeosprogramadoresdevem
compreenderaspropriedadesdaaritmticacomputador:
A.(x>0)||(X1<0)
Falso.Sejax2,147,483,648(TMin32 ).Teremos,ento,x1iguala
2147483647(TMax32 ).
B.(X&7)!=7||(X<<29<0)
Verdadeiro.Se(x&7)!=7avaliadacomo0,entotemosdeterpoucox2 iguala1.
Quandodeslocadaparaaesquerdapor29,issovaisetornarobitdesinal.
C.(x*x)>=0
Falso.Quandox65.535(0xFFFF),x*x131.071(0xFFFE0001).
D.x<0||x<=0
Verdadeiro.Sexnonegativo,entoxnopositivo.
E.x>0||x>=0
Falso.Sejax2,147,483,648(TMin32 ).Emseguida,ambosxexsonegativos.

Pgina183

148 Captulo2RepresentaoeManipulaodeInformao

F.x+y==uy+UX
Verdadeiro.ComplementodedoiseadiosemassinaturatmomesmoBEbitnvel
portamento,eelessocomutativa.
G.x*~+uyy*UX==x
Verdadeiro.~yigualaY1.uy*UXigualx*y.Assim,oladodamoesquerdaequivalente
ax*YX+X*Y.
Soluoparaoproblema2,45(pgina102)
CompreenderasrepresentaesbinriasfracionriasumpassoimportanteCompreenso
pcodificaesdepontoflutuante.Esteexercciopermitequevocexperimentaralgunsexsimples
amples.
valorfracionrio representaobinria representaodecimal
1 0,001 0,125
8
3 0,11 0,75
4
25 1,1001 1,5625
16
43 10,1011 2,6875
16
9 1.001 1,125
8
47 101,111 5,875
8
51 11,0011 3,1875
16
Umamaneirasimplesdepensaremrepresentaesbinriasfracionriosrepresen
enviadoumnmerocomoumafracodaformaX
2 .Podemosescreverissoembinriousandoo
k
representaobinriadex,comopontoinseridobinriaskposiesdo
certo.Comoumexemplo,para
16 ,Temos25
25 10 =110012 .Emseguida,coloqueopontobinrio
quatroposiesdadireitaparaobter1.10012 .
Soluoparaoproblema2,46(pgina102)
Namaioriadoscasos,aprecisolimitadadenmerosdepontoflutuantenoumgrande
problema,porquearelaodeerrodeclculoaindabastantebaixa.Nisso
exemplo,noentanto,osistemasensvelaoabsolutadeerro.
A.Podemosverque0.1xtemrepresentaobinria
0.000000000000000000000001100[1100]...
2

B.Comparandoistocomarepresentaobinriade ,Podemosverqueelesimplesmente
10um
220110,Quedecercade9.5410 8 .

C.9.541081006060100.343segundos.
D.0.3432000687metros.
Soluoparaoproblema2,47(pgina107)
Trabalhandoatravsderepresentaesdepontoflutuanteparatamanhosdepalavramuitopequenasajuda
esclarecercomoIEEEpontoflutuantefunciona.Noteseespecialmenteatransioentre
desordenadoevaloresnormalizados.

https://translate.googleusercontent.com/translate_f#202 138/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina184

SoluodosProblemas 149

Bits E E 2E F M 2EM V Decimal


00000 0 0 1 0 0 0 0 0,0
4 4 4
00001 0 0 1 1 1 1 1 0,25
4 4 4 4
00010 0 0 1 2 2 2 1 0,5
4 4 4 2
00011 0 0 1 3 3 3 3 0,75
4 4 4 4
00100 1 0 1 0 4 4 1 1,0
4 4 4
00101 1 0 1 1 5 5 5 1,25
4 4 4 4
00110 1 0 1 2 6 6 3 1,5
4 4 4 2
00111 1 0 1 3 7 7 7 1,75
4 4 4 4
01000 2 1 2 0 4 8 2 2,0
4 4 4
01001 2 1 2 1 5 10 5 2,5
4 4 4 2
01010 2 1 2 2 6 12 3 3,0
4 4 4
01011 2 1 2 3 7 14 7 3,5
4 4 4 2
01100 benzico.
01101 NaN
01110 NaN
01111 NaN

Soluoparaoproblema2,48(pgina110)
valor0x359141hexadecimalequivalenteaobinrio[1101011001000101000001].
Mudandoestedireito21lugaresd1.1010110010001010000012 221 .Nsformamos
ocampodefrao,largandoosprincipais1eadicionandodois0s,dando
[10101100100010100000100].Oexpoenteformadopelaadiodepolarizao12721,
dando148(binrio[10.010.100]).Nscombinamosissocomumcamposinalde0adarum
representaobinria

[01001010010101100100010100000100].

Vemosqueosbitscorrespondentesnasduasrepresentaescorrespondem
bitsdeordeminferiordonmerointeiro,atobitmaissignificativoiguala1correspondentesa
Dealtaordemde21bitsafraco:

0 0 3 5 9 1 4 1
00000000001101011001000101000001
*********************
4 UMA5 6 4 5 0 4
01001010010101100100010100000100

Soluoparaoproblema2,49(pgina110)
Esteexerccioajudaapensarsobreoqueosnmerosnopodemserrepresentadosexatamente
empontoflutuante.

Pgina185

150 Captulo2RepresentaoeManipulaodeInformao

A.Onmerotemrepresentaobinria1,seguidoporn0s,seguidode1,
dandovalor2n 1 +1.
https://translate.googleusercontent.com/translate_f#202 139/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
B.QuandoN=23,ovalorde224 +1=16,777,217.
Soluoparaoproblema2,50(pgina112)
Realizandoarredondamentomoajudaareforaraideiaderoundamesmocom
nmerosbinrios.

Original Arredondado
10.0102 241 10.0 2
10.0112 283 10.1 221
10.1102 243 11.0 3
11.0012 381 11.0 3
Soluoparaoproblema2,51(pgina112)
A.Olhandoparaasequncianonterminatingpor1/10,podemosverqueo
2bitsparaadireitadaposiodearredondamentoso1,eassimummelhorAP
aproxia1/10deveserobtidoporincrementaoXparaobterx=
0.000110011001100110011012 ,quemaiordoque0.1.
B.Podemosverquex0.1temrepresentaobinria:
0.0000000000000000000000000[1100].

Comparandoistocomarepresentaobinriadeum10,Podemosverque
2221 ,Quecercade2.38108 .
10
C.2.381081006060100.086segundos,umfactorde4unidadesmenosqueo
erronosistemaPatriot.
D.0.3432000171metros.
Soluoparaoproblema2,52(pgina112)
Esteproblematestaumasriedeconceitossobreasrepresentaesdepontoflutuante,incluindo
acodificaodevaloresnormalizadosedesnormalizado,bemcomoarredondamento.
formatoA FormatB
Bits Valor Bits Valor Comentrios
0110000 1 0111000 1
1011110 15 1001111 15
2 2
0101001 25 0110100 3 Arredondarparabaixo
32 4
1101111 31 1011000 16 Arredondarparacima
2
0000001 1 0001000 1 Denormnorma
64 64
Soluoparaoproblema2,53(pgina115)
Emgeral,melhorusarumamacrobibliotecaemvezdeinventarseuprpriocdigo.
Estecdigoparecefuncionaremumagrandevariedadedemquinas,noentanto.

Page186

SoluodosProblemas 151

Assumimosqueovalor1e400transbordaparaoinfinito.

#definePOS_INFINITY1e400
NEG_INFINITY#define(POS_INFINITY)
NEG_ZERO#define(1,0/POS_INFINITY)
Soluoparaoproblema2,54(pgina117)
Exerccioscomoesteajudaadesenvolverasuacapacidadederaciocinarsobreflutuante
operaesdepontoapartirdaperspectivadeumprogramador.Certifiquesedeentender
cadaumadasrespostas.
A.x==(int)(double)x
Sim,desdequeodobrotemmaiorprecisoealcancedoqueint.
B.x==(int)(float)x
No.Porexemplo,quandoXTMax.
C.d==(duplo)(float)d
No.Porexemplo,quandod1e40,teremos+direita.
==FD.(float)(double)f
Sim,desdequeodobrotemmaiorprecisoealcancedoquefloat.
E.f==(f)
Sim,umavezqueumnmerodepontoflutuantenegadasimplesmenteinvertendooseubitdesinal.
F.1.0/2==1/2.0

https://translate.googleusercontent.com/translate_f#202 140/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Sim,osnumeradoresedenominadores,ambosseroconvertidosparaflutuante
representaespontoantesdeadivisoexecutada.
G.d*d>=0,0
Sim,emboraestepodetransbordarpara+.
H.(f+d)f==d
N,porexemplo,quandoM1.0e20ed1.0,aexpressof+dser
arredondadopara1.0e20,eassimaexpressonoladoesquerdoiravaliar
a0.0,enquantooladodireitoser1.0.

Pgina187

Estapginafoiintencionalmentedeixadaembranco

https://translate.googleusercontent.com/translate_f#202 141/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina188

CAPTULO

NvelmquinaRepresentao

deProgramas

3.1 UmaPerspectivaHistrica156
3.2 CodificaesPrograma159
3,3 FormatosdeDados167
3,4 AcessosInformaes168
3,5 AritmticaselgicasdeOperaes177
3.6 Controlo185
3,7 procedimentos219
3,8 AlocaomatrizeAcesso232
3.9 EstruturasdeDadosHeterogneos241
3.10 PuttingItTogether:EntendimentoPonteiros252
3.11 Avidanomundoreal:Usandoodepuradorgdb254
3.12 OutofBoundsRefernciasMemriaeBufferOverflow256
3.13 x8664:EstendendoIA32de64bits267
3.14 MquinadeNvelRepresentaesdepontoflutuanteProgramas292
3.15 resumo293
BibliogrficasNotas294
HomeworkProblemas294
SoluodosProblemas308

153

Pgina189

154 Captulo3MachineNvelRepresentaodeProgramas

https://translate.googleusercontent.com/translate_f#202 142/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Computadoresexecutamcdigodemquina,sequnciasdebytesquecodificamaopdebaixonvel
raesquemanipulamdados,gerenciarmemria,leregravardadossobreoarmazenamento
dispositivos,ecomunicaratravsderedes.Umcompiladorgeracdigodemquina
atravsdeumasriedefases,combasenasregrasdalinguagemdeprogramao,o
conjuntodeinstruesdamquinadedestinoeasconvenesseguidopeloopera
Sistema.OcompiladorgccCgerasuasadanaformadecdigodemontagem,
umarepresentaotextualdocdigodemquinadandoasinstruesindividuais
oprograma.gcc,emseguida,invocatantoummontadoreumliganteparageraraexe
cdigodemquinacutabledocdigodemontagem.Nestecaptulo,vamosdarumaestreita
olharparaocdigodemquinaesuarepresentaolegvelcomocdigodemontagem.
Aoprogramaremumalinguagemdealtonvel,comoC,eaindamaisem
Java,estamosprotegidoscontradetalhadaaimplementao,mquinadenveldonossopro
grama.Emcontraste,quandoseescreveprogramasemcdigodemontagem(comofoifeitona
primrdiosdacomputao)umprogramadordeveespecificarasinstruesdebaixonveldas
programausaparalevaracaboumclculo.Namaioriadasvezes,muitomaisprodutiva
tivaeconfivelparatrabalharnomaisaltonveldeabstraofornecidaporumaltonvel
lngua.Averificaodetipofornecidoporumcompiladorajudaadetectarmuitosprograma
errosegarantequereferenciaremanipulardadosdemaneirasconsistentes.Com
moderno,optimizandocompiladores,ocdigogeradogeralmentepelomenostoeficiente
comooqueumhbil,programadorassemblylanguageiriaescrevercomamo.Melhorde
tudo,umprogramaescritoemumalinguagemdealtonvelpodesercompiladoeexecutadoemum
nmerodemquinasdiferentes,aopassoqueocdigodemontagemaltamentemquinaespecfica.
Ento,porquedevemosgastaronossocdigodemquinadeaprendizagemtempo?Mesmoquecom
empilhadeirasfazeramaiorpartedotrabalhonageraodecdigodemontagem,sercapazdelere
entendoqueumahabilidadeimportanteparaosprogramadoressrios.Invocandoocom
pilercomosparmetrosdelinhadecomandoapropriados,ocompiladorirgerarumarquivo
mostrandoasuasadasobaformademontagemdocdigo.Aolerestecdigo,podemossubestimar
suportarascapacidadesdeotimizaodocompiladoreanalisarosubjacente
ineficinciasnocdigo.ComovamosexperimentarnoCaptulo5,osprogramadoresSEEK
ingparamaximizarodesempenhodeumaseocrticadocdigomuitasvezestentamdiferente
variaesdocdigofonte,cadavezcompilareanalisarogerado
cdigodemontagemparaterumanoodequoeficientementeoprogramaserexecutado.Almdisso,
hmomentosemqueacamadadeabstracoproporcionadaporumalinguagemdealtonvel
escondeinformaessobreocomportamentodetempodeexecuodeumprogramaqueprecisamosUN
preender.Porexemplo,aoescreverprogramasconcorrentesusandoumpacotedefio,
comodescritonoCaptulo12,importantesaberoquearegiodememriausadopara
segurarasdiferentesvariveisdoprograma.Estainformaovisvelnomontagem
nveldecdigo.Comooutroexemplo,muitosdosprogramasdeformapodemseratacados,
permitindowormsevrusainfestarumsistema,envolvenuancesdaformapro
gramasarmazenarsuasinformaesdecontroledetempodeexecuo.Muitosataquesenvolvemaexplorao
deficinciasnosprogramasdesistemaparasubstituirasinformaese,assim,assumirocontrole
Dosistema.Acompreensodecomosurgemestasvulnerabilidadesecomoseproteger
contraelesexigeumconhecimentodarepresentaodenveldemquinadepro
GramasAnecessidadedeprogramadoresparaaprenderocdigodemontagemmudouaolongodo
anoapartirdeumdesercapazdeescreverprogramasdirectamenteemconjuntocomumde
sercapazdelerecompreenderocdigogeradoporcompiladores.

Pgina190

155
Captulo3MachineNvelRepresentaodeProgramas

Nestecaptulo,vamosaprenderosdetalhesdeduaslnguasdemontagemparticulares
evercomoprogramasemCsecompiladosemestasformasdecdigodemquina.Leitura
ocdigoassemblygeradoporumcompiladorenvolveumconjuntodiferentedehabilidadesdoque
escrevercdigodemontagemcomamo.Devemosentenderastransformaestpicas
compiladoresfazeremconverterasconstruesdeCemcdigodemquina.Relativoa
osclculosexpressosnocdigoC,compiladoresdeotimizaopodereorganizar
ordemdeexecuo,eliminarclculosdesnecessrios,substituaoperaeslentascom
maisrpidos,eatmesmoalterarclculosrecursivaemunsiterativos.Sob
estandoarelaoentreocdigofonteeoconjuntogeradomuitasvezespode
serumdesafiomuitomaiscomomontarumquebracabeaterumligeiramentediferente
projetoentdoqueaimagemnacaixa.umaformadeengenhariareversatrying
paracompreenderoprocessopeloqualfoicriadoumsistemapormeiodoestudodosistema
etrabalharparatrs.Nestecaso,osistemaumamontagemmquinagerado
programadelinguagem,aoinvsdealgoprojetadoporumserhumano.Istosimplifica
atarefadeengenhariareversa,porqueocdigogeradoseguebastantereg
padresUlar,epodemosrealizarexperincias,tendoocompiladorgerarcdigo
paramuitosprogramasdiferentes.Emnossaapresentao,nsdamosmuitosexemplose
fornecerumasriedeexercciosqueilustramdiferentesaspectosdalinguagemassembly
ecompiladores.Esteumassuntoemquedominarosdetalhesumprrequisitopara
compreenderosconceitosmaisprofundosefundamentais.Aquelesquedizem"EuUN

https://translate.googleusercontent.com/translate_f#202 143/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
preenderosprincpiosgerais,eunoqueroincomodaraaprenderosdetalhes"so
iludindo.fundamentalparaquevocgastetempoestudandoosexemplos,
trabalhandoatravsdosexerccios,everificandosuassoluescomasprevistas.
Nossaapresentaobaseadaemduaslinguagensdemquinarelacionados:IntelIA32,o
lnguadominantedamaioriadoscomputadoresdehoje,ex8664,asuaextensoparaserexecutadoem
mquinasde64bits.NossofococomeacomIA32.processadoresInteltmcrescidode
processadoresde16bitsprimitivosem1978paraasmquinasconvencionaisparasecretriadehoje
top,laptopeservidorcomputadores.Aarquitecturatemcrescidodeformacorrespondente,
comnovascaractersticaseadicionadocomaarquitecturade16bitstransformadoparasetornar
IA32,osdadosdesuportede32bitseendereos.Oresultadoumdesignbastantepeculiar
comcaractersticasquesfazemsentidoquandovistodeumaperspectivahistrica.isto
Tambmcarregadocomcaractersticasquefornecemcompatibilidadecomversesanterioresquenosoutilizadospor
modernacompiladoresesistemasoperacionais.VamosnosconcentrarnosubconjuntodaFEA
turasutilizadasporgcceLinux.Issonospermiteevitargrandepartedacomplexidadee
caractersticasarcanasdeIA32.
NossaapresentaotcnicacomeacomumavisitarpidaparamostrararelaoBE
tweenC,cdigodemontagemecdigodemquina.Ns,ento,avanarparaosdetalhes
IA32,comeandocomarepresentaoemanipulaodedadoseaimple
mentaodecontrole.VemoscomoconstruesdecontroleemC,comose,aomesmotempo,e
instruesswitch,soimplementadas.Emseguida,cobriraimplementaodepro
procedimentos,incluindoaformacomooprogramamantmumapilhadetempodeexecuoparaapoiaro
passagemdedadosedecontroleentreosprocedimentos,bemcomoarmazenamentoparavarivellocal,
capazes.Emseguida,vamosconsiderarcomoestruturasdedados,comomatrizes,estruturaseunies
soimplementadosnonveldamquina.Comestecenrioemprdenveldemquina
gramao,podemosexaminarosproblemasdeforaderefernciasdememrialimitese
avulnerabilidadedossistemasdeataquesdebufferoverflow.Nsterminamosestapartedo

Pgina191

156 Captulo3MachineNvelRepresentaodeProgramas

apresentaocomalgumasdicassobrecomousarodepuradorgdbpelaanlisedotempodeexecuo
comportamentodeumprogramadenveldemquina.
Comodiscutiremos,aextensodoIA32para64bits,denominadox8664,eraoriginrio
nalmentedesenvolvidopelaAdvancedMicroDevices(AMD),amaiorconcorrentedaIntel.
Considerandoumamquinade32bitsspodefazerusodecercade4gigabytes(232 bytes)de
memriadeacessoaleatrio,mquinasde64bitsatuaispodemusarat256terabytes(248
bytes).Aindstriadecomputadoresestatualmentenomeiodeumatransioapartirde32
bitparamquinasde64bits.Amaioriadosmicroprocessadoresemrecentedeservidoresedesktops
mquinas,bemcomoemmuitoslaptops,apoiarqualqueroperaode32bitsou64bits.
Noentanto,amaioriadossistemasoperacionaisemexecuonessasmquinassuportamapenas
aplicativosde32bits,eassimascapacidadesdohardwarenosointeiramenteutilizadas.
Comoospreosdememriagota,eodesejoderealizarclculosenvolvendomuito
grandesconjuntosdedadosaumenta,mquinasde64bitseaplicativossetornarocomum
Lugar,colocar.,portanto,adequadoparatomarumolharmaisatentosobrex8664.Veremosquena
fazeratransiode32para64bits,osengenheirosdaAMDtambmincorporou
caractersticasquefazemasmquinasmelhoresalvosparacompiladoresdeotimizaoeque
melhorarodesempenhodosistema.
NsfornecemosWebapartesparacobriromaterialdestinadoparamquinadedicado
entusiastasdalinguagem.Emumdeles,vamosexaminarocdigogeradoquandoocdigocom
empilhadosusandograusmaiselevadosdeotimizao.Cadaversosucessivadogcc
compiladorimplementaalgoritmosdeotimizaomaissofisticados,eestespodem
transformarradicalmenteumprogramaparaopontoondedifcilentenderore
laoentreocdigofonteoriginaleoprogramadenveldemquinagerado.
OutroWebAlmdumabreveapresentaodeformasdeincorporarassembly
cdigoemprogramasC.Paraalgumasaplicaes,oprogramadordevecairparabaixo
aocdigodemontagemparaacessarosrecursosdebaixonveldamquina.Umaabordagema
escreverfunesinteirasnocdigodemontagemecombinloscomfunesCdurante
oestgiodeligao.Asegundausaroapoiodogccparaaincorporaodecdigodemontagem
diretamentedentroprogramasC.NsfornecemosAsidesWebseparadosparadoisdiferentes
linguagensdemquinaparaocdigodepontoflutuante.Asinstruesdepontoflutuante"x87"
estodisponveisdesdeosprimeirosdiasdeprocessadoresIntel.estaimplementao
depontoflutuanteparticularmentearcano,eporissoaconselhaqueapenasaspessoasdeter
minadoatrabalharcomcdigodepontoflutuanteemmquinasantigastentarestudareste
seo.Foramdesenvolvidasasrecentesinstruesmais"SSE"parasuportarmulti
aplicativosdemdia,masemsuasversesmaisrecentes(verso2eposterior),e
comasversesmaisrecentesdogcc,SSEsetornouomtodopreferidoparamap
depingpontoflutuanteemambosIA32emquinasx8664.

3.1UmaPerspectivaHistrica

AlinhadeprocessadoresIntel,coloquialmenteconhecidocomox86,temseguidoumlongo,evo

https://translate.googleusercontent.com/translate_f#202 144/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
desenvolvimentolutionary.Tudocomeoucomumdosprimeirossinglechip,de16bitsmicropro
processadores,ondemuitasconcessestiveramdeserfeitasdevidoscapacidadeslimitadas
detecnologiadecircuitosintegradosnotempo.Desdeento,temcrescidoaterad
devistademelhoriastecnolgicas,bemcomoparasatisfazerasdemandasparamaior
desempenhoeparasuportarmaissistemasoperacionaisavanados.

Pgina192

157
Seo3.1UmaPerspectivaHistrica

AlistaaseguirmostraalgunsmodelosdeprocessadoresIntelealgunsdosseus
caractersticaschave,especialmenteasqueafectamaprogramaodenveldemquina.Nsusamoso
nmerodetransistoresnecessrioparaimplementarosprocessadorescomoumaindicaode
comoelesevoluramemcomplexidade(Kdenota1000,eMdenota1.000.000).

8086:(1978,29Ktransistores).Umdosprimeirossinglechip,de16bitsmicroproces
SorsA8088,umavariantedo8086comumbusexternode8bits,formado
ocoraodoscomputadorespessoaisIBMoriginal.IBMcontratadascom
emseguida,tinyMicrosoftparadesenvolverosistemaoperacionalMSDOS.oorigi
modelosinalveiocom32.768bytesdememriaeduasunidadesdedisquete(sem
discorgido).Arquiteturalmente,asmquinasforamlimitadasaum655,360bytes
AddressSpaceendereoseramapenas20bitsdecomprimento(1.048.576bytesEndereo
capaz),eosistemaoperacionalreservados393,216bytesparaseuprpriouso.
Em1980,aIntellanouocoprocessador8087depontoflutuante(45Ktran
chaveados)paraoperarjuntamentecomumprocessador8086ou8088,aexecuodo
instruesdepontoflutuante.O8087estabelecidoomodelodepontoflutuante
paraalinha86,muitasvezesreferidacomo"x87".
80286:(1982,134Ktransistores).Adicionadomais(eagoraobsoleto)abordando
Modos.FormaramabasedocomputadorpessoalIBMPCAT,o
plataformaoriginalparaoMSWindows.
i386:(1985,275Ktransistores).Expandiuaarquiteturade32bits.Adicionadoo
modelodeendereamentoplanousadopeloLinuxeversesrecentesdoWindows
famliadesistemaoperativo.Estafoiaprimeiramquinadasrieque
poderiaapoiarumsistemaoperacionalUnix.
i486:(1989,1,2Mtransistores).Melhordesempenhoeintegrouo
unidadedepontoflutuanteparaochipdoprocessador,masnoalterousignificativamente
oconjuntodeinstrues.
Pentium:(1993,3,1Mtransistores).Melhordesempenho,masapenasadicionado
menoresextensesparaoconjuntodeinstrues.
PentiumPro:(1995,5,5Mtransistores).Introduziuumradicalmentenovoprocessador
design,conhecidointernamentecomooP6microarquitetura.Adicionadoumaclassede
instrues"Movecondicional"paraoconjuntodeinstrues.
PentiumII:(1997,7Mtransistores).ContinuaodamicroarquiteturaP6.
PentiumIII:(1999,8,2Mtransistores).IntroduzidoSSE,umaclassedeinstrues
paramanipularvetoresdedadosinteirooudepontoflutuante.Cadadadopode
ser1,2ou4bytes,embaladosemvetoresde128bits.Versesposterioresdopresente
chipssubiupara24Mtransistores,devidoincorporaodonvel2
cacheemchips.
Pentium4:(2000,42Mtransistores).ExtensoSSEparaSSE2,adicionandonovosdados
tipos(incluindopontoflutuantedeprecisodupla),juntamentecom144novos
instruesparaestesformatos.Comessasextenses,compiladorespodemusar
instruesSSE,emvezdeinstruesx87,paracompilardepontoflutuante
cdigo.IntroduziuoNetBurstmicroarquitetura,oquepoderiaoperara
muitoaltavelocidadesderelgio,mascustadeconsumodeenergiaelevado.

Pgina193

https://translate.googleusercontent.com/translate_f#202 145/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

158 Captulo3MachineNvelRepresentaodeProgramas

4EPentium:(2004,125Mtransistores).Adicionadohyperthreading,ummtodoparaexecutar
doisprogramassimultaneamentenumnicoprocessador,bemcomoEM64T
implementaodeumaextensode64bitsdaIntelparaia32desenvolvidopelaAd
AdvancedMicroDevices(AMD),quenosreferimoscomox8664.
Core2:(2006,291Mtransistores).Voltouparaamicroarquiteturasemelhante
aP6.PrimeiromulticoreIntelmicroprocessador,ondemltiplosprocessadoresso
implementadosemumnicochip.nosuportamhyperthreading.
Corei7:(2008,781Mtransistores).Incorporadastantohyperthreadinge
multicore,comaversoinicialapoiardoisprogramasemexecuo
emcadancleoeatquatroncleosemcadachip.

Cadatransformadorfoiconcebidoparasercompatibletrs
capazdeexecutarcdigocompiladoparaqualquerversoanterior.Comoveremos,hmuitos
artefatosestranhosnoconjuntodeinstruesdevidoaessaheranaevolutiva.Inteltem
tevevriosnomesparaasualinhadeprocessadores,incluindoIA32,para"IntelArchitecture
32bit",emaisrecentementeIntel64,aextensode64bitsparaIA32,aoqualnosreferimos
comox8664.Nsenviamosparaalinhageralpelacoloquialcomumenteusado
nomear"x86",refletindooprocessadorconvenesdenomenclaturaparacimaatravsdoi486.

AlmleideMoore

Intelcomplexidademicroprocessador
1.0E+09 corei7
Core2Duo
4ePentium
1.0E+08 Pentium4
1.0E+07 PentiumPro PentiumIII
PentiumII
i486 Pentium
1.0E+06
ransistors
T 80286 i386
1.0E+05
8086
1.0E+04
1975 1980 1985 1990 1995 2000 2005 2010
Ano

SemarcamosonmerodetransistoresemdiferentesprocessadoresIntelemrelaoaoanodeintroduoe
usarumaescalalogartmicaparaoyaxis,podemosverqueocrescimentotemsidofenomenal.Montagemdeumalinha
atravsdosdados,vemosqueonmerodetransistoresaumentaaumataxaanualdeaproximadamente
38%,oquesignificaqueonmerodetransistoresdobraacada26meses.Estecrescimentotemsido
sustentadoaolongodahistriadevriasdcadademicroprocessadoresx86.

Pgina194

159
Codificaesseco3.2doPrograma

Em1965,GordonMoore,umdosfundadoresdaIntelCorporation,extrapoladaapartirdatecnologiadechip
dodia,emqueelespoderiamfabricarcircuitoscomcercade64transistoresemumnicochip,paraprever
queonmerodetransistoresporchipdobrariaacadaanoparaosprximos10anos.estepredicao
ficouconhecidocomoaleideMoore.Comosev,asuaprevisoeraapenasumpoucootimista,mastambmmuito
mope.Aolongodemaisde45anos,aindstriadesemicondutorestemsidocapazdetransistorduplo
contagens,emmdia,acada18meses.
Astaxasdecrescimentoexponencialsemelhantesocorreramparaoutrosaspectosdocomputadortecnologiadedisco
capacidades,capacidadesdechipsdememriaedesempenhodoprocessador.Estastaxasdecrescimentonotveistm
sidoasprincipaisforasmotrizesdarevoluodocomputador.

Aolongodosanos,vriasempresastmproduzidoprocessadoresqueestocom
patvelcomprocessadoresIntel,capazdeexecutarexatamenteomesmonveldemquina
programas.AprincipaldelasaAdvancedMicroDevices(AMD).Poranos,
AMDdefasadaapenasatrsdaIntelemtecnologia,forandoumaestratgiademarketing,onde
elesproduziramprocessadoresqueerammenosdispendioso,emboraumtantoinferiorem
desempenho.Elessetornarammaiscompetitivosporvoltade2002,sendooprimeiroaquebrar
https://translate.googleusercontent.com/translate_f#202 146/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
o1gigahertzbarreirarelgiodevelocidadeparaummicroprocessadordisponvelcomercialmente,
eintroduzindox8664,aextensode64bitsamplamenteadotadoparaIA32.Apesar
vamosfalarsobreprocessadoresIntel,anossaapresentaomantmtobemparao
processadorescompatveisproduzidosporrivaisdaIntel.
Grandepartedacomplexidadedox86nomotivodepreocupaoparaosinteressadosemprogramas
paraosistemaoperacionalLinuxcomogeradopelocompiladorgcc.Amemria
modelofornecidonooriginal8086esuasextensesno80286soobsoletos.
Emvezdisso,oLinuxutilizaoquereferidocomoplanodeendereamento,ondetodaamemria
espaovistapeloprogramadorcomoumagrandevariedadedebytes.
Comopodemosvernalistadeacontecimentos,umnmerodeformatoseinstrues
foramadicionadosa86paraamanipulaodevectoresdeinteirospequenoseflutuante
Nmerosdeponto.Essesrecursosforamadicionadosparapermitirmelhordesempenhoem
aplicaesmultimdia,taiscomoprocessamentodeimagem,udioecodificaodevdeo
edecodificao,etridimensionaiscomputaogrfica.Emsuainvocaopadro
paraexecuode32bits,ogccassumequeestagerarcdigoparaumi386,embora
existemmuitopoucosdestesmicroprocessadores1985daeraemexecuopormaistempo.Apenaspela
dandoopesdelinhadecomandoespecficas,oucompilandoparaumaoperaode64bits,ser
ocompiladorfazerusodasextensesmaisrecentes.
Paraaprximapartedanossaapresentao,vamosnosconcentrarapenasnainstruoIA32
odefinido.Vamosentoolharparaaextensopara64bitsviax8664paraofimde
ocaptulo.

3.2CodificaesPrograma

SuponhaqueescreverumprogramaemCcomodoisarquivosp1.cep2.c.Podemos,ento,compilar
estecdigoemumamquinaIA32usandoumalinhadecomandoUnix:

unix>gccO1opp1.cp2.c

Pgina195

160 Captulo3MachineNvelRepresentaodeProgramas

OgcccomandoindicaocompiladorgccC.Umavezqueesteocompiladorpadro
noLinux,tambmpoderamoschamlosimplesmentecomocc.AopodelinhadecomandoO1
instruiocompiladorparaaplicarnvelumotimizaes.Emgeral,aumentandoo
nveldeotimizaofazcomqueoprogramafinalcorrermaisrpido,masaumriscodeaumento
tempodecompilaoeasdificuldadesquefuncionamferramentasdedepuraonocdigo.Comovamos
vertambm,invocandonveismaisaltosdeotimizaopodegerarocdigoquetofortemente
transformadaquearelaoentreocdigoeamquinagerado
cdigofonteoriginaldifcildeentender.Vamos,portanto,usardenvelum
otimizaocomoumaferramentadeaprendizagemedepoisveroqueacontecemedidaqueaumentaronvel
deotimizao.Naprtica,anveldedoisoptimization(especificadocomoO2opo)
consideradoumaescolhamelhoremtermosdedesempenhodoprogramaresultante.
Ocomandogccrealmenteinvocaumasequnciadeprogramasparaligarafonte
cdigoemcdigoexecutvel.Primeiro,oCprprocessadorexpandeocdigofontepara
incluirquaisquerarquivosespecificadoscomcomandos#includeeexpandirasmacros,
especificadacomdeclaraes#define.Emsegundolugar,ocompiladorgeramontagem
versesdecdigodosdoisarquivosdeorigemternomesp1.sep2.s.Emseguida,o
montadorconverteocdigodemontagemembinrioobjetodecdigodearquivosp1.oep2.o.
cdigodeobjetoumaformademquinadecodecontmrepresentaesbinriasdetodos
dasinstrues,masosendereosdosvaloresglobaissoaindanopreenchida.Finalmente,
ovinculadormesclaessesdoisarquivosobjetodecdigojuntamentecombibliotecadecdigodeexecuo
funes(porexemplo,printf)egeraafinalexecutvelarquivodecdigop.Executvel
cdigoasegundaformadecdigodemquina,vamosconsideraritaformaexata
decdigoqueexecutadopeloprocessador.Arelaoentreessesdiferentes
formasdecdigodemquinaeoprocessodeligaodescritoemmaisdetalheem
Captulo7.

3.2.1Mquinadenveldecdigo
ConformedescritonaSeo1.9.2,sistemasdecomputadoresempregamvriasformasdiferentes
deabstraco,escondendodetalhesdeumaaplicaoatravsdautilizaodeumasim
teiromodeloabstrato.Duasdelassoespecialmenteimportantesparadenveldemquina
programao.Emprimeirolugar,oformatoeocomportamentodeumprogramadenveldemquinade
multadopelaarquiteturadoconjuntodeinstrues,ou"ISA",definindooestadodoprocessador,
oformatodasinstrues,eoefeitodecadaumadessasinstruester
sobreoestado.Amaioriadasnormasdeauditoria,incluindoIA32ex8664,descreverocomportamentode
umprogramacomosecadainstruoexecutadaemsequncia,comumainstruo
completarantesdoprximocomea.Ohardwaredoprocessadormuitomaiselab
orate,executandomuitasinstruessimultaneamente,maselesempregamsalvaguardaspara

https://translate.googleusercontent.com/translate_f#202 147/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
assegurarqueocomportamentoglobalcorrespondeaoperaosequencialditadapela
UM.Emsegundolugar,osendereosdememriausadosporumprogramadenveldemquinasovir
endereostuais,fornecendoummodelodememriaquepareceserumgrandebyte
Matriz.Aimplementaorealdosistemadememriaenvolveumacombinao
devriasmemriasdehardwareesoftwaredosistemaoperativo,talcomodescritoem
Captulo9.
Ocompiladorfazamaioriadotrabalhonasequnciaglobalcompilao,
transformandoprogramasexpressosnomodelodeexecuorelativamenteabstractapro

Pgina196

161
Codificaesseco3.2doPrograma

fornecidapelosCnasinstruesmuitoelementaresqueoprocessadorexecuta.o
representaomontagemdecdigomuitoprximoaocdigodemquina.Suaprincipalcaracterstica
queestemumformatodetextomaislegvel,emcomparaocomoformatodebinrio
Cdigodamquina.Sercapazdeentenderocdigodemontagemecomoserelacionacomo
Ccdigooriginalumpassofundamentalnacompreensodecomooscomputadoresexecutarprogramas.
cdigodemquinaIA32diferegrandementedocdigooriginalC.Partesdo
estadodoprocessadorsovisveisquenormalmentesoescondidosdoprogramadorC:

. Ocontadordeprograma(comumentereferidocomoo"PC",echamou%eipem
IA32)indicaoendereonamemriadaprximainstruoaserexecutada.
. Ointeiroarquivoderegistrocontmoitolocaisnomeadosarmazenamentodevaloresde32bits.
Essesregistrospodemconterendereos(correspondentesaosponteirosC)ouinteiro
dados.Algunsregistossousadosparamanterocontroledepartescrticasdoprograma
estado,enquantooutrossousadosparaarmazenardadostemporrios,comoasvariveislocais
deumprocesso,eovaloraserdevolvidoporumafuno.
. Osregistrosdecdigodecondioarmazenarinformaesdestatussobreomaisrecentemente
aritmticaexecutadaouinstruolgica.Estessoutilizadosparaimplementarcon
mudanasnalnofluxodecontroleoudados,comonecessrioparaimplementar
Seequandoasdeclaraes.
. Umconjuntodedadosdepontoflutuantedepontoflutuanteregistosdeloja.

ConsiderandoCforneceummodeloemqueobjetosdediferentestiposdedadospodemser
declaradosealocadosnamemria,ocdigodemquinavisualizaamemriasimplesmentecomo
umagrandevariedade,byteenderevel.tiposdedadosagregadosemCcomomatrizese
estruturassorepresentadasemcdigodemquina,comocoleescontguosdebytes.
Mesmoparaostiposdedadosescalares,cdigodemontagemnofazdistinesentreassinadoou
inteirossemsinal,entrediferentestiposdeponteiros,oumesmoentreosponteiros
einteiros.
Amemriadeprogramacontmocdigodemquinaexecutvelparaoprograma,
algumasinformaesexigidaspelosistemaoperacional,umapilhadetempodeexecuoparaagesto
chamadasdeprocedimentoeretornos,eblocosdememriaalocadapelousurio(por
exemplo,usandoafunodebibliotecamalloc).Comomencionadoanteriormente,oprograma
memriasoosdestinatriosusandoendereosvirtuais.Emumdeterminadomomento,apenaslimitada
subrangesdeendereosvirtuaissoconsideradosvlidos.Porexemplo,emborao
endereosdeIA32de32bitspotencialmenteabrangemumagamade4gigabytesdevaloresdeendereo,um
tpicoprogramasteracessoaalgunsmegabytes.Osistemaoperativo
gereesteespaodeendereovirtual,traduzirendereosvirtuaisparaofsico
endereosdosvaloresnamemriadoprocessadorreal.
Anicainstruodemquinarealizaapenasumaoperaomuitoelementar.Para
exemplo,podeadicionardoisnmerosarmazenadosnosregistos,transferirdadosentre
memriaeumregisto,ouramocondicionalparaumnovoendereodeinstruo.o
compiladordevegerarseqnciasdetaisinstruesparaimplementarprograma
construes,comoaavaliaoaritmticaexpresso,loops,ouchamadasdeprocedimentoe
Retorna.

Pgina197

https://translate.googleusercontent.com/translate_f#202 148/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

162 Captulo3MachineNvelRepresentaodeProgramas

Almconstantemudanaformasdecdigogerado
Emnossaapresentao,vamosmostrarocdigogeradoporumadeterminadaversodegcccomespecial
definiesdasopesdelinhadecomando.Sevoccompilarocdigoemsuaprpriamquina,provvelquevocser
usandoumcompiladordiferenteouumaversodiferenteofgccand,consequentemente,irgerarcdigodiferente.Aabertura
comunidadedecdigodeapoiogcccontinuaamudarogeradordecdigo,atentativadegerarmais
cdigoeficientedeacordocommudanasnasdiretrizesdecdigofornecidospelosfabricantesdemicroprocessadores.
Nossoobjetivoemestudarosexemplosmostradosnanossaapresentaodemonstrarcomoexaminar
cdigodemontagememapeladevoltaparaasconstruesencontradasemlinguagensdeprogramaodealtonvel.Vocir
precisamseadaptarestastcnicasparaoestilodecdigogeradopeloseucompiladorparticular.

3.2.2Exemplosdecdigo
Suponhaqueescreverumacode.carquivodecdigoCquecontmoseguinteprocedimentodefinio
o:

1 intaccum=0
2
3 somaint(intx,inty)
4 {
5 intt=x+y
6 accum+=t
7 retornart
8 }
ParaverocdigoassemblygeradopelocompiladorC,podemosusaraopo"S"
nalinhadecomando:

unix>gccO1Scode.c
Issofarcomquegccparaexecutarocompilador,gerandoumcode.sarquivodemontagem,eir
nomais.(Normalmenteseriaentochamaroassemblerparagerarumobject
arquivodecdigo.)
Oarquivodemontagemdecdigocontmvriasdeclaraes,incluindooconjuntodelinhas:
soma:
pushl %ebp
movl %Esp,%ebp
movl 12(%ebp),%eax
addl 8(%ebp),%eax
addl %Eax,accum
popl %ebp
ret
Cadalinharecuadanocdigoacimacorrespondeaumanicainstruodemquina.
Porexemplo,ainstruopushlindicaqueocontedodoregisto%EBP
devesercolocadonapilhadoprograma.Todasasinformaessobreavarivellocal
nomesoutiposdedadostenhasidoarrancada.Aindavemosumarefernciaaoglobal

Pgina198

163
Codificaesseco3.2doPrograma

accumvarivel,umavezqueocompiladoraindanodeterminouondenamemriaeste
varivelvaiserarmazenado.
Seusarmosaopo'c'delinhadecomando,gccseroamboscompilaremontar
ocdigo:
unix>gccO1ccode.c
Issoirgerarumarquivocode.oobjetocdigoqueestemformatobinrioe,portanto,
nopodeservistodiretamente.Incorporadodentrodos800bytesdoarquivoumcode.o
sequnciade17bytesterrepresentaohexadecimal
5589e5c38b450C0345080105000000005d
Esteocdigodeobjectocorrespondentesinstruesdemontagemacimamencionados.UMA
principallioaaprendercomistoqueoprogramarealmenteexecutadapelamquina
simplesmenteumasequnciadebytesquecodificamumasriedeinstrues.Amquinatem

https://translate.googleusercontent.com/translate_f#202 149/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
muitopoucainformaosobreocdigofonteapartirdaqualessasinstrueseram
Gerado.

AlmComofaoparaencontrararepresentaobytedeumprograma?
Paragerarestesbytes,utilizouseumdesintegrador(aserdescritoadiante)paradeterminarseocdigode
soma17bytesdecomprimento.EntocorremosogdbferramentadedepuraoGNUemcode.oarquivoedeulheocomando
(GDB)xsoma/17xb
dizendolheparaexaminar(abreviado'X')17hexformatado(tambmabreviado'x')bytes(abreviado'b').
Vocvaidescobrirquegdbtemmuitosrecursosteisparaanalisarosprogramasdenveldemquina,comoser
discutidonaSeo3.11.

Parainspecionarocontedodosarquivosdamquinadecdigo,umaclassedeprogramasconhecidoscomo
disassemblerspodeserinestimvel.Estesprogramasdegerarumformatosemelhanteao
cdigodemontagemapartirdocdigodemquina.ComsistemasLinux,oprogramadeobjdump
(Para"despejodeobjeto")podeserviraestepapelatribudoabandeiradelinhadecomando'd':
unix>objdumpdcode.o
Oresultado(ondensadicionamosnmerosdelinhaesquerdaeanotaesem
textoemitlico)comosesegue:
Desmontagemdafunosomanoarquivobinriocode.o
1 00000000<soma>:
compensar
bytes linguagemassemblyequivale
2 0: 55 empurrar%ebp
3 1: 89e5 mov %Esp,%ebp
4 3: 8b450C mov 0xc(%ebp),%eax
5 6: 034508 adicionar0x8(%ebp),%eax
6 9: 010500000000 adicionar%Eax,0x0
7 f: 5d estouro %ebp
8 10: c3 ret

Pgina199

164 Captulo3MachineNvelRepresentaodeProgramas

esquerda,vemosos17valoresdebytehexadecimaislistadosnasequnciadebytes
maiscedo,divididaemgruposde1a6bytescada.Cadaumdestesgruposum
SingleInstruction,comoequivalenteemlinguagemdemontagemmostradodireita.
Vriosrecursossobreocdigodemquinaesuarepresentaodesmontadoso
Valenada:
. instruesIA32podemvariaremcomprimentode1a15bytes.Ainstruo
codificaoprojetadodemodoqueasinstruesdeusocorrenteeaquelescommenos
operandosrequeremummenornmerodebytesdoqueosmenoscomunsouaqueles
commaisoperandos.
. Oformatodeinstruoconcebidodetalmaneiraqueapartirdeumadeterminadapartida
posio,existeumanicadescodificaodosbyteseminstruesdemquina.
Porexemplo,apenasainstruopushl%EBPpodecomearcom55valordebyte.
. Odesmontadordeterminaocdigodemontagempuramentebaseadoembyte
sequnciasnoarquivodecdigodemquina.Elenorequeracessofonteou
versesconjuntodecdigodoprograma.
. Odesmontadorusaumaconvenodenomenclaturaligeiramentediferenteparaainstruo
esdoqueocdigoassemblygeradopelogcc.Nonossoexemplo,elapossui
omitidoosufixo"L"demuitasdasinstrues.Estessufixossodetamanho
designadoresepodeseromitidonamaioriadoscasos.
Gerarocdigoexecutvelrealrequeraexecuodeumligantenoset
dearquivosdecdigoobjeto,umdosquaisdeveconterumafunoprincipal.Suponhaquenoarquivo
main.ctivemosaseguintefuno:

1 intmain()
2 {
3 regressosoma(1,3)
4 }
Emseguida,poderiagerarumaprogprogramaexecutvelcomosesegue:

unix>gccO1oprogcode.omain.c
Oprogarquivocresceupara9.123bytes,umavezquecontmnoapenasocdigoparaonosso
doisprocedimentos,mastambminformaesusadasparainiciareterminaroprogramacomo
bemcomodeinteragircomosistemaoperativo.Nstambmpodedesmontaroprogarquivo:
https://translate.googleusercontent.com/translate_f#202 150/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

unix>objdumpprogd
Odesmontadorirextrairvriassequnciasdecdigos,incluindooseguinte:

Desmontagemdafunosomanoarquivoexecutvelprog
1 08048394<soma>:
compensarbytes linguagemassemblyequivale
2 8048394:55 empurrar%ebp
3 8048395:89e5 mov %Esp,%ebp
4 8048397:8b450C mov 0xc(%ebp),%eax

Pgina200

165
Codificaesseco3.2doPrograma

5 804839a:034508 adicionar0x8(%ebp),%eax
6 804839d:0105180408a0 adicionar%Eax,0x804a018
7 80483a3:5d estouro %ebp
8 80483a4:C3 ret
Estecdigoquaseidnticoaoquegeradopeladesmontagemdecode.c.1
importantediferenaqueosendereoslistadosaolongodaesquerdasodiferentesa
ligadormudoualocalizaodestecdigoparaumagamadiferentedeendereos.UMA
segundadiferenaqueoligantetenhadeterminadoolocaldearmazenamentoglobais
accumvarivel.Nalinha6dadesmontagemparacode.o,oendereodoaccumfoi
listadocomo0.Nodesmontagemdeprog,oendereofoidefinidopara0x804a018.este
mostradonaentregademontagemdecdigodeinstruo.Tambmpodeservistona
4ltimosbytesdainstruo,listadosdemenossignificativoparaamaioriacomo18a00408.

3.2.3Notassobreaformatao
Ocdigoassemblygeradopelogccdifcilparaumserhumanoparaler.Porumlado,
elecontminformaescomasquaisnoprecisasepreocupar,enquanto,poroutro
lado,elenofornecequalquerdescriodoprogramaoucomoelefunciona.Para
exemplo,suponhaqueosimple.carquivocontmoseguintecdigo:

1 intsimples(int*xp,inty)
2 {
3 intt=*xp+y
4 *Xp=t
5 retornart
6 }
Quandogccexecutadocombandeiras's'e'O1',elegeraoseguintearquivopara
simple.s:

.Arquivo "Simple.c"
.texto
simples.globl
.tipo simples,funo@
simples:
pushl %ebp
movl %Esp,%ebp
movl 8(%ebp),%edx
movl 12(%ebp),%eax
addl (%EDX),%eax
movl %Eax,(%EDX)
popl %ebp
ret
.Tamanhosimples,.simples
.ident"GCC:(Ubuntu4.3.21ubuntu11)4.3.2"
.seo .note.GNUstack,"",@progbits

https://translate.googleusercontent.com/translate_f#202 151/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Pgina201

166 Captulo3MachineNvelRepresentaodeProgramas

Todasaslinhasquecomeamcom'.'sodiretrizesparaorientaramontadorae
ligante.Geralmentepodemosignorlos.Poroutrolado,nohexplicativa
Observaessobreoqueasinstruesfazeroucomoelesserelacionamcomocdigofonte.
Parafornecerumaapresentaomaisclaradocdigodemontagem,vamosmostrloemumformulrio
queomiteamaioriadasdirectivas,enquantoincluindonmerosdelinhaeexplicativa
anotaes.Paraonossoexemplo,umaversoanotadaapareceriadaseguintemaneira:

1 simples:
2 pushl %ebp Salvarponteirodoquadro
3 movl %Esp,%ebp Criarnovoponteirodoquadro
4 movl 8(%ebp),%edx recuperarxp
5 movl 12(%ebp),%eax recuperary
6 addl (%EDX),%eax Adicionar*XPparaobtert
7 movl %Eax,(%EDX) Lojatnoxp
8 popl %ebp Restaurarponteirodoquadro
9 ret Retorna

Nsnormalmentemostrarapenasaslinhasdecdigorelevantesparaopontoqueestsendodiscutido.
Cadalinhanumeradaesquerdapararefernciaeanotadosdireitaporum
brevedescriodoefeitodainstruoecomoserelacionacomocomputacional
esdocdigoCoriginais.Estaumaversoestilizadadoconjuntodelnguamaneira
programadoresformatarseucdigo.

AlmATTcontraformatosdemontagemdecdigodaIntel
Emnossaapresentao,mostramoscdigodemontagemnaATT(emhomenagema"AT&T",aempresaqueoperava
BellLaboratoriespormuitosanos)formato,oformatopadroparagcc,objdump,easoutrasferramentasque
Considerar.Outrasferramentasdeprogramao,incluindoosdaMicrosoft,bemcomoadocumentao
daIntel,mostrarocdigodemontagememIntelformato.Osdoisformatosdiferememumnmerodemaneiras.Comoum
exemplo,gccpodegerarocdigonoformatoIntelparaafunosomacomaseguintelinhadecomando:

unix>gccO1Smasm=intelcode.c
Istodoseguintecdigoassembly:

cdigodemontagemdesimplesnoformatoIntel
1 simples:
2 empurrarebp
3 mov ebp,esp
4 mov EDX,DWORDPTR[ebp+8]
5 mov eax,DWORDPTR[ebp+12]
6 adicionareax,DWORDPTR[edx]
7 mov DWORDPTR[edx],eax
8 estouro ebp
9 ret

Pgina202

167
Seo3.3FormatosdeDados

VemosqueosformatosInteleATTdiferemdasseguintesmaneiras:

. OcdigoIntelomiteossufixosdedesignaotamanho.Vemosmovinstruoemvezdemovl.
. OcdigoIntelomiteocaractere'%'nafrentedenomesderegistro,usandoespemvezde%esp.
. OcdigoInteltemumamaneiradiferentededescreverlocaisnamemria,porexemplo'PTRDWORD
[Ebp+8]'emvezde'8(%ebp)'.
. Instruescomvriosoperandosinclulosnaordeminversa.Istopodesermuitoconfusoquando
alternarentreosdoisformatos.
ApesardenoserusandooformatoIntelemnossaapresentao,vocvaiencontrloemIA32documentao
taodaInteleWindowsdocumentaodaMicrosoft.
https://translate.googleusercontent.com/translate_f#202 152/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

3.3Formatosdedados

Devidossuasorigenscomoumaarquiteturade16bitsqueexpandiuseemum32bitum,Intel
utilizaotermo"palavra"parasereferiraumtipodedadosde16bits.Combasenisso,elessereferema32
bitquantidadescomo"palavrasduplas."Elessereferemaquantidadesde64bitscomo"palavrasquatro."
Amaioriadasinstruesqueiremosencontraroperamembytesoupalavrasduplas.
AFigura3.1mostraasrepresentaesIA32utilizadosparaostiposdedadosprimitivosde
C.Amaioriadostiposdedadoscomunssoarmazenadoscomopalavrasduplas.Istoincluitanto
dos,ounoseremassinadosintregulareselongas.Almdisso,todososponteiros
(Mostradoaquicomochar*)soarmazenadoscomo4bytespalavrasduplas.Bytessocomumente
utilizadoquandodamanipulaodedadosdecadeia.ComovimosnaSeo2.1,exmaisrecente
tensesdalinguagemCincluemotipodedadosdecomprimentolongo,oquerepresentado
usando8bytes.OIA32nosuportaestetipodedadosnohardware.Emvezdisso,ocom
pilerdevegerarsequnciasdeinstruesqueoperamnessesdadosde32bits

declaraoC tipodedadosIntel sufixocdigodemontagem


Tamanho(bytes)
Caracteres Byte B 1
curto Palavra W 2
int palavradupla eu 4
longint palavradupla eu 4
intlonglong 4
Caracteres* palavradupla eu 4
flutuador precisosimples S 4
Duplo Duplapreciso eu 8
longdouble precisoestendida T 10/12
Figura3.1TamanhosdetiposdedadosdeCemIA32.OIA32nofornecesuportedehardware
paraaaritmticainteirode64bits.Compilarocdigocomlongotempodedadosrequergerao
sequnciasdeoperaesparaexecutaraaritmticaemblocosde32bits.

Pgina203

168 Captulo3MachineNvelRepresentaodeProgramas

deumavez.nmerosdepontoflutuantevmemtrsformasdiferentes:deprecisosimples
(4byte)valores,correspondendoaCtipodedadosflutuantedeprecisodupla(8bytes)
valores,correspondentesaCtipodedadosduplaeestendidadepreciso(10bytes)
Valores.gccusaotipodedadoslongdoubleparasereferiraestendidadeprecisoflutuante
valoresdeponto.Eletambmarmazenaloscomoquantidadesde12bytesparamelhorarosistemadememria
desempenho,comoserdiscutidomaistarde.Usandoalongotipodedadosduplo(intro
duzidoemISOC99)nosdacessocapacidadedeextensodeprecisodox86.
Paraamaioriadasoutrasmquinas,estetipodedadosvaiserrepresentadautilizandoomesmode8bytes
formatodotipodedadosdoublecomum.
Comoatabelaindica,amaioriadasinstruesdemontagemdecdigogeradopelogcctem
umsufixodecaracterenicoquedenotaotamanhodooperando.Porexemplo,osdados
instruomovimentotemtrsvariantes:movb(movimentobyte),movw(palavramovimento),
emovl(moverpalavradupla).Osufixo'l'usadoparapalavrasduplas,umavezque32bits
quantidadessoconsideradas"longaspalavras,"umresquciodeumapocaem16bit
tamanhosdepalavraerampadro.Notequeocdigodemontagemusaosufixo'l'paradenotar
tantouminteirode4bytes,bemcomoumaduplaprecisonmerodepontoflutuantede8bytes.
Issofazcomquequalquerambiguidade,umavezquepontoflutuanteenvolveumconjuntocompletamentediferentede
instrueseregistros.

3.4InformaoAcessando

UmaunidadedeprocessamentocentralIA32(CPU)contmumconjuntodeoitoregistosdearmazenamento
valoresde32bits.Estesregistossousadosparaarmazenardadosinteiro,bemcomoponteiros.
Figura3.2Diagramasdosoitoregistros.Seusnomescomeamtodoscom%e,masoutro
sbio,elestmnomespeculiares.Comooriginal8086,osregistroseramde16bits
ecadaumtinhaumafinalidadeespecfica.Osnomesforamescolhidosdemodoareflectirestesdiferentes
Finalidades.Comoendereamentoplano,anecessidadederegistosespecializadosgrandementereduzida.
Paraamaiorparte,osprimeirosseisregistospodemserconsideradosparausogeralregis

Figura3.2 31 15 78 0
IA32registrosinteiros. %eax %machado
%ah %ai
Todososoitoregistradorespodem
https://translate.googleusercontent.com/translate_f#202 153/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
seracessadotantocomo16 %ecx %cx %CH %cl
bits(Word)ou32bits
(Palavradupla).A2debaixa
%edx
bytesordemdosquatroprimeiros %dx %dh %dl
registrospodemseracessados
independentemente. %ebx %bx %bh %bl

%esi %si

%edi %di

%esp %sp ponteirodepilha

%ebp %bp ponteirodoquadro

Pgina204

Seo3.4InformaoAcessando 169

terssemrestriescolocadassobreasuautilizao.Nsdisseque"amaiorparte",porque
algumasinstruesdeusoregistroscomofontese/oudestinosfixo.Almdoque,almdomais,
dentrodosprocedimentosexistemdiferentesconvenesparasalvarerestauraro
primeirostrsregistos(%eax,ecx%e%EDX)doqueparaaprximaEBXtrs(%,%edi,
e%ESI).IssoserdiscutidonaSeo3.7.Osdoisltimosregistros(%ebpe
%Esp)contmponteirosparalocaismaisimportantesdapilhadoprograma.Elessdeve
seralteradodeacordocomoconjuntodeconvenespadroparaogerenciamentodepilha.
TalcomoindicadonaFigura3.2,apartirdeordem2bytesdosquatroprimeirosregistos
podeserlidoouescritoporasinstruesdeoperaobytedeformaindependente.este
Orecursofoifornecidaem8086parapermitiracompatibilidadecomversesanteriores8008e
8080doismicroprocessadoresde8bitsquedatamde1974.Quandoumainstruobyte
atualizaesdeumdessessinglebyte"registarelementos",osrestantes3bytesdo
registernomudam.Damesmaforma,abaixaordem16bitsdecadaregistropodeser
lidoouescritoporinstruesdeoperaodapalavra.EstacaractersticadecorredeIA32de
heranaevolutivacomoummicroprocessadorde16bitsetambmutilizadoquandoseopera
eminteiroscomtamanhodesignadorcurta.

3.4.1especificadoresOperando
Amaioriadasinstruesterumoumaisoperandos,especificandoosvaloresdeorigempara
referncianarealizaodeumaoperaoeolocaldedestinonoquala
colocaroresultado.IA32suportaumnmerodeformasoperando(vejaaFigura3.3).Fonte
Osvalorespodemserdadoscomoconstantesoulerapartirderegistrosoumemria.Osresultadospodemser
armazenadaemqualquerregistosoumemria.Assim,asdiferentespossibilidadesoperandopode
serclassificadosemtrstipos.Oprimeirotipo,imediato,paravaloresconstantes.Dentro
cdigodemontagemATTformato,estessoescritoscomum"$"seguidoporumnmerointeiro
usandoanotaopadroC,porexemplo,$577ouUS$0x1F.Qualquervalorqueseencaixaem
umapalavrade32bitspodeserutilizado,emboraomontadorusar1ou2bytecodificaes

Tipo Formato valordooperando Nome


Imediato $Imm imm Imediato
registo Eum R[Eum] registo
Memria imm M[emcirculao] Absoluto
Memria (Eum) M[R[Eum]] Indireto
Memria Imm(Eb) M[Imm+R[Eb]] Base+deslocamento
Memria (Eb,Ei) M[R[Eb]+R[Ei]] indexado
Memria Imm(Eb,Ei) M[Imm+R[Eb]+R[Ei]]indexado
Memria (,Ei,s) M[R[Ei].s] escaladosindexado
Memria Imm(,Ei,s) M[Imm+R[Ei].s] escaladosindexado
Memria (Eb,Ei,s) M[R[Eb]+R[Ei].s] escaladosindexado
Memria Imm(Eb,Ei,s) M[Imm+R[Eb]+R[Ei].s]
escaladosindexado
Figura3.3formasoperando.Operandospodedenotarvaloresimediatos(constante),cadastrese
valoresouvaloresdamemria.Ofactordeescalasdeveser1,2,4,ou8.

https://translate.googleusercontent.com/translate_f#202 154/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina205

170 Captulo3MachineNvelRepresentaodeProgramas

quandopossivel.Osegundotipo,registar,denotaocontedodeumdos
registros,ouumdosoitoregistosde32bits(porexemplo,%eax)paraumapalavradupla
operao,umdosoitoregistosde16bits(porexemplo,%AX)paraumaoperaodepalavra,ou
umdosoitoelementosderegistodebytessimples(porexemplo,%deAl)paraumaoperaodebyte.Dentro
Figura3.3,usamosanotaoEumparadenotarumarbitrriaregistarum,eindicar
oseuvalorcomarefernciaR[Eum],vendooconjuntoderegistoscomoumamatrizRindexado
poridentificadoresderegisto.
Oterceirotipodeoperandoumamemriadereferncia,noqualtemosacessoaalguns
localizaodememriadeacordocomumendereocomputadorizada,muitasvezeschamadodeadeficaz
vestir.Umavezquevisualizaramemriacomoumagrandematrizdebytes,usamosanotao
Mb [Addr]paradenotarumarefernciaparaabvalorbytearmazenadonamemriaapartirde
abordarAddr.Parasimplificarascoisas,nsgeralmentevaicairondiceb.
ComoaFigura3.3mostra,hdiversosmodosdeendereamentoquepermitamdife
formasdifederefernciasdememria.Aformamaisgeralmostradonaparteinferior
databelacomasintaxeImm(Eb ,Ei ,s).Estarefernciatemquatrocomponentes:
umimediatodeslocamentoImm,umregistobasedeEb ,umndiceregistoEeu ,eumabalana
fators,ondesdeveser1,2,4ou8.Oendereoefectivoentocalculado
comoImm+R[Eb ]+R[Ei ].S.Estaformageralmuitasvezesvistoaofazerrefernciaael
ementsdematrizes.Asoutrasformassosimplesmentecasosespeciaisdestaformageral
ondealgunsdoscomponentessoomitidos.Comoveremos,amaiscomplexa
modosdeendereamentosoteisaofazerrefernciaamatrizeestruturadeelementos.

PrticaProblema3.1
Assumirosseguintesvaloressoarmazenadosnosendereosdememriaindicadose
registros:

Endereo Valor registo Valor


0x100 0xFF %eax 0x100
0x104 0xAB %ecx 0x1
0x108 0x13 %edx 0x3
0x10c 0x11

Preenchaatabelaaseguirmostraosvaloresdosoperandosindicados:

operando Valor
%eax
0x104
$0x108
(%Eax)
4(%eax)
9(%eax,%edx)
260(%ecx,%edx)
0xFC(,%ecx,4)
(%Eax,%edx,4)

Pgina206

Seo3.4InformaoAcessando 171

Instruo Efeito Descrio


mov S,D DS Mover
movb moverbyte
movw palavramovimento
movl Movapalavradupla
movs S,D DSignExtend(S) Movasecomextensodesinal

https://translate.googleusercontent.com/translate_f#202 155/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
movsbw
movsbl Moverbytesinalestendidoapalavra
Moverbyteestendeusinalparapalavradupla
movswl Movapalavrasinalestendidoapalavradupla
movz S,D DZeroExtend(S) Movasecomextensodezero
movzbw Movazerobytesestendidaapalavra
movzbl Movazerobytesestendidaapalavradupla
movzwl Movapalavrazeroprolongadaapalavradupla
pushl S R[%esp]R[%esp]4 Empurrepalavradupla
M[R[%esp]]S
popl D DM[R[%esp]] Poppalavradupla
R[%esp]R[%esp]+4

Figura3.4instruesdemovimentaodedados.

3.4.2InstruesdeMovimentodeDados
Entreasinstruesmaisutilizadossoaquelesquecopiardadosdeum
localparaoutro.Ageneralidadedanotaooperandopermitequeumsimplesdedados
instruodemovimentopararealizaroqueemmuitasmquinasexigiriaumnmero
deinstrues.Figura3.4listaasinstruesimportantesdemovimentaodedados.comosepode
servisto,nsagruparasmuitasinstruesdiferentesemclassesdeinstrues,onde
asinstruesemumaclassederealizaramesmaoperao,mascomdiferenteoperando
tamanhos.Porexemplo,aclassemovconsistedetrsinstrues:movb,movwe
movl.Todasestastrsinstruesrealizaramesmaoperaoelesdiferemapenas
emqueelesoperamemdadosdetamanho1,2,e4bytes,respectivamente.
Asinstruesaclassemovcopiarseusvaloresdeorigemparaosseusdestinos.
Ooperandodeorigemdesignaumvalorqueimediato,armazenadoemumregistro,ou
armazenadonamemria.Ooperandodestinodesignaumlocalqueouum
registarseouumendereodememria.IA32impearestriodequeumainstruodemovimentao
nopodeterambososoperadoresreferemseaposiesdememria.Copiandoumvalordeum
localdememriaparaoutrorequerduasinstruesoprimeiroacarregarafonte
valoremumregistrador,eosegundoparaescreverestevalordoregistoparaodestino.
ReferindoseaFigura3.2,seosoperadoresderegistroparaestasinstruespodeserqualquer
dosoitoregistosde32bits(%eax%ebp)paramovl,qualquerumdos16bitsregisoito
ters(%doMACHADO%bp)paramovw,equalquerumdoselementosderegistodebytenico(%AH%bh,
%Al%bl)paramovb.Osseguintesexemplosmostramainstruomovcinco

Pgina207

172 Captulo3MachineNvelRepresentaodeProgramas

possveiscombinaesdetiposdeorigemededestino.Lembresequeafonte
operandovemprimeiroeosegundodestino:

1 movl$0x4050,%eax ImediatosRegister,4bytes
2 movw%bp,%sp RegistreRegistrar,2bytes
3 movb(%edi,%ecx),ah% MemriaRegistrar,1byte
4 movb$17,(%esp) ImediatoMemria, 1byte
5 movl%eax,12(%ebp) RegistreMemria, 4bytes

Ambososmovseasclassesdeinstruomovzservemparacopiarumaquantidademenor
dedadosdeorigemparaumlocaldedadosmaior,preenchendoosbitssuperioresporqualquersinal
expanso(movs)oupelaexpansozero(movz).Comaexpansodosinal,apartesuperior
bitsdodestinosopreenchidoscomcpiasdobitmaissignificativodo
valordeorigem.Comaexpansozero,osbitssuperioressopreenchidoscomzeros.Comopodeser
visto,existemtrsinstruesemcadaumadestasclasses,queabrangetodososcasosde1
etamanhosdefontede2bytese2e4bytestamanhosdedestino(omitindoaredundante
combinaesmovswwemovzww,claro).

AlmComparandoinstruesdemovimentobyte
Observasequeastrsinstruesbytemovimentomovb,movsbl,emovzbldiferemunsdosoutros
emformassutis.Aquiestumexemplo:

Suponhainicialmenteque%dh=CD,%eax=98765432
1 movb%dh,%al %Eax=987654CD
2 movsbl%dh,%eax %Eax=FFFFFFCD
3 movzbl%dh,%eax %Eax=000000CD
Nestesexemplos,todosdefinirobytedeordemderegisto%eaxparaosegundobytede%edx.omovb
instruonomudaosoutros3bytes.Ainstruomovsbldefineosoutros3bytes,quertudo
https://translate.googleusercontent.com/translate_f#202 156/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
deunsoudezeros,dependendodobitdealtaordemdobytefonte.Ainstruodefineomovzbl
outros3bytesparatodososzerosemqualquercaso.

Asduasoperaesfinaisdemovimentaodedadossousadosparaenviardadosparaepop
dadosdapilhadoprograma.Comoveremos,apilhadesempenhaumpapelvitalna
manipulaodechamadasdeprocedimento.Attulodefundo,umapilhaumaestruturadedados
ondeosvalorespodemseradicionadosouexcludos,masapenasdeacordocomum"ltimoaentrar,primeiroasair"
disciplina.Nsadicionardadosaumapilhaatravsdeumimpulsooperaoeremovloatravsdeumpopop
rao,comapropriedadedequeovalorestalousersempreovalorquefoi
maisrecentemente,eaindaempurradonapilha.Umapilhapodeserimplementadocomoum
array,ondesempreinserireremoverelementosdeumaextremidadedamatriz.este
finalchamadootopodapilha.ComIA32,apilhadeprogramaarmazenadoemalguns
regiodememria.TalcomoilustradonaFigura3.5,apilhadetalmodoquecresceparabaixo
oelementodetopodapilhatemoendereomaisbaixodetodososelementosdapilha.(Porcon
veno,chamamosapilhasdecabeaparabaixo,comapilhade"top"mostradonaparteinferior
dafigura).Oponteirodepilha%espcontmoendereodoelementosuperiordapilha.

Pgina208

Seo3.4InformaoAcessando 173

Inicialmente pushl%eax popl%edx


%eax 0x123 %eax 0x123 %eax 0x123
%edx 0 %edx 0 %edx 0x123
%esp 0x108 %esp 0x104 %esp 0x108

Pilha"bottom" Pilha"bottom" Pilha"bottom"

Aumentar
endereo

0x108 0x108 0x108


Pilha"top" 0x104 0x123 0x123
Pilha"top" Pilha"top"
Figura3.5Ilustraodeoperaopilha.Porconveno,chamamosapilhasupside
parabaixo,demodoqueo"incio"dapilhamostradonaparteinferior.pilhasIA32cresceremdireo
endereosmaisbaixos,entoempurrandoenvolvediminuindooponteirodapilha(registo%esp)e
armazenarnamemria,enquantoestaloenvolvealeituraapartirdamemriaeincrementandoa
stackpointer.

Ainstruopushlforneceacapacidadedeenviardadosparaapilha,enquanto
ainstruopoplqueaparece.Cadaumadessasinstrueslevaumnicooperandoo
fontededadosparaempurrareodestinodedadosparaestalar.
Empurrandoumvalordepalavraduplanapilhaenvolveprimeiradiminuindoo
stackpointerpor4e,emseguida,escreverovalornotoponovoendereodapilha.
Portanto,ocomportamentodainstruopushl%EBPequivalenteaodo
pardeinstrues
subi$4,%esp ponteirodepilhadecrement
movl%ebp,(%esp) Loja%ebpnapilha
exceptoqueainstruopushlcodificadonocdigodemquina,comoumnicobyte,
aopassoqueopardeinstruesdescritasanteriormenteexigeumtotalde6bytes.Oprimeiro
duascolunasnaFigura3.5ilustraoefeitodeexecutarainstruopushl
%Eaxquando%esp0x108e0x123%eax.Primeiro%espdiminudoem4,dando
0x104,0x123edepoisarmazenadonoendereodememria0x104.
Poppingumapalavraduplaenvolvealeituradotopodapilhaelocalizao
emseguida,incrementandooponteirodepilhapor4.Portanto,o%eaxinstruopopl
equivalenteparaoseguintepardeinstrues:
movl(%esp),%eax Leia%eaxdepilha
addl$4,%esp ponteirodepilhaincremento
AterceiracolunadaFigura3.5ilustraoefeitodeexecutarainstruo
popl%edximediatamenteapsaexecuodopushl.Valor0x123lidoapartir

https://translate.googleusercontent.com/translate_f#202 157/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina209

174 Captulo3MachineNvelRepresentaodeProgramas

memriaeescritapararegistrar%edx.Registre%espincrementadovoltapara0x108.
Comomostradonafigura,ovalor0x123permanecenaposiodememria,atque0x104
substitudo(porexemplo,porumaoutraoperaopush).Noentanto,apartesuperiordapilhasempre
consideradooendereoindicadopor%esp.Qualquervalorarmazenadoalmdapilha
superiorconsideradoinvlido.
Umavezqueapilhaestcontidonamesmamemriadocdigodeprogramae
outrasformasdedadosdeprograma,osprogramaspodemacessarposiesarbitrriasdentrodo
empilharutilizandoamemriapadrodeendereamentomtodos.Porexemplo,assumindoqueo
superiorelementodapilhaumapalavradupla,ainstruomovl4(%esp),%edx
copiarasegundapalavradupladapilhapararegistar%edx.

PrticaProblema3.2
Paracadaumadasseguinteslinhasdelinguagemassembly,determinaraapropriada
sufixodeinstruesbaseadoemoperandos.(Porexemplo,movpodeserreescritacomo
movb,movw,oumovl).

1 mov %Eax,(%esp)
2 mov (%Eax),%dx
3 mov $0xFF,%bl
4 mov (%Esp,%edx,4),%dh
5 empurrar$0xFF
6 mov %Dx,(%eax)
7 estouro%edi

PrticaProblema3.3
Cadaumadasseguinteslinhasdecdigogeraumamensagemdeerroquandoinvocamos
omontador.Explicaroqueesterradocomcadalinha.

1 movb$0xF,(%BL)
2 movl%machado,(%esp)
3 movw(%eax),4(%esp)
4 movb%ah,%sh
5 movl%eax,$0x123
6 movl%eax,%dx
7 movb%si,8(%ebp)

3.4.3DadosExemploMovimento
Comoumexemplodecdigoqueutilizainstruesdemovimentaodedados,considereo
rotinadetrocadedadosmostradonaFigura3.6,tantocomocdigoCe,comocdigodemontagem
geradoporGCC.Nsomitirapartedocdigodemontagemquealocaespaona
otempodeexecuodapilhanaentradadoprocedimentoedesalocaloantesderetornar.Osdetalhes
destesetupecdigodeconclusosercobertoquandodiscutimosprocedimento
ligao.Ocdigoquedeixadocomchamadode"corpo".

Pgina210

Seo3.4InformaoAcessando 175

NovoparaC?Algunsexemplosdeponteiros
trocadefuno(Figura3.6)umbomexemplodousodeponteirosemC.xpArgumento
umponteiroparauminteiro,enquantoyumnmerointeiroemsi.Adeclarao

intx=*xp
https://translate.googleusercontent.com/translate_f#202 158/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

indicaquedevemoslerovalorarmazenadonolocaldesignadopelaxpearmazenlocomoumlocal,
varivelchamadax.Estaoperaodeleituraconhecidocomoponteirodereferencing.O*executaoperadorC
dereferencingponteiro.
Adeclarao

*Xp=y
fazoinversoescreveovalordoparmetroynolocaldesignadopeloXP.Estatambmumaforma
doponteirodereferencing(e,portanto,ooperador*),masindicaumaoperaodegravao,umavezqueestna
doladoesquerdodaatribuio.
Oquesesegueumexemplodetrocaemao:

inta=4
intb=cmbio(&a,3)
printf("a=%d,%d=b\N",a,b)
Estecdigoirimprimir

A=3,b=4
OoperadorC&(chamadode"endereode"operador)criaumponteiro,nestecaso,paraarealizaodelocalizao
variveldeumlocal.Funodetroca,emseguida,substituiuovalorarmazenadoemumcom3masretornou4comoo
valordafuno.Observecomopormeiodeumtroquemponteiro,podemodificarosdadosmantidosemalgumremoto
localizao.

Quandoocorpodoprocedimentoiniciaaexecuo,procedimentoparmetrosXP
eysoarmazenadosemdeslocamentos8e12emrelaoaoendereonoregisto%ebp.
Instrues1e2deleituraparmetroxpdamemriaearmazenloemregisto

(A)decdigoC (B)ocdigoAssembly
1 trocaint(int*xp,inty) xpem%ebp8,yem%ebp+12
2 { 1 movl 8(%ebp),%edx obterxp
3 intx=*xp Copiandoa%eaxabaixo,xtornaseovalorderetorno
4 2 movl (%EDX),%eax Obterxnoxp
5 *Xp=y 3 movl 12(%ebp),%ecx obtery
6 voltarx 4 movl %Ecx,(%EDX) Lojaynoxp
7 }
Figura3.6Cecdigodemontagemparaocorpoderotinadetroca.Apilhadesetupeporesdeconcluso
foramomitidos.

Pgina211

176 Captulo3MachineNvelRepresentaodeProgramas

%Edx.Instruo2usosregistar%edxelxnoregistrador%eax,umarelaodirecta
implementaodaoperaox=*xpnoprogramaC.Maistarde,cadastre%eax
vaiserutilizadoparadevolverumvalordestafuno,eassimovalorderetornoser
X.Instruo3cargasparmetroynoregistrador%ecx.Instruo4,emseguida,escreve
estevalorparaalocalizaodememriadesignadapeloxpnoregisto%edx,umarelaodirecta
implementaodaoperao*xp=y.Esteexemploilustracomoomov
instruespodeserusadoparalerapartirdamemriaparaumregistodeinstrues(1a3),
eescreverapartirdeumregistoparaamemria(instruo4.)
Duascaractersticassobreestecdigodemontagemsodignosdenota.Primeiro,vemosqueoque
quechamamosde"ponteiros"emCsosimplesmenteendereos.Dereferencingumponteiroenvolve
copiandoesseponteiroparaumregisto,eemseguida,usandoesseregistroemumamemria
referncia.Emsegundolugar,asvariveislocais,taiscomoXsofrequentementemantidosnosregistosemvezde
armazenadoemlocalizaesdememria.Registodeacessomuitomaisrpidodoqueoacessomemria.

PrticaProblema3.4
Suponhavariveisvepdeclaradocomtipos
src_tv
dest_t*p
ondesrc_tedest_tsotiposdedadosdeclaradoscomtypedef.Queremosusar
ainstruodemovimentaodedadosapropriadoparaimplementaraoperao
*P=(dest_t)v
emquevarmazenadanaporodeformaadequadacomonomederegistoeax%(ouseja,%eax,
%Machado,ou%al),enquantoponteiroparmazenadonoregisto%edx.
Paraasseguintescombinaesdesrc_tedest_t,escreverumalinhademontagem
https://translate.googleusercontent.com/translate_f#202 159/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
cdigoquefazatransfernciaadequada.Lembresequeaorealizarumelencoque
envolvetantoumamudanadetamanhoeumamudanade"signedness"emC,aoperao
devealterarosignednessprimeiro(Seo2.2.6).
src_t dest_t Instruo
int int movl%eax,(%EDX)
Caracteres int
Caracteres noassinado
unsignedchar int
int Caracteres
noassinado unsignedchar
noassinado int

PrticaProblema3.5
Estdadaaseguinteinformao.Afunocomprottipo
decode1void(int*xp,int*yp,int*zp)

Pgina212

Seo3.5operaesaritmticaselgicas 177

compiladoemcdigodemontagem.Ocorpodocdigoaseguinte:

xpem%ebp8,ypem%ebp12,zpem%ebp+16
1 movl 8(%ebp),%edi
2 movl 12(%ebp),%edx
3 movl 16(%ebp),%ecx
4 movl (%EDX),%ebx
5 movl (%Ecx),%esi
6 movl (%Edi),%eax
7 movl %Eax,(%EDX)
8 movl %EBX,(%ecx)
9 movl %ESI,(%edi)

Parmetrosxp,ypezpsoarmazenadosemlocaisdememriacomdeslocamentos8,12,e
16,respectivamente,emrelaoaoendereonoregisto%ebp.
EscrevercdigoCparadecode1queirterumefeitoequivalenteaoconjunto
cdigoacima.

3,5operaesaritmticaselgicas

Figura3.7listaalgumasdasoperaescomnmerosinteiroselgicos.Amaiorpartedasoperaes
sodadascomoaulasdeinstruo,comoelespodemterdiferentesvariantescomdiferentes
tamanhosoperando.(ApenasLealnotemoutrasvariantesdetamanho.)Porexemplo,ainstruo
classaddconsisteeminstruesdetrsdeadio:addb,addweaddl,acrescentando
bytes,palavrasepalavrasduplas,respectivamente.Comefeito,cadaumadasinstrues
classesmostradasteminstruesparaoperarembyte,palavra,eosdadosdepalavradupla.
Asoperaessodivididasemquatrogrupos:carregarendereoefetivo,unria,binria,
eturnos.Binriasoperaestmdoisoperandos,enquantounriasoperaestmum
operando.Estesoperadoressoespecificadosusandoamesmanotao,conformedescritono
Seo3.4.

3.5.1CargaEndereoeficaz
Acargaefetivaendereolealinstruo,naverdade,umavariantedomovlinstrues
o.Temaformadeumainstruoqueldamemriaparaumregisto,mas
nofazrefernciaamemriadetodos.Oseuprimeirooperandopareceserumamemriarncia
cia,masemvezdelerapartirdolocaldesignado,ascpiasdeinstrues
oendereoeficazparaodestino.IndicamosesseclculonaFigura3.7
usandoooperadordeendereoC&S.Estainstruopodeserusadoparagerarponto
erspararefernciasdememriaposteriores.Almdisso,elepodeserusadoparadescreverdeformacompacta
operaesaritmticascomuns.Porexemplo,seoregistrador%edxcontmovalorx,
entoainstruoLeal7(%EDX,EDX%,4),%eaxirdefinirregistareax%a5x+7.
CompiladoresmuitasvezesencontramusosinteligentesdeLealquenadatmavercomaefetiva
clculosdeendereo.Ooperandodestinodeveserumregisto.

https://translate.googleusercontent.com/translate_f#202 160/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina213

178 Captulo3MachineNvelRepresentaodeProgramas

Instruo Efeito Descrio


Leal S,D D&S Cargaendereoefetivo
inc D DD+1 Incremento
Dec D DD1 diminuio
Neg D DD Negar
no D D~D Complemento
adicionar
S,D DD+S Adicionar
sub S,D DDS Subtrair
IMUL S,D DD*S Multiplicar
xor S,D DD^S Exclusivoou
ou S,D DD|S Ou
e S,D DD&S E
sal K,D DD<<k Desvioesquerda
SHL K,D DD<<k desvioesquerda(omesmoquesal)
sar K,D DD>>Ak deslocamentoparaadireitaaritmtica
SHR K,D DD>>Lk deslocamentoparaadireitaLogical
Figura3.7operaesaritmticasInteger.Acargadeendereoefetivo(Leal)instruo
comumenteusadopararealizaroperaesaritmticassimples.Osrestantessomaispadro
operaesunriosoubinrios.Usamosanotao>>Ae>>Lparadenotararitmtica
edeslocamentoparaadireitalgico,respectivamente.Noteseaencomendanointuitivodosoperandoscom
ATTformatodecdigodemontagem.

PrticaProblema3.6
Suponhaqueeaxregisto%temvalorxe%ecxtemvalory.Preenchaatabelaabaixo
comfrmulasqueindicamovalorqueserarmazenadonoregistador%EDXparacadaumdos
asinstruesdecdigodemontagemdadas:

Instruo Resultado
leal6(%eax),%edx
leal(%eax,ecx%),%edx
leal(%eax,ecx%,4),%edx
Leal7(%eax,%eax,8),%edx
leal0xA(,%ecx,4),%edx
leal9(%eax,ecx%,2),%edx

3.5.2Operaesunriosebinrios
Operaesdosegundogruposooperaesunrios,comonicooperando
servindotantocomoorigemedestino.Esteoperandopodesertantoumregistoou

Pgina214

Seo3.5operaesaritmticaselgicas 179

umlocaldememria.Porexemplo,ainstruoincl(%ESP)fazcomquea4bytes
elementonotopodapilhaaserincrementado.Estasintaxeumareminiscnciade
oincrementoC(++)edecremento()operadores.

https://translate.googleusercontent.com/translate_f#202 161/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Oterceirogrupoconsistedeoperaesbinrias,emqueosegundooperando
utilizadotantocomoumafonteeumdestino.EstasintaxeumareminiscnciadaC
operadoresdeatribuio,taiscomox+y=.Observese,noentanto,dequeooperadordeorigem
dadooprimeiroeosegundodestino.Issoparecepeculiarparanocomutativa
operaes.Porexemplo,ainstruosubi%eax,decrscimos%registradorEDX
%Edxpelovalorem%eax.(Elaajudaalerasinstruescomo"eaxSubtrair%apartirde
edx%.")Oprimeirooperandopodeserumvalorimediato,umregisto,ouumamemria
localizao.Osegundopodesertantoumregistoouumalocalizaodememria.Talcomoacontececomo
movldeinstrues,noentanto,osdoisoperandospodesernoamboslocaisdememria.

PrticaProblema3.7
Assumirosseguintesvaloressoarmazenadosnosendereosdememriaindicadose
registros:
Endereo Valor registo Valor
0x100 0xFF %eax 0x100
0x104 0xAB %ecx 0x1
0x108 0x13 %edx 0x3
0x10c 0x11
Enchanatabelaseguintemostraosefeitosdosseguintesinstrues,
tantoemtermosderegistooumemrialocalqueseractualizadoeo
valorresultante:

Instruo Destino Valor


addl%ecx,(%eax)
subi%edx,4(%eax)
imullUS$16,(%eax,%edx,4)
incl8(%eax)
decl%ecx
subi%edx,%eax

3.5.3operaesdedeslocamento
Oltimogrupocompostoporoperaesdemudana,ondeaquantidadededeslocamentodadoemprimeirolugar,
eovalordemudardadasegundo.Ambososaritmticaselgicasmudanascertasso
possvel.Aquantidadededeslocamentocodificadocomoumnicobyte,umavezqueapenasdeslocarquantidades
entre0e31sopossveis(apenasodebaixaordemde5bitsdaquantidadededeslocamentoso
considerado).Aquantidadededeslocamentodadotantocomoumimediatoounosingle
byteregistaroelemento%cl.(Estasinstruessoincomunsemapenaspermitindoqueeste
registoespecficocomooperando.)ComoaFigura3.7indica,existemdoisnomesparao

Pgina215

180 Captulo3MachineNvelRepresentaodeProgramas

instruodesvioesquerda:saleSHL.Ambostmomesmoefeito,oenchimentodadireita
comzeros.Asinstruesdedeslocamentoparaadireitadiferememquesarrealizaumaaritmtica
Shift(enchercomcpiasdobitdesinal),enquantoSHRrealizaumamudanadelgica(seenchade
zeros).Ooperandodestinodeumaoperaodemudanapodesertantoumregistoouuma
localizaodememria.NsdenotarasduasoperaesdemudanadireitodiferentesnaFigura3.7
como>>A(aritmtica)e>>L(lgico).

PrticaProblema3.8
SuponhaquensqueremosgerarocdigodemontagemparaafunoCseguinte:

intshift_left2_rightn(intx,intn)
{
x<<=2
X>>=N
voltarx
}
Ocdigoquesesegueumapartedocdigoqueexecutaamontagem
mudanasreaisedeixaovalorfinalnoregisto%eax.Duasinstrueschavetm
foramomitidos.OsparmetrosXensoarmazenadasemlocalizaesdememriacomdeslocamentos8
e12,respectivamente,emrelaoaoendereonoregisto%ebp.

1 movl 8(%ebp),%eax obterx


2 X=<<2

https://translate.googleusercontent.com/translate_f#202 162/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
3
4 movl 12(%ebp),%ecx x>>=n
obtern
Preenchaasinstruesdesaparecidas,deacordocomasanotaesdireita.o
deslocamentoparaadireitadeveserrealizadaaritmeticamente.

3.5.4Discusso
Vemosqueamaioriadasinstruesmostradosnafigura3.7podeserutilizadoparaqualquer
noassinadooucomplementodedoisaritmtica.Apenasdeslocamentodireitoexigeinstrues
quediferenciarentreassinouemfunodosdadosnoassinados.Estaumadascaractersticas
quefazcomcomplementodedoisaritmticaaformapreferidaparaimplementarassinado
aritmticainteira.
AFigura3.8mostraumexemplodeumafunoqueexecutaoperaesaritmticas
esuatraduoemcdigodemontagem.Comoantes,omitimosapilhaset
seeporesdeconcluso.Argumentosdefunesx,y,ezsoarmazenadosnamemria
emdeslocamentos8,12e16emrelaoaoendereonoregisto%ebp,respectivamente.
AsinstruesdecdigodemontagemocorrememumaordemdiferentedoquenafonteC
cdigo.Instrues2e3decomputaoaexpressoz*48porumacombinaodeleal
emudarinstrues.Linha5calculaovalordex+y.Linha6calculaae
det1e0xFFFF.Omultiplicamfinalcalculadopelalinha7.Umavezqueodestino
domultiplicamregistrar%eax,esteserovalorretornadopelafuno.

Pgina216

Seo3.5operaesaritmticaselgicas 181

(A)decdigoC (B)ocdigoAssembly
1 intarith(intx, xem%ebp8,yem%ebp12,zem%ebp+16
2 inty, 1 movl 16(%ebp),%eax Z
3 intz) 2 Leal (%Eax,%eax,2),%eax Z*3
4 { 3 sall US$4,%eax T2=z*48
5 intt1=x+y 4 movl 12(%ebp),%edx Y
6 intt2=z*48 5 addl 8(%ebp),%edx t1=x+y
7 intt3=t1&0xFFFF 6 eeu $65535,%edx t3=t1&0xFFFF
8 intT4=T3T2* 7 imull %Edx,%eax Retornot4=t2*t3
9 regressoT4
10 }
Figura3.8Cecdigodemontagemparaaaritmticacorpoderotina.Apilhadesetupeporesdeconcluso
foramomitidos.

NocdigodemontagemdaFigura3.8,aseqnciadevaloresnoregistrador%eax
correspondeaoprogramavalorizaz,3*z,z*48,eT4(comoovalorderetorno).emge
eral,compiladoresgerarocdigoqueutilizaregistosindividuaisparaoprogramademltipla
valoresemovimentosvaloresdoprogramaentreosregistros.

PrticaProblema3.9
NavarianteseguintedafunodaFigura3.8(a),asexpressestmsido
substitudasporespaosembranco:

1 intarith(intx,
2 inty,
3 intz)
4 {
5 int=t1
6 intt2=
7 int=t3
8 int=t4
9 regressoT4
10 }
Apartedocdigoassemblygeradoimplementaodessasexpressesto
Seguinte:

xem%ebp8,yem%ebp12,zem%ebp+16
1 movl 12(%ebp),%eax
2 xorl 8(%ebp),%eax
3 sarl $3,%eax
4 CASCAIS %eax
5 subi 16(%ebp),%eax
Combasenessecdigodemontagem,preencheraspartesfaltantesdocdigoC.

https://translate.googleusercontent.com/translate_f#202 163/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Pgina217

182 Captulo3MachineNvelRepresentaodeProgramas

PrticaProblema3.10
comumencontrarlinhasdecdigodemontagemdoformulrio

xorl%edx,%edx
nocdigoquefoigeradoapartirdeC,ondehoperaesouexclusivoeram
presente.
A.Expliqueoefeitodesteespecialouexclusivodeinstrueseoque
operaotileleimplementa.
B.Qualseriaamaneiramaissimplesdeexpressarestaoperaoem
cdigodemontagem?
C.Compareonmerodebytesparacodificarestesdoisimplementaodiferente
esdamesmaoperao.

3.5.5Operaesaritmticasespeciais
Figura3.9descreveinstruesquesuportamgerandooprodutode64bitscheiode
doisnmerosde32bits,bemcomoadivisointeira.
Ainstruoimull,ummembrodaclassedeinstruoIMULlistadonaFi
ure3.7,conhecidocomoum"twooperando"instruodemultiplicao.Elegeraum32bits
produtoapartirdedoisoperandosde32bits,deexecuodasoperaes*
e* de
32 32
t u

descritonasseces2.3.4e2.3.5.Recordesequequandotruncandooprodutopara32
bocados,ambosassinadosmultiplicamecomplementodedoismultiplicartmomesmopouco
comportamentodonvel.IA32tambmfornecedois"oneoperando"diferentemultiplicarinstrues
esparacalcularoprodutode64bitscheiodedoisvaloresde32bits,umparaunsigned
(Mull),eumaparacomplementodedois(imull)multiplicao.Paraambosestes,
umargumentodeveestaremregisto%eax,eooutrodadocomoainstruo

Instruo Efeito Descrio


imull S R[%edx]:R[%eax]SR[%eax] Assinadomultiplicamcompleta
ponderarS R[%edx]:R[%eax]SR[%eax] Noassinadomultiplicamcompleta
CLTD R[%edx]:R[%eax]SignExtend(R[%eax
Converterparapalavraquad
])
idivl S R[%edx]R[%edx]:R[%eax]modSdivisoassinado
R[%eax]R[%edx]:R[%eax]S
divl S R[%edx]R[%edx]:R[%eax]modSdivisosemsinal
R[%eax]R[%edx]:R[%eax]S
Figura3.9operaesaritmticasespeciais.Essasoperaesfornecemcompleta64bitmulti
plicaoediviso,paraambososnmerosassinadosenoassinados.Oparderegistradores%edx
e%eaxsovistoscomoformandoumanicapalavraquad64bit.

Pgina218

Seo3.5operaesaritmticaselgicas 183

https://translate.googleusercontent.com/translate_f#202 164/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
operandofonte.Oproduto,emseguida,armazenadosnosregistos%EDX(deordemsuperior32bits)
e%eax(baixaordemde32bits).Emboraonomeusadoparaimulldoisdistintos
operaesdemultiplicao,omontadorpodedizerqueumdestinadopelacontagem
onmerodeoperandos.
Comoexemplo,suponhaqueassinaramnmerosxeyarmazenadosemposies
8e12emrelaoao%ebp,equeremosarmazenarseuprodutode64bitscompleto,8bytes
napartesuperiordapilha.Ocdigopoderiaprocederdaseguinteforma:

xem%ebp8,yem%ebp+12
1 movl 12(%ebp),%eax Coloqueyem%eax
2 imull 8(%ebp) Multiplicarporx
3 movl %Eax,(%esp) Lojadebaixaordemde32bits
4 movl %Edx,4(%esp) Armazenardealtaordemde32bits

Observasequeoslocaisemquearmazenarosdoisregistrosestocorretospara
umpoucoendianpedaosmquinadealtaordemnoregisto%edxsoarmazenadosnodeslocamento
4emrelaoaosbitsdeordeminferiorem%eax.Comapilhacrescenteparabaixo
endereos,quesignificaqueosbitsdeordeminferiorsocolocadosnotopodapilha.
Nossamesaantesdeoperaesaritmticas(Figura3.7)nolistaqualquerdivi
operaesdeSionoudemdulo.Estasoperaessofornecidospelonicooperando
dividirinstruessemelhantessinstruesmultiplicamoperandonico.aassinado
idivlinstruodivisotomacomodividendoaquantidadede64bitsemregistos%EDX
(Altoordem32bits)e%eax(baixaordemde32bits).Odivisordadocomooin
operandostruction.Ainstruoarmazenaoquocienteemregisto%eaxeo
restanteemregisto%edx.
Comoexemplo,suponhaqueassinaramnmerosxeyarmazenadosnasposies8
e12%emrelaoaoebp,equeremosarmazenarvaloresx/yexmodynapilha.
gccgeraoseguintecdigo:

xem%ebp8,yem%ebp+12
1 movl 8(%ebp),%edx Coloquexem%edx
2 movl %Edx,%eax Copiexpara%eax
3 sarl US$31,%edx Sinaldeestenderxem%edx
4 idivl 12(%ebp) Dividepory
5 movl %Eax,4(%esp) Lojax/y
6 movl %Edx,(%esp) Lojax%y

Ainstruomovimentonalinha1eodeslocamentoaritmticonalinha3tema
efeitocombinadodedefiniodoregistro%edx,quertodososzerosoutodosaquelesdependendo
nosinaldex,enquantoainstruodemovimentaonalinha2cpiasxem%eax.Assim,ns
terosregistroscombinados%edxe%eaxarmazenarum64bit,aversoassinarestendida
dex.Apsainstruoidivl,oquocienteeorestosocopiadospara
osdoisprincipaislocaisdepilha(instrues5e6).

Pgina219

184 Captulo3MachineNvelRepresentaodeProgramas

UmmtodomaisconvencionaldeconfigurarodivisorfazusodoCLTD1
instruo.Estesinalinstruoextende%eaxem%edx.Comestainstruo,o
sequnciadocdigomostradoacimatornase

xem%ebp8,yem%ebp+12
1 movl 8(%ebp),%eax Cargaxem%eax
2 CLTD Registeseestenderpara%edx
3 idivl 12(%ebp) Dividepory
4 movl %Eax,4(%esp) Lojax/y
5 movl %Edx,(%esp) Lojax%y
Podemosverqueasduasprimeirasinstruestmomesmoefeitoglobalcomooprimeiro
trsinstruesemnossasequnciadecdigoanterior.Diferentesversesdogccgerar
estasduasmaneirasdiferentesdeconfigurarodividendoparadivisointeira.
unsigneddivisofazusodainstruodivl.Normalmenteregistar%edx
definidocomo0antemo.

PrticaProblema3.11
Modificarocdigodemontagemmostradoparaadivisoassinadoparaqueelecalculaa
unsignedquocienteerestodenmerosxeyearmazenaosresultadosem
apilha.

https://translate.googleusercontent.com/translate_f#202 165/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

PrticaProblema3.12
ConsidereoseguinteprottipodefunoC,ondenum_tumtipodedadosdeclarado
usandotypedef:

store_prodvoid(num_t*dest,semsinalx,ynum_t){
*Dest=x*y
}
gccgeraoseguintecdigodemontagemimplementaodocorpodocomputacional
tao:

destem%ebp8,xem%ebp12,yem%ebp+16
1 movl 12(%ebp),%eax
2 movl 20(%ebp),%ecx
3 imull %Eax,ecx%
4 ponderar 16(%ebp)
5 Leal (%Ecx,%edx),%edx
6 movl 8(%ebp),%ecx
7 movl %Eax,(%ecx)
8 movl %Edx,4(%ecx)

1.EstainstruochamadoCDQnadocumentaodaIntel,umdospoucoscasosondeoTCAformato
nomeparaumainstruotemqualquerrelaocomonomeIntel.

220

Seco3.6Controlo 185

Observequeestecdigorequerduasleiturasdememriaparabuscarargumentoy(linhas2
e4),duasmultiplica(linhas3e4),eduasdememriaescreveparaarmazenaroresultado
(linhas7e8).
A.Quetipodedadosnum_t?
B.Descrevaoalgoritmousadoparacomputaroprodutoeargumentamque
umlugarparaoutro.

3.6Controle
Atagora,temosapenasconsideradoocomportamentodoslinearcdigo,ondeinstrues
essesucedememsequncia.AlgumasconstruesemC,comocondicionais,
loops,einterruptores,exigemaexecuocondicional,ondeasequnciadeoperao
esqueserrealizadadependedosresultadosdostestesaplicadosaosdados.
cdigodemquinafornecedoismecanismosbsicosdebaixonvelparaaimplementaodecondi
comportamentocional:eletestavaloresdedadoseemseguida,alteraofluxodecontrolooua
ofluxodedadoscombasenoresultadodestestestes.
fluxodecontroledependentededadosaabordagemmaisgeralemaiscomum
paraimplementarocomportamentocondicional,eporissovamosexaminaresteprimeiro.Normalmente,
tantodeclaraesemCeinstruesemcdigodemquinasoexecutadassequencialmente,
naordememqueaparecemnoprograma.Aordemdeexecuodeumconjuntodemquina
instruesdecdigopodeseralteradocomumsaltodeinstrues,indicandoqueocontrole
devepassarparaalgumaoutrapartedoprograma,possivelmentedependentedoresultado
dealgunstestes.Ocompiladordevegerarsequnciasdeinstruesqueconstroememcima
estemecanismodebaixonvelparaimplementarasconstruesdeC.controle
Emnossaapresentao,primeirocobrirosmecanismosdenveldemquinae,emseguida,
mostrarcomoasdiferentesconstruesdeCcontrolesoimplementadascomeles.Ns
emseguida,voltarparaousodatransfernciadedadosparaimplementarcondicionaldependentededados
comportamento.

3.6.1cdigosdecondio
Paraalmdosregistosdenmerosinteiros,aCPUmantmumconjuntodebitsnicacondio
cdigoderegistrosquedescrevematributosdaaritmticamaisrecenteouoperaolgica
o.Estesregistospodementosertestadosparaexecutardesvioscondicionais.Amaioria
oscdigosdecondioteisso:

CF:CarryFlag.Aoperaomaisrecentegeradoumcarryoutdosmais
bitmaissignificativo.Usadoparadetectarexcessodeoperaesnoassinados.
ZF:BandeiraZero.Aoperaomaisrecenterendeuzero.

https://translate.googleusercontent.com/translate_f#202 166/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
SF:Sinaldabandeira.Aoperaomaisrecenteproporcionouumvalornegativo.
DE:Bandeiradeestouro.Aoperaomaisrecentecausouumcomplementodedois
overflownegativooupositivo.

Pgina221

186 Captulo3MachineNvelRepresentaodeProgramas

Instruo Baseadoem Descrio


cmp S2,S1 S1S2 Comparar
CMPB Comparebyte
cmpw Comparepalavra
cMpl Comparepalavradupla
teste S2,S1 S1eS2 Teste
testb bytedeteste
testw palavradeteste
testl palavradupladeteste
Figura3.10Comparaodetesteeinstrues.Estasinstruesdefiniracondio
cdigossematualizarquaisqueroutrosregistos.

Porexemplo,suponhaqueusouumadasinstruesaddparaexecutara
equivalenteaatribuiodeCT=a+b,ondeasvariveisa,b,etsonmerosinteiros.
Emseguida,oscdigosdecondioseriadefinidadeacordocomasseguintesexpressesC:

CF: (Semsinal)t<(noassinado)uma estourosemsinal


ZF: (T==0) Zero
SF: (T<0) Negativo
DE: (A<0==b<0)&&(t<0!=A<0) estouroassinado

Ainstruolealnoalteraquaisquercdigosdecondio,umavezquesedestina
paraserusadaemclculosdeendereo.Casocontrrio,todasasinstrueslistadasna
Figura3.7causaoscdigosdecondioaserdefinido.Paraasoperaeslgicas,talcomo
XOR,atransportareestourodebandeirassodefinidoscomo0.Paraasoperaesdedeslocamento,ocarry
sinalizadordefinidocomooltimobitdeslocadoparafora,enquantoabandeiraestourodefinidocomo0.Porrazes
quenovamosaprofundar,oinceinstruesDezdefiniroestouroeZero
bandeiras,masdeixamabandeiracarryinalterado.
AlmdissoparaoajustedecdigosdecondioporasinstruesdaFigura3.7,
hduasclassesdeinstruo(com8,formulrios16e32bits)queacondioset
cdigossemalterarquaisqueroutrosregistosestesestolistadosnaFigura3.10.o
instruesCMPdefiniroscdigosdecondiodeacordocomasdiferenasdosdois
operandos.Elescomportamsedamesmaformacomoossubinstrues,exceptoqueeles
definiroscdigosdecondiosematualizarseusdestinos.ComoformatoATT,
osoperandosestolistadosemordeminversa,tornandoocdigodifcildeler.Estes
instruesdefinirosinalizadorzeroseosdoisoperadoressoiguais.Osoutrossinalizadorespodem
serutilizadosparadeterminarasrelaesdeordenaoentreosdoisoperandos.Oteste
instruessecomportamdamesmamaneiracomoasinstruese,anoserqueeles
definiroscdigosdecondio,semalterarseusdestinos.Tipicamente,amesma
operandorepetido(porexemplo,testl%eax,%eaxparaverse%eaxnegativo,zero,
oupositivo),ouumdosoperandosumamscaraindicandoqueosbitsdevemser
Testado.

Pgina222

https://translate.googleusercontent.com/translate_f#202 167/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Seco3.6Controlo 187

Instruo Sinnimo Efeito condioSet


Sete D Setz DZF Igual/zero
SetneD setnz D~ZF Noigual/nozero
Conjuntos
D DSF Negativo
setnsD D~SF nonegativo
setg D setnle D~(SF^DE)&~ZF Maior(assinado>)
escritaSETGEsetnl
D D~(SF^DE) Maiorouigual(assinado>=)
SETL D setnge DSF^DE Menos(assinado<)
setleD setng D(SF^DE)|ZF Menorouigual(assinado<=)
cerda D setnbe D~CF&~ZF Acima(semsinal>)
cerdasD setnb DCF~ Superiorouigual(noassinada>=)
SETB D setnae DCF Abaixo(semassinatura<)
setbeD Setna DCF|ZF Inferiorouigual(noassinada<=)

Figura3.11Osconjuntosdeinstrues.Cadainstruodefineumnicobytea0ou1,combase
emalgumacombinaodoscdigosdecondio.Algumasinstruestm"sinnimos",isto,
nomesalternativosparaamesmainstruodemquina.

3.6.2Acessandooscdigosdecondio
Emvezdeleroscdigosdecondiodiretamente,existemtrsmaneirascomuns
deusaroscdigosdecondio:(1)podemosdefinirumnicobytea0ou1dependendo
emalgumacombinaodoscdigosdecondio,(2),podemossaltarparacondicionalmente
algumaoutrapartedoprograma,ou(3)quepodetransferirdadoscondicionalmente.Parao
primeirocaso,asinstruesdescritasnaFigura3.11definirumnicobytea0oua1
dependendodealgumacombinaodoscdigosdecondio.Referimonosaesseinteira
classedeinstruesdomanualdeinstruesestabelecidaselesdiferemumdooutrocombaseem
quecombinaesdecdigosdecondioqueconsiderar,comoindicadopeladiferente
sufixosparaosnomesdeinstrues.importantereconhecerqueossufixosde
estasinstruesdenotamdiferentescondiesenodiferentestamanhosoperando.Para
exemplo,instruesSETLedenotamSETB"setmenos"e"fixadoabaixo,"no"set
palavralonga"ou"conjuntodebytes."
Umainstruoconjuntotemqualquerumadasoitodebytenicoelementosderegistro
(Figura3.2)ouumlocaldememriadebytenicocomoseudestino,definirestebyte
para0ou1.Paragerarumresultadode32bits,tambmtemosdelimparaaltaordemde24
BITS.UmasequnciatpicadeinstruesparacalcularaexpressodeCdeum<b,ondea
ebsoambosdotipoint,procedecomosesegue:

umestem%EDX,bem%eax
1 cMpl %Eax,%edx Comparara:b
2 SETL %ai Definirbytelowordemde%eaxa0ou1
3 movzbl%al,%eax Definirbytesrestantes%eaxa0
Ainstruomovzbllimpaaaltaordem3bytesde%eax.

pgina223

188 Captulo3MachineNvelRepresentaodeProgramas

Paraalgumasdasinstruesmquinasubjacentes,existemmltiplospossvel
nomes,quelistacomo"sinnimos".Porexemplo,tantosetg(para"definirmaior")
esetnle(para"definirnoinferiorouigual")referemseamesmainstruodemquina.
Compiladoresedisassemblersfazerescolhasarbitrriasdequenomesdeusar.
Apesardetodasasoperaesaritmticaselgicasdefiniroscdigosdecondio,ode
criesdasdiferentesinstruesdefinidasaplicamseaocasoemqueumacomparao
instruotersidoexecutada,definiroscdigosdecondiodeacordocomacom
aComputaot=ab.Maisespecificamente,sejaum,b,etserosnmerosinteirosrepresentadoem
formadecomplementodedoisporvariveisa,b,et,respectivamente,eassimt=um
Wb,
t

ondeWdependedostamanhosassociadoscomaeb.
Considereasete,ou"definidoquandoigual"instruo.Quandoa=b,vamos
temt=0,e,portanto,abandeirazeroindicaigualdade.Damesmaforma,consideraroteste
paraassinadocomparaocomaSETL,ou"definidoquandomenos,"instruo.quandonenhum
estouroocorre(indicadoporterDOseta0),teremosa<bquandoum Wb<
t

0,indicadoporterSFseta1,eumbquandoum b0,indicadoporter
W
t

SFdefinidopara0.Poroutrolado,quandoocorretransbordamento,teremosum<bquando
umb>0(estouropositivo)ea>bquandoum b<0(estouronegativo).Ns
W W
t t

nopodeterestouroquandoa=b.Assim,quandoDEdefinidacomo1,teremosa<bse

https://translate.googleusercontent.com/translate_f#202 168/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
eapenasseSFdefinidocomo0.Combinandoestescasos,oOUEXCLUSIVOdostransbordamento
ebitsdesinalproporcionaumtesteparasabersea<b.Osoutrostestesdecomparaoassinados
sobaseadasemoutrascombinaesdeSF^DAeZF.
Paraotestedecomparaesnoassinados,nsagoravamosaebsoosnmerosinteiros
representadonaformanoassinadaporvariveisaeb.Aorealizaroclculo
t=ab,abandeiracarryserdefinidopelainstruoCMPquandooab<0,e
demodoqueascomparaesnoassinadosusarcombinaesdocarryezerobandeiras.
importantenotarcomocdigodemquinadistingueentreassinadoe
valoresnoassinados.AocontrriodeC,denoestarassociadocomumtipodedadosdecadaprograma
valor.Emvezdisso,amaioriausaasmesmasinstruesparaosdoiscasos,porque
muitasoperaesaritmticastmomesmocomportamentononveldobitparasemsinale
complementodedoisaritmtica.Algumascircunstnciasexigeminstruesdiferentes
paralidarcomoperaesassinadosenoassinados,comoousodediferentesversesde
mudanascorretas,instruesdedivisoemultiplicao,ecombinaesdiferentes
decdigosdecondio.

PrticaProblema3.13
OcdigoCaseguir
compint(data_tum,data_tb){
retornarumCOMPb
}
mostraumacomparaogeralentreosargumentosaeb,ondepodemosdefinira
tipodedadosdosargumentosdeclarandodata_tcomumadeclaraotypedef,e
podemosdefiniracomparaodefinindoCOMPcomumadeclarao#define.
Suponhaa%emEDXebem%eax.Paracadaumdosseguintesinstrues
sequncias,determinarostiposdedadosquedata_tequecomparaesCOMPpoderia

Pgina224

Seco3.6Controlo 189

fazercomqueocompiladorparagerarestecdigo.(Podehavervriasrespostascorretas
vocdevelistartodoseles.)
A.cMpl %Eax,%edx
SETL %ai
B.cmpw %Machado,%dx
escritaSETGE
%ai
C.CMPB %deAl,%dl
SETB %ai
D.cMpl %Eax,%edx
Setne %ai

PrticaProblema3.14
OcdigoCaseguir

inttest(data_ta){
devolverumteste0
}
mostraumacomparaogeralentreargumentoume0,ondepodemosdefinira
tipodedadosdoargumento,declarandodata_tcomumtypedef,eanatureza
dacomparaodeclarandotestecomumadeclarao#define.Paracadaumdos
seguindosequnciasdeinstrues,determinarquaistiposdedadosdata_teque
comparaestestepoderiacausarocompiladorparagerarestecdigo.(Podehaver
vriasrespostascorretaslistartodososcorretos.)
A.testl %Eax,%eax
Setne %ai
B.testw %Machado,machado%
Sete %ai
C.testb %DeAl,%ai
setg %ai
D.testw %Machado,machado%
cerda %ai

https://translate.googleusercontent.com/translate_f#202 169/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

3.6.3instruesdesaltoeseuscdigos
Emexecuonormal,instruesseguemunsaosoutrosnaordememqueso
listados.Umsaltodeinstruespodecausaraexecuoparamudarparaumatotalmente
novaposionoprograma.Estesdestinosdesaltosogeralmenteindicadosem

Pgina225

190 Captulo3MachineNvelRepresentaodeProgramas

Instruo Sinnimo condiodesalto Descrio


jmpEtiqueta 1 saltodireto
JMP*Operando 1 saltoindireta
Je Rtulo jz ZF Igual/zero
jneEtiqueta JNZ ~ZF Noigual/nozero
js Rtulo SF Negativo
JNSEtiqueta ~SF nonegativo
jg Rtulo jnle Maior(assinado>)
~(SF^DE)&~ZF
jgeEtiqueta JNL ~(SF^DE) Maiorouigual(assinado>=)
jl Rtulo jnge SF^DE Menos(assinado<)
jleEtiqueta JNG (SF^DE)|ZF Menorouigual(assinado<=)
ja Rtulo JNBE ~CF&~ZF Acima(semsinal>)
jaeEtiqueta JNB ~CF Superiorouigual(noassinada>=)
jb Rtulo JNAE CF Abaixo(semassinatura<)
JBEEtiqueta jna CF|ZF Inferiorouigual(noassinada<=)
Figura3.12Asinstruesdesalto.Estasinstruessaltarparaumdestinomarcado
quandoacondiodesaltodetm.Algumasinstruestm"sinnimos,"nomesalternativos
paraamesmainstruodemquina.

cdigodemontagemporumrtulo.Considereoseguinte(muitoartificial)montagemdecdigo
seqncia:
1 movlR$0,%eax Definir%eaxpara0
2 jmp.L1 Goto.L1
3 movl(%eax),%edx dereferenceponteironulo
4 .L1:
5 popl%edx
AJMPinstrues.L1farcomqueoprogramaparapularoinstruesmovl
oeemvezdissocontinuaraexecuocomainstruopopl.Nageraodo
arquivodecdigoobjeto,omontadordeterminaosendereosdetodasasinstruesrotuladas
esecodificaosdestinosdesalto(osendereosdasinstruesdedestino)
comopartedasinstruesdesalto.
Figura3.12mostraasdiferentesinstruesdesalto.AinstruoJMPsalta
incondicionalmente.Elepodeserqualquerumdirectasalto,emqueoalvodesaltocodificado
comopartedainstruo,ouumindirectosalto,emqueoalvolidodosalto
umregistoouumlocaldememria.saltosdiretossoescritosemconjunto,dando
umrtulocomoumalvodesalto,porexemplo,ortulo".L1"nocdigomostrado.saltosindiretos
soescritosusando'*'seguidoporumespecificadoroperandoutilizandoumdosformatos
descritonoponto3.4.1.Comoexemplos,ainstruo
JMP*%eax
usaovalornoregisto%eaxcomoumalvodesalto,eainstruo
JMP*(%eax)

Pgina226

https://translate.googleusercontent.com/translate_f#202 170/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Seco3.6Controlo 191

losaltoalvoapartirdamemria,ousodovalorem%eaxcomoaleitura
endereo.
Asinstruesdesaltorestantesnatabelasocondicionalquequer
saltaroucontinuaraexecutarnaprximainstruonasequnciadocdigo,dependendo
emalgumacombinaodoscdigosdecondio.Osnomesdessasinstrues
eascondiesemqueelessaltamcorrespondemaosdasinstruesdeconjunto
(VejaaFigura3.11).Talcomoacontececomasinstruesdefinidas,algunsdamquinasubjacente
instruestervriosnomes.saltoscondicionaisspodeserdireta.
Emboranovamosnospreocuparcomoformatodetalhadodamquina
cdigo,acompreensodecomoasmetasdeinstruesdesaltosocodificadossetornaro
importantequandoestudamosligandonoCaptulo7.Almdisso,eleajudaquandointer
pretaoasadadeumdesintegrador.Nocdigodemontagem,osdestinosdesaltosoescritos
ousodertulossimblicos.Amontadora,emaistardeovinculador,gerarobom
codificaesdosdestinosdesalto.Existemvriascodificaesdiferentesparasaltos,
masalgunsdosmaiscomumenteutilizadossoPCrelativa.Isto,elescodificam
adiferenaentreoendereodainstruodedestinoeoendereodo
instruoimediatamenteapsosalto.Estascompensaespodemsercodificadosusando1,
2,ou4bytes.Umsegundomtododecodificaodarumendereode"absoluta",usando4
bytesparaespecificardiretamenteoalvo.Omontadoreligadorselecionaroapropriado
codificaesdosdestinosdesalto.
ComoumexemplodeendereamentorelativoaoPC,oseguintefragmentodemontagem
cdigofoigeradoporcompilaodeumsilly.carquivo.Elacontmdoissaltos:ojle
instruonalinha1saltaparaafrenteparaumendereomaisalto,enquantoainstruojg
nalinha8saltadevoltaparauminferior.

1 jle .L2 Se<=,Gotodest2


2 .L5: dest1:
3 movl %Edx,%eax
4 sarl %eax
5 subi %Eax,%edx
6 Leal (%Edx,%edx,2),%edx
7 testl %Edx,%edx
8 jg .L5 if>,Gotodest1
9 .L2: dest2:
10 movl %Edx,%eax

Aversodesmontadadoformato".o"geradapeloassemblerto
Seguinte:

1 8: 0d7e jle 17<bobo+0x17> Target=dest2


2 uma: 89d0 mov %Edx,%eax dest1:
3 C: d1f8 sar %eax
4 e: 29c2 sub %Eax,%edx
5 10: 8d1452 Lea (%Edx,%edx,2),%edx
6 13: 85d2 teste %Edx,%edx
7 15: 7FF3 jg um<bobo+0xa> Target=dest1
8 17: 89d0 mov %Edx,%eax dest2:

Pgina227

192 Captulo3MachineNvelRepresentaodeProgramas

Nasanotaesgeradospelodesmontadordireita,osdestinosdesalto
soindicadoscomo0x17paraainstruodesaltonalinha1e0xaparaosalto
instruonalinha7.Olhandoparaascodificaesdebytesdasinstrues,noentanto,
vemosqueoalvodaprimeirainstruodesaltocodificado(nosegundobyte)
como0xd(decimal13).Aadiodeste0xa(decimal10),oendereodaseguinte
instruo,obtemossalto0x17endereodedestino(decimal23),oendereodo
instruonalinha8.
Damesmaforma,oobjectivodasegundainstruodesaltocodificadocomo0xf3(DEC
imal13)usandoumarepresentaodebytenico,complementodedois.Acrescentandoqueisso
0x17(decimal23),oendereodainstruonalinha8,temos0xa(decimal
10),oendereodainstruonalinha2.
medidaqueestesexemplosilustram,ovalordocontadordoprograma,quandopenho
ingendereamentorelativoaoPCoendereodainstruoseguinteosalto,no
adoprpriosalto.Estaconvenoremontaaimplementaescedo,quando
oprocessadoririaatualizarocontadordeprogramacomoseuprimeiropassonaexecuodeum
instruo.
https://translate.googleusercontent.com/translate_f#202 171/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Oseguintemostraaversodesmontadadoprogramaapsaligao:

1 804839c:0d7e jle 80483ab<bobo+0x17>


2 804839e:89d0 mov %Edx,%eax
3 80483a0:d1f8 sar %eax
4 80483a2:29c2 sub %Eax,%edx
5 80483a4:8d1452 Lea (%Edx,%edx,2),%edx
6 80483a7:85d2 teste %Edx,%edx
7 80483a9:7FF3 jg 804839e<bobo+0xa>
8 80483ab:89d0 mov %Edx,%eax
Asinstruesforamrealocadosparaendereosdiferentes,masascodificaes
dasmetasdesaltoemlinhas1e7permaneceminalteradas.UsandoumPCrelativa
codificaodosdestinosdesalto,asinstruespodemsercompactamentecodificado(requerendo
apenas2bytes),eocdigodeobjetopodeserdeslocadoparadiferentesposiesnamemria
semalterao.

PrticaProblema3.15
Nosseguintesexcertosdeumbinriodesmontado,algumasdasinformaestem
foramsubstitudosporXs.Respondaasseguintesperguntassobreestasinstrues.
A.Oqueoalvodainstruojeabaixo?(Vocnoprecisasaber
qualquercoisasobreainstruodechamadaaqui.)

804828f: 7405 Je XXXXXXX


8048291: e81e000000 ligar 80482b4
B.Qualoalvodainstruojbabaixo?

8048357: 72e7 jb XXXXXXX


8048359: c60510a0040801 movb $0x1,0x804a010

Pgina228

Seco3.6Controlo 193

C.Qualoendereodainstruomov?
XXXXXXX: 7412 Je 8048391
XXXXXXX: B800000000 mov $0x0,%eax
D.Nocdigoquesesegue,umalvodesaltocodificadoemformarelativoaoPCcomo4
byte,nmerodecomplementodedois.Osbytessolistadosdemenossignificativapara
mais,refletindoaordenaodebyteslittleendiandeIA32.Qualoendereo
dosaltoalvo?
80482bf: E9e0ffffff jmp XXXXXXX
80482c4: 90 nop
E.explicararelaoentreaanotaonadireitaeacodificaobyte
esquerda.
80482aa: ff25fc9f0408 jmp *0x8049ffc

ParaimplementarasconstruesdeCdecontroloatravsdetransfernciadecontrolecondicional,o
compiladordeveusarosdiferentestiposdeinstruesdesaltoqueacabamosdever.Ns
vaipercorrerasconstruesmaiscomuns,apartirdesimplescondicional
ramos,eentoconsiderarloopseinstruesswitch.

3.6.4Traduzindodesvioscondicionais
AformamaisgeraldetraduzirexpressescondicionaisedeclaraesdeC
emcdigodemquinaautilizaodecombinaesdesaltoscondicionaiseincondicionais.
(Comoalternativa,vamosvernaSeco3.6.6quealgumascondicionaispodeser
implementadoatravsdetransfernciascondicionaisdedadosaoinvsdecontrole.)Porexemplo,
AFigura3.13(a)mostraocdigoCduranteumafunoquecalculaovalorabsoluto
dadiferenadedoisnmeros.2 gccgeraocdigodemontagemcomo
AFigura3.13(c).NscriamosumaversoemC,chamadogotodiff(Figura3.13(b)),
queseguemaisdepertoofluxodessecdigodemontagemdecontrole.EleusaoGoto
declaraoemC,quesemelhanteaosaltoincondicionaldecdigodemontagem.o
gotox_ge_ynalinha4provocaumsaltoparaox_ge_ylabel(umavezqueocorre
quandoXy)nalinha7,saltandooclculodoYXnalinha5.Seotestefalha,a
programacalculaoresultadocomoyxe,emseguida,transfereincondicionalmenteparaaextremidade

https://translate.googleusercontent.com/translate_f#202 172/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
docdigo.Usandoinstruesgotogeralmenteconsideradoummauprogramao
estilo,umavezqueasuautilizaopodetornarocdigomuitodifcildeleredepurar.Nososutilizamos
emnossaapresentaocomoummodoparaconstruirprogramasCquedescrevemocontrole
fluxodeprogramasdemontagemdecdigo.Nschamamosesteestilodeprogramao"cdigodeGoto."
Aimplementaodemontagemdecdigoprimeirocomparaosdoisoperandos(linha3),
definindooscdigosdecondio.Seoresultadodacomparaoindicaquexmaior

2.Naverdade,elepoderetornarumvalornegativoseumadassubtraestransborda.Nossointeresseaqui
demonstrarcdigodemquina,paranoimplementarocdigorobusto.

pgina229

194 Captulo3MachineNvelRepresentaodeProgramas

(A)decdigoCOriginal (B)versoGotoEquivalent
1 intabsdiff(intx,inty){ 1 intgotodiff(intx,inty){
2 Se(x<y) 2 resultadoint
3 voltaryx 3 if(x>=y)
4 outro 4 Gotox_ge_y
5 voltarxy 5 result=yx
6 } 6 Gotofeito
7 x_ge_y:
8 result=xy
9 feito:
10 retornarresultado
11 }
(C)Criaodocdigodemontagem
xem%ebp8,yem%ebp+12
1 movl 8(%ebp),%edx obterx
2 movl 12(%ebp),%eax obtery
3 cMpl %Eax,%edx Comparex:y
4 jge .L2 se>=Gotox_ge_y
5 subi %Edx,%eax Calcularoresultado=yx
6 jmp .L3 Gotofeito
7 .L2: x_ge_y:
8 subi %Eax,%edx resultadoCompute=xy
9 movl %Edx,%eax Definaoresultadocomovalorderetorno
10 .L3: feito:Comececdigodeconcluso
Figura3.13Compilaodedeclaraescondicionais.Cprocedimentoabsdiff(parte(a))
contmumainstruoifelse.Ocdigoassemblygeradomostrado(parte(c)),juntamente
comumprocedimentoCgotodiff(parte(b))queimitaofluxodoconjuntodecontrolo
cdigo.Asporespilhadesetupedeconclusodocdigodemontagemforamomitidos.

ouigualay,entosaltaparaumblocodecdigoquecalculaxy(linha8).
Casocontrrio,elecontinuacomaexecuodecdigoquecalculayx(linha5).Dentro
ambososcasos,oresultadocalculadoarmazenadonoregisto%eax,eoprogramaatinge
Alinha10,alturaemqueseexecutaocdigodeconclusodapilha(norepresentado).
AformageraldeumainstruoifelseemCdadapelomodelo

Se(testeexpr)
entodeclarao
outro
Else

ondetestexprumaexpressointeiraqueavaliatantopara0(interpretadocomo
quesignifica"false")ouparaumvalordiferentedezero(interpretadonosentidode"true").Apenasum
dasduasdeclaraesderamo(entodeclaraoououtracoisastatement)executado.

Pgina230

https://translate.googleusercontent.com/translate_f#202 173/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Seco3.6Controlo 195

Porestaformageral,aimplementaodemontagemnormalmenteadereao
seguinteformulrio,ondeusamosasintaxeCparadescreverofluxodecontrole:

t=testexpr
if(!t)
Gotofalse
entodeclarao
Gotofeito
falso:
Else
feito:

Isto,ocompiladorgerablocosseparadosdecdigoparainstruoThene
Else.Eleinseredesvioscondicionaiseincondicionaisparagarantirqueo
blococorrectoexecutado.

PrticaProblema3.16
QuandodadoocdigoC

1 condvoid(inta,int*p)
2 {
3 se(P&&a>0)
4 *P=+A
5 }

gccgeraoseguintecdigodemontagemparaocorpodafuno:

umebp%+8,pem%ebp+12
1 movl 8(%ebp),%edx
2 movl 12(%ebp),%eax
3 testl %Eax,%eax
4 Je .L3
5 testl %Edx,%edx
6 jle .L3
7 addl %Edx,(%eax)
8 .L3:

A.FaaumaversoGotoemCquerealizaamesmacomputaoeimita
ofluxodecontroledocdigodemontagem,noestilomostradonaFigura3.13(b).
Vocpodeacharquetilparaaprimeiraanotarocdigodemontagemcomotemosfeito
nosexemplos.
B.Expliqueporqueocdigodemontagemcontmdoisdesvioscondicionais,mesmo
queocdigoCtemapenasumif.

pgina231

196 Captulo3MachineNvelRepresentaodeProgramas

PrticaProblema3.17
UmaregraalternativaparatraduzirseasdeclaraesemcdigoGotoaseguinte:

t=testexpr
Se(t)
Irverdade
Else
Gotofeito
verdade:
entodeclarao
feito:
A.ReescreveraversoGotodeabsdiffcombasenestaregraalternativa.
https://translate.googleusercontent.com/translate_f#202 174/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
B.Vocpodepensaremquaisquerrazesparaaescolhadeumaregrasobreooutro?

PrticaProblema3.18
ComeandocomocdigoCdoformulrio

1 testeint(intx,inty){
2 intval=
3 Ese( ){
4 Ese( )
5 val=
6 outro
7 val=
8 }Elseif( )
9 val=
10 regressoVal
11 }
gccgeraoseguintecdigodemontagem:

xem%ebp8,yem%ebp+12
1 movl 8(%ebp),%eax
2 movl 12(%ebp),%edx
3 cMpl $3,%Eax
4 jge .L2
5 cMpl %Edx,%eax
6 jle .L3
7 imull %Edx,%eax
8 jmp .L4
9 .L3:
10 Leal (%Edx,%eax),%eax
11 jmp .L4
12 .L2:

pgina232

Seco3.6Controlo 197

13 cMpl $2,%eax
14 jg .L5
15 xorl %Edx,%eax
16 jmp .L4
17 .L5:
18 subi %Edx,%eax
19 .L4:
PreenchaasexpressesemfaltanocdigoC.Parafazeroajustecdigoparao
modelodecdigoC,vocterdedesfazeralgunsdosreordenaodeclculos
feitoporgcc.

3.6.5Loops
Coferecevriasconstrues,ousejalooping,dotempo,tempo,epara.No
existeminstruescorrespondentesnocdigodemquina.Emvezdisso,ascombinaesdecondio
ostestesadicionaisesaltossoutilizadosparaimplementaroefeitodelacetes.Amaioriadoscompiladores
gerarocdigodeloopbaseadonoformulriodowhiledeumloop,mesmoqueestaforma
relativamenteincomumemprogramasreais.Outrosloopssotransformadosemdo
enquantoformae,emseguida,compiladoemcdigodemquina.Vamosestudaratraduo
deloopscomoumaprogresso,comeandocomdotempoedepoistrabalharparaos
comimplementaesmaiscomplexas.

DoWhileLoops
Aformageraldeumainstruodowhileaseguinte:
Faz
corpostatement
enquanto(testeexpr)
Oefeitodocicloparaexecutarrepetidamentecorpodeclarao,avaliartestexpr,
econtinuarociclo,seoresultadodaavaliaodiferentedezero.Observequecorpo
declaraoexecutadopelomenosumavez.
Estaformageralpodesertraduzidoemcondicionaiseinstruesgotocomo

https://translate.googleusercontent.com/translate_f#202 175/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Seguinte:
loop:
corpostatement
t=testexpr
Se(t)
loopdeempreendedores
Isto,emcadaiteraodoprogramaavaliaainstruodocorpoe,emseguida,o
expressodeteste.Seotesteforbemsucedido,nsvoltarparaoutraiterao.
Comoumexemplo,aFigura3.14(a)mostraumaimplementaodeumarotinaparacom
puteofatorialdeseuargumento,escriton!,comumlaodowhile.Estafuno
nicacalculaovaloradequadoparan>0.

pgina233

198 Captulo3MachineNvelRepresentaodeProgramas

(A)decdigoC (C)ocdigodelinguagemassemblyCorrespondente
1 intfact_do(intn) Argumento:nem%ebp+8
2 { Registos:nem%edx,resultarem%eax
3 intresultado=1 1 movl 8(%ebp),%edx obtern
4 Faz{ 2 movl US$1,%eax Definirresultado=1
5 resultado*=n 3 .L2: loop:
6 n=N1 4 imull %Edx,%eax resultadoCompute*=n
7 }Enquanto(n>1) 5 subi US$1,%edx decrementon
8 retornarresultado 6 cMpl US$1,%edx CompararN:1
9 } 7 jg .L2 Se>,Gotocircuito
resultadoderetorno
(B)Registarouso
registo Varivel Inicialmente
%eax resultado 1
%edx N N
Figura3.14Cdigodedowhileversodoprogramafatorial.OcdigoC,ogerado
cdigodemontagem,eumatabeladeusoderegistomostrado.

PrticaProblema3.19
A.Qualovalormximodenparaosquaispodemosrepresentarn!comum32bits
int?
B.Quetalparaum64bitinteirolongotempo?

OcdigodemontagemmostradonaFigura3.14(c)mostraumaimplementaopadro
deumloopdowhile.Apsainicializaodoregisto%edxparasegurarne%eax
parasegurarresultado,oprogramacomealooping.Eleexecutaprimeiroocorpodoloop,
queconsisteaquidasalteraesdevariveisresultadoen(linhas45).Emseguida,testa
sen>1,e,emcasoafirmativo,quesaltadevoltaaoinciodocircuito.Vemosaqui
queosaltocondicional(linha7),ainstruodechavenaimplementaodeumciclo.isto
determinaseacontinuaraiteraoouparasairdoloop.
Determinarquaisregistrossousadosparaoqualvaloresdoprogramapodeserdesa
lenging,especialmentecomocdigodecircuito.TemosmostradoumtalmapeamentonaFigura3.14.
Nestecaso,omapeamentobastantesimplesparadeterminar:podemosvernficandocarregado
noregistrador%edxnalinha1,ficandodiminudonalinha5,equeestsendotestadoem
linha6.Conclumos,portanto,queesteregistomantmn.
Podemosverregisto%eaxsendoinicializadoa1(linha2),esendoatualizado
pormultiplicaonalinha4.Almdisso,umavez%eaxutilizadaparadevolverafuno
valor,elemuitasvezesescolhidoparaarmazenarvaloresdeprogramasquesodevolvidos.Porisso
concluirqueeax%correspondeaoresultadovalordoprograma.

https://translate.googleusercontent.com/translate_f#202 176/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

pgina234

Seco3.6Controlo 199

Almreversaloopsdeengenharia
Achaveparaentendercomoocdigoassemblygeradorelacionasecomocdigofonteoriginalencontrarum
mapeamentoentrevaloreseregistrosdoprograma.EstatarefaerasimplesosuficienteparaocircuitodaFigura3.14,
maspodesermuitomaisdifcilparaosprogramasmaiscomplexos.OcompiladorC,muitasvezes,reorganizar
osclculos,demodoquealgumasvariveisnocdigoCnotmcontrapartidanocdigodemquina,e
novosvaloressointroduzidosnamquinadecdigoquenoexistemnocdigofonte.Almdisso,elevai
muitasvezestentamminimizarousodoregistomapeandovriosvaloresdeprogramaemumnicoregisto.
Oprocessoquedescritoparafact_dofuncionacomoumaestratgiageralparaloopsdeengenhariareversa.
Olhecomoregistossoinicializadosantesdoloop,atualizadoetestadodentrodoloop,eusado
depoisdociclo.Cadaumadelasforneceumindciodequepodemsercombinadospararesolverumquebracabea.Estejapreparadopara
transformaessurpreendentes,algunsdosquaissoclaramentecasosemqueocompiladorfoicapazdeoptimizar
ocdigo,eoutrosondedifcilexplicarporqueocompiladorescolheuessaestratgiaparticular.Dentro
nossaexperincia,gcc,muitasvezesfazcomqueastransformaesqueoferecemnenhumbenefcioaodesempenhoepodeatmesmo
diminuirodesempenhodocdigo.

PrticaProblema3.20
ParaocdigoC

1 intdw_loop(intx,inty,intn){
2 Faz{
3 x+=N
4 *Y=N
5 n
6 }While((n>0)&&(y<N))
7 voltarx
8 }
gccgeraoseguintecdigodemontagem:

xem%ebp8,yem%ebp12,nem%ebp+16
1 movl 8(%ebp),%eax
2 movl 12(%ebp),%ecx
3 movl 16(%ebp),%edx
4 .L2:
5 addl %Edx,%eax
6 imull %Edx,%ecx
7 subi US$1,%edx
8 testl %Edx,%edx
9 jle .L5
10 cMpl %Edx,%ecx
11 jl .L2
12 .L5:
A.Adicioneumatabeladeregistodeutilizao,semelhanteaomostradonaFigura3.14(b).

pgina235

200 Captulo3MachineNvelRepresentaodeProgramas

B.IdentificartestexprecorpodeclaraonocdigoC,eoscorrespondentes
linhasnocdigodemontagem.
C.Adicionaranotaesparaocdigoassemblyquedescreveofuncionamentodopro
grama,semelhanteaosmostradosnaFigura3.14(b).

enquantoLoops
Aformageraldeumcomandowhileaseguinte:

https://translate.googleusercontent.com/translate_f#202 177/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
while(testexpr)
corpostatement
Eladiferedadowhileemquetestexpravaliadoeolooppotencialmente
rescindidoantesdaprimeiraexecuodecorpostatement.Humnmerode
maneirasdetraduzirumloopwhileemcdigodemquina.Umaabordagemcomum,tambm
usadopelogcc,transformarocdigoemumloopdowhileusandoumacondicional
ramificarparapularaprimeiraexecuodocorpo,senecessrio:
if(!testexpr)
Gotofeito
Faz
corpostatement
enquanto(testeexpr)
feito:
Este,porsuavez,podesertransformadoemcdigocomoGoto
t=testexpr
if(!t)
Gotofeito
loop:
corpostatement
t=testexpr
Se(t)
loopdeempreendedores
feito:
Usandoessaestratgiadeimplementao,ocompiladormuitasvezespodeotimizarainicial
teste,porexemplo,determinandoqueacondiodetestesemprerealizar.
Comoumexemplo,aFigura3.15mostraumaimplementaodafunofatorial
ousandoumloopwhile(Figura3.15(a)).Estafunocalculacorretamente0!=1.
Afunofact_while_gotoadjacente(Figura3.15(b))umaversoCda
cdigoassemblygeradopelogcc.Comparandoocdigogeradoparafact_while
(Figura3.15)paraque,parafact_do(Figura3.14),vemosqueelessoquaseiden
ticos.Anicadiferenaqueoensaioinicial(linha3)eosaltoemtornodolao
(Linha4).Ocompiladorseguidodepertonossomodeloparaconverterumloopwhile
paraumloopdowhile,eparatraduziresseloopaocdigoGoto.

pgina236

Seco3.6Controlo 201

(A)decdigoC (B)versoGotoEquivalent
1 intfact_while(intn) 1 intfact_while_goto(intn)
2 { 2 {
3 intresultado=1 3 intresultado=1
4 enquanto(n>1){ 4 Se(N<=1)
5 resultado*=n 5 Gotofeito
6 n=N1 6 loop:
7 } 7 resultado*=n
8 retornarresultado 8 n=N1
9 } 9 Se(n>1)
10 loopdeempreendedores
11 feito:
12 retornarresultado
13 }

(C)ocdigodelinguagemassemblyCorrespondente
Argumento:nem%ebp+8
Registos:nem%edx,resultarem%eax
1 movl 8(%ebp),%edx obtern
2 movl US$1,%eax Definirresultado=1
3 cMpl US$1,%edx CompararN:1
4 jle .L7 Se<=,Gotodone
5 .L10: loop:
6 imull %Edx,%eax resultadoCompute*=n
7 subi US$1,%edx decrementon
8 cMpl US$1,%edx CompararN:1
9 jg .L10 Se>,Gotocircuito
10 .L7: feito:
resultadoderetorno
Figura3.15Cecdigodemontagemparaenquantoversodofatorial.ofact_while_

https://translate.googleusercontent.com/translate_f#202 178/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Irfunoilustraofuncionamentodaversodocdigodemontagem.

PrticaProblema3.21
ParaocdigoC

1 intloop_while(inta,intb)
2 {
3 intresultado=1
4 enquanto(a<b){
5 *=resultado(a+b)
6 a++
7 }
8 retornarresultado
9 }

pgina237

202 Captulo3MachineNvelRepresentaodeProgramas

gccgeraoseguintecdigodemontagem:

Aa%EBP8,ba%EBP12
1 movl 8(%ebp),%ecx
2 movl 12(%ebp),%ebx
3 movl US$1,%eax
4 cMpl %Ebx,ecx%
5 jge .L11
6 Leal (%Ebx,ecx%),%edx
7 movl US$1,%eax
8 .L12:
9 imull %Edx,%eax
10 addl US$1,%ecx
11 addl US$1,%edx
12 cMpl %Ecx,%ebx
13 jg .L12
14 .L11:
Emgerarestecdigo,gccfazumatransformaointeressanteque,em
efeito,introduzumanovavariveldeprograma.
A.Register%edxinicializadonalinha6eatualizadadentrodocircuitonalinha11.
Consideramqueesteumnovovariveldeprograma.Descrevercomoeleserelacionacoma
variveisnocdigoC.
B.Criarumatabeladeusoderegistoparaestafuno.
C.anotarocdigodemontagemparadescrevercomoeleopera.
D.EscreverumaversoGotodafuno(emC)queimitacomoamontagem
programadecdigoopera.

PrticaProblema3.22
Umafuno,fun_a,temaseguinteestruturageral:
fun_aint(semsinalx){
intval=0
enquanto( ){

}
Retorna
}
OcompiladorgccCgeraoseguintecdigodemontagem:
xem%ebp+8
1 movl 8(%ebp),%edx
2 movl R$0,%eax
3 testl %Edx,%edx

https://translate.googleusercontent.com/translate_f#202 179/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

pgina238

Seco3.6Controlo 203

4 Je .L7
5 .L10:
6 xorl %Edx,%eax
7 shrl %edx Deslocamentoparaadireitapor1
8 jne .L10
9 .L7:
10 eeu US$1,%eax

Fazerengenhariareversadofuncionamentodestecdigoe,emseguida,faaoseguinte:
A.UseaversodemontagemdecdigoparapreencheraspartesfaltantesdocdigoC.
B.DescrevaemInglsoqueestafunocalcula.

paraLoops
Aformageraldeumloopaseguinte:

for(initexprtestexprupdateexpr)
corpostatement

OsestadosdelinguagemCpadro(comumaexcepo,comdestaquenoProblema3.24)
queocomportamentodeumtalcircuitoidnticoaocdigoseguinte,queutilizaum
while:

initexpr
enquanto(testeexpr){
corpostatement
atualizarexpr
}

Oprimeiroprogramaavaliaaexpressodeinicializaoinitexpr.Eleintroduzumciclo
quandodasuaprimeiraavaliaacondiodetestetestexpr,saindoseotestefalhar,ento
executaocorpodoloopcorpoafirmao,e,finalmente,avaliaaactualizao
expressoupdateexpr.
Aformacompiladadestecdigobaseadonatransformaodetempopara
dowhiledescritoanteriormente,primeirodandoumaformadowhile:

initexpr
if(!testexpr)
Gotofeito
Faz{
corpostatement
atualizarexpr
}While(testexpr)
feito:

pgina239

204 Captulo3MachineNvelRepresentaodeProgramas

Este,porsuavez,podesertransformadoemcdigocomoGoto
initexpr
t=testexpr
if(!t)
Gotofeito
loop:

https://translate.googleusercontent.com/translate_f#202 180/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
corpostatement
atualizarexpr
t=testexpr
Se(t)
loopdeempreendedores
feito:
Comoexemplo,considereumafunofatorialescritocomumloopfor:

1 intfact_for(intn)
2 {
3 inti
4 intresultado=1
5 for(i=2i<=ni++)
6 resultado*=i
7 retornarresultado
8 }
Comomostrado,ocaminhonaturaldeescreverumafunofatorial,comumloop
amultiplicarsefactoresde2aN,eassimqueestafunobastantediferentedo
cdigoquemostrouusandoumtempoouumloopdowhile.
Podemosidentificarosdiferentescomponentesdoloopfornaessecdigocomo
Seguinte:
initexpr i=2
testeexpr i<=n
updateexpr i++
corpostatement resultado*=i
Substituindoestescomponentesnomoldequeapresentaramrendimentosdo
seguinteversoemcdigoGoto:

1 intfact_for_goto(intn)
2 {
3 inti=2
4 intresultado=1
5 if(!(i<=N))
6 Gotofeito
7 loop:
8 resultado*=i
9 i++

pgina240

Seco3.6Controlo 205

10 Se(i<=N)
11 loopdeempreendedores
12 feito:
13 retornarresultado
14 }
Defato,umexameatentodocdigodemontagemproduzidaporgccseguedeperto
estemodelo:

Argumento:nem%ebp+8
Registos:nem%ecx,iem%edx,resultarem%eax
1 movl 8(%ebp),%ecx obtern
2 movl $2,%edx Definiria2 (nisso)
3 movl US$1,%eax Conjuntoderesultadospara1
4 cMpl US$1,%ecx CompararN:1 (!teste)
5 jle .L14 Se<=,Gotodone
6 .L17: loop:
7 imull %Edx,%eax resultadoCompute*=i(corpo)
8 addl US$1,%edx incrementoi (atualizar)
9 cMpl %Edx,%ecx Comparen:i (teste)
10 jge .L17 Se>=,Gotocircuito
11 .L14: feito:
VemosapartirdestaapresentaoquetodasastrsformasdeloopsemCdotempo,
tempo,eparapodesertraduzidoporumaestratgianica,gerandocdigoquecon
tmumoumaisramoscondicionais.transfernciacondicionaldecontrolefornece
omecanismobsicoparatraduzirlaosemcdigodemquina.

PrticaProblema3.23
https://translate.googleusercontent.com/translate_f#202 181/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Afun_bfunotemaseguinteestruturageral:
fun_bint(semsinalx){
intval=0
inti
para( ){

}
regressoVal
}
OcompiladorgccCgeraoseguintecdigodemontagem:

xem%ebp+8
1 movl 8(%ebp),%ebx
2 movl R$0,%eax
3 movl R$0,%ecx
4 .L13:

pgina241

206 Captulo3MachineNvelRepresentaodeProgramas

5 Leal (%Eax,eax%),%edx
6 movl %EBX,%eax
7 eeu US$1,%eax
8 orl %Edx,%eax
9 shrl %ebx Deslocamentoparaadireitapor1
10 addl US$1,%ecx
11 cMpl US$32,%ecx
12 jne .L13
Fazerengenhariareversadofuncionamentodestecdigoe,emseguida,faaoseguinte:
A.UseaversodemontagemdecdigoparapreencheraspartesfaltantesdocdigoC.
B.DescrevaemInglsoqueestafunocalcula.

PrticaProblema3.24
ExecutarumainstruocontinuaremCfazcomqueoprogramaparairparaofinalde
oatualiteraodoloop.Aregraindicadaparatraduzirumloopforemumtempo
circuitoprecisadealgumrefinamentoaolidarwithcontinuestatements.Porexemplo,
considereoseguintecdigo:
/*Exemplodeloopusandoumainstruocontinuar*/
/*Sumatmesmonmerosentre0e9*/
intsum=0
inti
for(i=0i<10i++){
Se(i&1)
continuar
sum+=i
}
A.Oqueteremosseingenuamenteaplicadonossaregraparatraduziroloop
emumloopwhile?Oqueseriaerradocomestecdigo?
B.Comovocpoderiasubstituirainstruocontinuecomumainstruogotopara
garantirqueoloopwhileduplicacorretamenteocomportamentodoloopfor?

3.6.6instruesdemovimentocondicionais
Amaneiraconvencionalparaimplementaroperaescondicionaisatravsdeumacondio
transfernciacionaldecontrole,ondeoprogramasegueumcaminhodeexecuoquando
umacondioseguraeoutroquandoissonoacontece.Estemecanismosimplese
emgeral,maspodeserbastanteineficienteemprocessadoresmodernos.
Umaestratgiaalternativaatravsdeumatransfernciacondicionaldedados.Estaabordagem
calculaambososresultadosdeumaoperaocondicional,e,emseguida,selecionaumbaseadoem
seounoacondiosegura.Estaestratgiasfazsentidorestrito
casos,maselepodeserimplementadoporumsimplesmovimentocondicionaldeinstrues
quemelhorcombinamcomascaractersticasdeprocessadoresmodernosdedesempenho.

https://translate.googleusercontent.com/translate_f#202 182/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

pgina242

Seco3.6Controlo 207

Vamosexaminaressaestratgiaesuaimplementaocomasversesmaisrecentes
deprocessadoresIA32.
ComeandocomaPentiumProem1995,geraesrecentesdeprocessadoresIA32
tiveraminstruesdemovimentaocondicionalqueounofazemnada,oucopiarumvalor
paraumregisto,deacordocomosvaloresdoscdigosdecondio.Duranteanos,estes
instruestmsidoamplamenteutilizados.Comasconfiguraespadro,gccnoge
Cdigorarqueosusados,porqueissoimpediriacompatibilidadecomversesanteriores,
emboraquasetodososprocessadoresx86fabricadospelaInteledeseusconcorrentes
desde1997tmapoiadoestasinstrues.Maisrecentemente,parasistemasexecutando
emprocessadoresqueestodeterminadosaapoiarmovimentoscondicionais,comoIntelbased
computadoresAppleMacintosh(introduzidasem2006)easversesdoLinuxde64bits
eWindows,gccirgerarcdigousandomovimentoscondicionais.Dandoespecial
parmetrosdelinhadecomandoemoutrasmquinas,podemosindicarparagccqueoalvo
obtermquinasuportainstruesdemovimentocondicionais.
Comoumexemplo,aFigura3.16(a)mostraumaformavariantedafuno
absdiffusamosnaFigura3.13parailustrarramificaocondicional.Estaverso
usaumacondicionalexpressoemvezdeumacondicionaldeclaraoparailustrar
osconceitosatrstransfernciasdedadoscondicionaisdeformamaisclara,mas,defacto,ogcc

(A)decdigoCOriginal (B)Aplicaoutilizandocondicional
tarefa
1 intabsdiff(intx,inty){ 1 intcmovdiff(intx,inty){
2 voltarx<y?yx:xy 2 inttval=yx
3 } 3 intrval=xy
4 testeint=x<y
5 /*Alinhaabaixorequer
6 SingleInstruction:*/
7 if(test)rval=tval
8 voltarrval
9 }
(C)Criaodocdigodemontagem
xem%ebp8,yem%ebp+12
1 movl 8(%ebp),%ecx obterx
2 movl 12(%ebp),%edx obtery
3 movl %Edx,%ebx Copiary
4 subi %Ecx,%ebx Computeyx
5 movl %Ecx,eax% Copiarx
6 subi %Edx,%eax Computarxyedefinircomovalorderetorno
7 cMpl %Edx,%ecx Comparex:y
8 cmovl %EBX,%eax Se<,substituavalorderetornocomyx
Figura3.16Compilaodedeclaraescondicionaisusandoaatribuiocondicional.
FunoCabsdiff(a)contmumaexpressocondicional.Ocdigoassemblygerado
mostrada(C),juntamentecomumafunoCcmovdiff(b)queimitaofuncionamentodo
cdigodemontagem.Apilhadesetupedeconclusoporesdocdigodemontagemtm
foramomitidos.

pgina243

208 Captulo3MachineNvelRepresentaodeProgramas

geracdigoidnticoparaestaversocomofazparaaversodaFigura3.13.Ese
nscompilamosestadandogccaopodelinhadecomando'march=i686',3 geramos
ocdigodemontagemmostradonaFigura3.16(c),terumaformaaproximadamostrada
pelocmovdifffunoCmostradonaFigura3.16(b).EstudaraversoC,ns

https://translate.googleusercontent.com/translate_f#202 183/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
podeverqueelecalculatantoyxexy,nomeandoestestvalerval,respec
Mente.Emseguida,eletestasexmenorquey,eemcasoafirmativo,cpiastvalpararvalantes
retornandorval.OcdigodemontagemnaFigura3.16(c)segueamesmalgica.o
chavequeainstruocmovlnica(linha8)dosimplementoscdigodemontagem
aatribuiocondicional(linha7)decmovdiff.Estainstruotemamesma
sintaxecomoumainstruomov,excetoqueelesexecutaomovimentodedadosseo
condioespecificadadetm.(Osufixo'l'emcmovlsignifica"menos",nopara"longo".)
Paraentenderporqueocdigobaseadoemtransfernciasdedadoscondicionaispodesuperar
cdigobaseadoemtransfernciascondicionaisdecontrole(comonaFigura3.13),devemosentender
algosobrecomoosprocessadoresmodernosoperar.Comoveremosnoscaptulos4
e5,osprocessadoresdealcanarumaltodesempenhoatravsdecanalizao,quandoumainstruo
oprocessadoatravsdeumasequnciadefases,cadaumaexecutandoumapequenaporode
asoperaesnecessrias(porexemplo,buscarainstruodamemria,determinando
otipodeinstruo,lendoapartirdamemria,queexecutaumaoperaoaritmtica,
escreverparaamemria,eatualizarocontadordeprograma.)Estaabordagematinge
altodesempenhoatravsdasobreposiodospassosdasinstruessucessivas,tais
comobuscarumainstruoaoexecutarasoperaesaritmticasparaumapr
instruesrior.Parafazerissoexigesercapazdedeterminarasequnciade
instruesaseremexecutadasbemantesdotempo,afimdemanteropipelinecompleto
deinstruesaseremexecutadas.Quandoamquinaencontraumsaltocondicional
(Referidocomoum"ramo"),quemuitasvezesnopossveldeterminaraindaseounoosalto
vaiserseguido.Processadoresempregamsofisticadalgicadeprevisodedesvioparatentar
achoquesecadainstruodesaltoserseguido.Enquantoelepodeadivinhar
deformaconfivel(modernosdesignsdemicroprocessadorestentaralcanartaxasdesucessonaordem
de90%),opipelinesermantidocheiodeinstrues.Mispredictingum
salto,poroutrolado,exigequeoprocessadordedescartaramaiorpartedotrabalhoque
jfeitoeminstruesfuturase,emseguida,comearaencherogasodutocomin
truesiniciandonolocalcorreto.Comoveremos,talmispredictionpode
incorreremumapenalidadegrave,dizem,2040ciclosderelgiodeesforodesperdiado,causandoumsrio
adegradaododesempenhodoprograma.
Comoumexemplo,nscorremostimingsdafunoabsdiffemumprocessadorIntelCorei7
processadorusandodoismtodosdeimplementaodaoperaocondicional.Emum
aplicaotpica,oresultadodotestedeX<Yaltamenteimprevisvel,eassim
atmesmoohardwareprevisodedesviosmaissofisticadovaiadivinharcorretamentesomente
cercade50%dotempo.Almdisso,osclculosrealizadosemcadaumdos
duasseqnciasdecdigorequersomenteumnicocicloderelgio.Comoconsequncia,oramo
penamispredictiondominaodesempenhodestafuno.ParaoIA32
cdigocomsaltoscondicionais,descobrimosqueafunorequercercade13relgio

3.Naterminologiagcc,oPentiumdeveserconsideradamodelo"586"eoPentiumProdeveser
ponderadamodelo"686"dalinhax86.

pgina244

Seco3.6Controlo 209

ciclosporchamadaquandoopadroderamificaofacilmenteprevisvel,ecercade35
ciclosderelgioporchamadaquandoopadroderamificaoaleatrio.Apartirdissopodemosinferir
queapenamispredictionramodecercade44ciclosdeclock.Issosignificahora
requeridopelosintervalosdefunoentrecercade13e57ciclos,dependendo
ounooramoestprevistocorretamente.

AlmComovocdeterminouestapena?
Suponhaqueaprobabilidadedemispredictionp,otempoparaexecutarocdigosemmispredictionTOK,
eapenamispredictionTMP.Emseguida,otempomdionecessrioparaexecutarocdigocomoumafunodep
Tavg(p)=(1p)TOK+p(TOK+TMP)=TOK+pTMP.EstamosatendendoTOKeTcorreu,otempomdio
quandop=0.5,equeremosdeterminarTMP.Substituindonaequao,temosTcorreu=Tavg(0.5)=
TOK+0.5TMPe,portanto,TMP=2(TcorreuTMP).Assim,porTOK=13eTcorreu=35,temosTMP=44.

Poroutrolado,ocdigocompiladoutilizandomovimentoscondicionaisexige
cercade14ciclosderelgio,independentementedosdadosqueestosendotestados.Ofluxodecontrole
nodependededados,eissofazcomquesejamaisfcilparaoprocessadorparamanterasua
pipelinecheio.

PrticaProblema3.25
RodandoemumPentium4,onossocdigonecessriocercade16ciclos,quandoaramificao
padroeraaltamenteprevisvel,ecercade31ciclos,quandoopadrofoialeatria.
A.Qualapenadeperderaproximada?

https://translate.googleusercontent.com/translate_f#202 184/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
B.Quantosciclosafunoexigiriaquandooramomispre
dicted?

AFigura3.17ilustraalgumasdasinstruesdemovimentocondicionaisadicionadosao
instruesIA32conjuntocomaintroduodomicroprocessadorPentiumProe
suportadopelamaioriadosprocessadoresIA32fabricadospelaInteledeseusconcorrentes
desde1997.Cadaumadessasinstruestemdoisoperandos:umregistodeorigemoumem
orylocalizaoS,eumdestinoregistoR.Talcomoacontececomodifferentset(Seo3.6.2)
einstruesdesalto(Seo3.6.3),oresultadodestasinstruesdepende
sobreosvaloresdoscdigosdecondio.Ovalordeorigemlidoapartirdequalquermem
oryouoregistrodeorigem,maselecopiadoparaodestinoapenasseoespecificado
condiosegura.
ParaIA32,osvaloresdeorigemededestinopodeser16ou32bitsdecomprimento.Solteiro
bytemovimentoscondicionaisnososuportados.Aocontrriodasinstruesincondicionais,
ondeocomprimentoexplicitamenteoperandocodificadoemnomedeinstrues(porexemplo,movw
emovl),omontadorpodeseinferirocomprimentodooperandodeummovimentocondicional
deinstruesapartirdonomedoficheirodedestino,eporissoamesmainstruo
nomepodeserutilizadoparatodososcomprimentosdeoperandos.
Aocontrriodesaltoscondicionais,oprocessadorpodeexecutarmovimentocondicionalin
truessemterdepreveroresultadodoteste.Oprocessadorsimplesmente

pgina245

210 Captulo3MachineNvelRepresentaodeProgramas

Instruo Sinnimo condiodemovimento


Descrio
cmove S,R cmovz ZF Igual/zero
cmovneS ,R cmovnz ~ZF Noigual/nozero
cmovs S,R SF Negativo
cmovnsS ,R ~SF nonegativo
cmovg S,R cmovnle Maior(assinado>)
~(SF^DE)&~ZF
cmovgeS ,R cmovnl ~(SF^DE) Maiorouigual(assinado>=)
cmovl S,R cmovnge SF^DE Menos(assinado<)
cmovleS ,R cmovng (SF^DE)|ZF Menorouigual(assinado<=)
cmova S,R cmovnbe ~CF&~ZF Acima(semsinal>)
cmovaeS ,R cmovnb ~CF Superiorouigual(noassinado>=)
CMoVb S,R cmovnae CF Abaixo(semassinatura<)
cmovbeS ,R cmovna CF|ZF inferiorouigual(noassinada<=)

Figura3.17Asinstruesdemovimentaocondicionais.Estasinstruescopiarocdigofonte
valorSparaoseudestinoRquandoacondiodemovimentosemantm.Algumasinstruestm
"sinnimos,"nomesalternativosparaamesmainstruodemquina.

lovalordeorigem(possivelmenteapartirdamemria),verificaocdigodecondio,e
emseguida,actualizaroregistodedestinooumantmamesma.Vamosexplorar
aimplementaodemovimentoscondicionaisnoCaptulo4.
Paraentendercomoasoperaescondicionalpodeserimplementadaatravsdecondi
transfernciasdedadosadicionais,considereoseguinteformageraldaexpressocondicional
eatribuio:

v=testexpr?entoexpr:elseexpr

ComtradicionalIA32,ocompiladorgeracdigotendoumaformamostradapela
seguintecdigoabstrato:

if(!testexpr)
Gotofalse
v=trueexpr
Gotofeito
falso:
v=elseexpr
feito:

Estecdigocontmduassequnciasdecdigodeumavaliandoemseguida,expreumaava
Atingelseexpr.Umacombinaodesaltoscondicionaiseincondicionaisusadopara
assegurarqueapenasumadassequnciasavaliada.

https://translate.googleusercontent.com/translate_f#202 185/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

pgina246

Seco3.6Controlo 211

Paraocdigobaseadoemmovimentocondicional,tantooentoexpreoelseexpr
soavaliadas,comovalorfinalescolhidocombasenaavaliaodetesteexpr.este
podeserdescritopelocdigoderesumoquesesegue:

vt=entoexpr
v=elseexpr
t=testexpr
if(t)v=vt
Adeclaraofinalnestasequnciaimplementadocomummovimentocondicional
valorvtcopiadoparavsomentesecondiodetestetdetm.
Nemtodasasexpressescondicionaispodesercompiladousandomovimentoscondicionais.
Maissignificativamente,ocdigoabstratotemosmostradoavaliatantooentoexpre
elseexpr,independentementedoresultadodoteste.Seumadasduasexpressespodia
possivelmentegerarumacondiodeerroouumefeitosecundrio,istopoderiaconduzirainvlido
comportamento.Comoilustrao,considereaseguintefunoC:

intcread(int*xp){
retorno(xp*xp:0)
}
Numprimeiromomento,estepareceserumbomcandidatoparacompilarusandoummovimentocondicional
paralerovalordesignadoporXPponteiro,comomostradonoseguinteconjunto
cdigo:

implementaoinvlidodefunocread
xpnoregisto%edx
1 movl R$0,%eax Defina0paraovalorderetorno
2 testl %Edx,%edx xpteste
3 cmovne(%EDX),%eax Se0,dereferencexpparaobterovalorderetorno
Estaimplementaoinvlido,noentanto,umavezqueodereferencingdexppela
instruescmovne(linha3)ocorremesmoquandootestefalhar,causandoumponteironulo
dereferencingerro.Emvezdisso,estecdigodevesercompiladousandoocdigoderamificao.
Umcasosemelhanteaplicasequandoumdosdoisramosprovocaumefeitocolateral,talcomo
ilustradopelaseguintefuno:

1 /*Varivelglobal*/
2 intlCount=0
3 intabsdiff_se(intx,inty){
4 voltarx<y?(LCount++,yx):xy
5 }
EstafunoincrementalCountvarivelglobalcomopartedeentoexpr.Portanto,
ramificaodecdigodeveserutilizadoparagarantiresteefeitocolateralsocorrequandooteste
condiosegura.
Usandomovimentoscondicionaistambmnemsempremelhoraraeficinciadocdigo.Para
exemplo,setantooentoexprouelseexpravaliaorequerumasignificativa

pgina247

212 Captulo3MachineNvelRepresentaodeProgramas

computao,entoesteesforodesperdiadoquandoacondiocorrespondentefaz

https://translate.googleusercontent.com/translate_f#202 186/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Nosegure.Compiladoresdevelevaremcontaodesempenhorelativodedesperdiado
computaoversusopotencialdeperdadedesempenhodevidoaramificarmispre
dico.Naverdade,elesrealmentenotminformaosuficienteparatomaressadeciso
fiabilidadeporexemplo,elesnosabemoquobemosramosseguiropr
padresprevisveis.Nossosexperimentoscomgccindicamqueeleusaapenascondicional
movesequandoasduasexpressespodesercalculadacommuitafacilidade,porexemplo,com
instruesaddindividuais.Emnossaexperincia,gccusaastransfernciascondicionaisdecontrole
mesmoemmuitoscasosemqueocustodemispredictionramoultrapassariamesmo
clculosmaiscomplexos.
Emgeral,ento,vemosqueastransfernciasdedadoscondicionaisoferecerumaalternativa
estratgiaparaastransfernciascondicionaisdecontroledeexecuodasacescondicionais.
Elesspodemserusadasemcasoslimitados,masestescasossobastantecomunse
proporcionaroumamelhorcorrespondnciaparaaoperaodosprocessadoresmodernos.

PrticaProblema3.26
NafunoCseguinte,nsdeixamosadefiniodeOPoperaoincompleta:

#defineOP /*Operadordesconhecido*/

intarith(intx){
voltarxOP4
}
Quandocompilado,gccgeraoseguintecdigodemontagem:

Registrese:xem%edx
1 Leal 3(%EDX),%eax
2 testl %Edx,%edx
3 cmovns%edx,%eax
4 sarl $2,%eax Valorderetornoem%eax
A.OfuncionamentoOP?
B.Anoteocdigoparaexplicarcomoelefunciona.

PrticaProblema3.27
ComeandocomocdigoCdoformulrio

1 testeint(intx,inty){
2 intval=
3 Ese( ){
4 Ese( )
5 val=
6 outro
7 val=

pgina248

Seco3.6Controlo 213

8 }Elseif( )
9 val=
10 regressoVal
11 }
gcc,comaconfiguraodelinhadecomando'march=i686',geraoseguinteas
Cdigotagem:

xem%ebp8,yem%ebp+12
1 movl 8(%ebp),%ebx
2 movl 12(%ebp),%ecx
3 testl %Ecx,%ecx
4 jle .L2
5 movl %EBX,%edx
6 subi %Ecx,%edx
7 movl %Ecx,eax%
8 xorl %EBX,%eax
9 cMpl %Ecx,%ebx
10 cmovl %Edx,%eax
11 jmp .L4
12 .L2:
13 Leal 0(,%EBX,4),%edx
14 Leal (%Ecx,%EBX),%eax

https://translate.googleusercontent.com/translate_f#202 187/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
15 cMpl $2,%Ecx
16 cmovge%edx,%eax
17 .L4:
PreenchaasexpressesemfaltanocdigoC.

3.6.7declaraesswitch
Ainstruoswitchforneceummultiwayramificaocapacidadecombaseno
valordeumndiceinteiro.Elessoparticularmenteteisquandosetratadetestes
ondepodehaverumgrandenmerodepossveisresultados.Noselesfazem
ocdigoCmaislegvel,mastambmpermitemumaimplementaoeficienteusandoum
estruturadedadosdenominadatabeladesalto.Umatabeladesaltoumamatrizondeaentradaio
endereodeumsegmentodecdigoexecuodaacodoprogramadevemterquando
ondicedechaveigualai.Ocdigoexecutaumarefernciadematrizparaosalto
tabelausandoondicechaveparadeterminarodestinodeumainstruodesalto.o
vantagemdeusarumatabeladesaltarporcimadeumalongasequnciadeifelsedeclaraesque
otemponecessriopararealizarointerruptorindependentedonmerodecasosdecomutao.
GCCseleccionaomtododetraduodeumaindicaodointerruptorcombasenonmerode
casoseadispersodosvaloresdecaso.tabelasdesaltosousadosquandohuma
nmerodecasos(porexemplo,quatrooumais)equeabrangemumapequenagamadevalores.
Figura3.18(a)mostraumexemplodeumainstruoswitchC.Esteexemplotemum
nmerodecaractersticasinteressantes,incluindoetiquetasdecasosquenoabrangemumacontgua

pgina249

(A)instruoSwitch (B)TraduoparaestendidoC
1 intswitch_eg(intx,intn){ 1 intswitch_eg_impl(intx,intn){
2 intresultado=x 2 /*Tabeladecdigodeponteiros*/
3 3 staticvoid*jt[7]={
4 switch(n){ 4 &&Loc_A,&&loc_def,&&loc_B,
5 5 &&Loc_C,&&loc_D,&&loc_def,
6 caso100: 6 &&loc_D
7 resultado*=13 7 }
8 pausa 8
9 9 semsinalindex=n100
10 caso102: 10 resultadoint
11 resultado+=10 11
12 /*Cairem*/ 12 if(index>6)
13 13 Gotoloc_def
14 caso103: 14
15 resultado+=11 15 /*Multiwayramo*/
16 pausa 16 Goto*jt[ndice]
17 17
18 caso104: 18 loc_def:/*casopadro*/
19 caso106: 19 resultado=0
20 resultado*=resultado 20 Gotofeito
21 pausa 21
22 22 loc_C: /*Caso103*/
23 padro: 23 Resultado=x
24 resultado=0 24 vdescansar
25 } 25
26 26 louca: /*Caso100*/
27 retornarresultado 27 result=x*13
28 } 28 Gotofeito
29
30 loc_B: /*Caso102*/
31 result=x+10
32 /*Cairem*/
33
34 descansar: /*CasoFinish103*/
35 resultado+=11
36 Gotofeito
37
38 loc_D: /*Capasde104,106*/
39 result=x*x
40 /*Cairem*/
41
42 feito:
43 retornarresultado
44 }

https://translate.googleusercontent.com/translate_f#202 188/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Figura3.18InterruptorexemplodeclaraocomtraduoparaestendidoC.Atraduo
mostraaestruturadosaltotabelajtecomoelaacessada.Essastabelassosuportadospelogcc
comoumaextensodalinguagemC.

pgina250

Seco3.6Controlo 215

xem%ebp8,nem%ebp+12
1 movl 8(%ebp),%edx obterx
2 movl 12(%ebp),%eax obtern
Configurarsaltoacessotabela
3 subi US$100,%eax Calculeindex=n100
4 cMpl US$6,%eax Comparendice:6
5 ja .L2 Se>,Gotoloc_def
6 jmp *.L7(,%Eax,4) Goto*jt[ndice]
casopadro
7 .L2: loc_def:
8 movl R$0,%eax resultado=0
9 jmp .L8 Gotofeito
caso103
10 .L5: loc_C:
11 movl %Edx,%eax Resultado=x
12 jmp .L9 Gotoresto
caso100
13 .L3: louca:
14 Leal (%Edx,%edx,2),%eax result=x*3
15 Leal (%Edx,%eax,4),%eax resultadoresult=x+4*
16 jmp .L8 Gotofeito
caso102
17 .L4: loc_B:
18 Leal 10(%EDX),%eax result=x+10
Cairem
19 .L9: descansar:
20 addl US$11,%eax resultado+=11
21 jmp .L8 Gotofeito
Casos104,106
22 .L6: loc_D
23 movl %Edx,%eax result=x
24 imull %Edx,%eax resultado*=x
Cairem
25 .L8: feito:
resultadoderetorno
Figura3.19cdigodemontagemparaalternarexemplodeclaraonaFigura3.18.

range(noexistemrtulosparacasos101e105),oscasoscomvriasetiquetas(casos
104e106),eoscasosquecaematravsdeoutroscasos(caso102)porqueocdigo
paraocasonoterminacomumainstruobreak.
Figura3.19mostraocdigoassemblygeradoquandocompilarswitch_eg.
OcomportamentodessecdigomostradoemCcomooprocedimentoswitch_eg_implem
AFigura3.18(b).Estecdigofazusodosuportefornecidoporgccparatabelasdesalto,

pgina251

216 Captulo3MachineNvelRepresentaodeProgramas
https://translate.googleusercontent.com/translate_f#202 189/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

comoumaextensodalinguagemC.Ojtmatrizcontmseteentradas,cadauma
oqualoendereodeumblocodecdigo.Esseslocaissodefinidosporrtulosem
ocdigoeindicadonasentradasnojtporponteirosdecdigo,compostopelosrtulos
prefixadopor'&&.'(Lembresequeooperador&criaumponteiroparaumvalordedados.Em
tornandoestaextenso,osautoresdogcccriadoumnovooperador&&paracriar
umponteiroparaumalocalizaodecdigo.)recomendvelquevocestudaroprocedimentoC
switch_eg_implecomoserelacionaversodocdigodemontagem.
NossocdigoCoriginaltemcasosparavaloresde100,102104e106,masointerruptor
varivelnpodeseruminteiroarbitrrio.Oprimeirocompiladormudaagamadeentre
0e6,subtraindo100apartirdeN,criandoumanovavariveldeprogramaquechamamos
ndiceemnossaversoC.Elesimplificaaindamaisaspossibilidadesderamificaoportratamento
ndicecomosemsinalvalor,fazendousodofactodequeosnmerosnegativosnuma
maparepresentaocomplementodedoisagrandesnmerospositivosemumsemassinatura
representao.Porconseguinte,podetestarseondiceestforadointervalode06
testandosemaiordoque6.NocdigoCemontagem,existem
cincolocaisdistintosparasaltarpara,combasenovalordendice.Estesso:loc_
A(identificadonocdigodemontagemcomo.L3),loc_B(.L4),loc_C(.L5),loc_D(.L6),
eloc_def(.L2),ondeoltimoodestinoparaocasopadro.Cada
dessesrtulosidentificaumblocodecdigoimplementaodeumdosramosdecaso.
EmambosoCeocdigodemontagem,oprogramacomparaa6endicesaltos
paraocdigoparaocasopadrosemaior.
Aetapachavenaexecuodeumainstruoswitchacessarumalocalizaodecdigo
atravsdatabeladesalto.Issoocorrenalinha16nocdigoC,comumainstruogoto
quefazrefernciaaojtmesadesalto.EsteGotocomputadorizadasuportadapelogcccomoum
extensodalinguagemC.Emnossaversodeassemblagemcdigo,umaoperaosemelhante
ocorrenalinha6,ondeoperandodainstruojmpprefixadocom'*',indicando
umsaltoindireta,eooperandoespecificaumlocaldememriaindexadapeloregisto
%Eax,quedetmovalordondice.(VeremosnaSeo3.8comomatriz
refernciassoconvertidosemcdigodemquina.)
NossocdigoCdeclaratabeladesaltocomoumamatrizdeseteelementos,cadaumdos
queumapontadorparaumalocalizaodecdigo.Esteselementosabrangemvalores06dendice,
correspondendoavaloresden100106.Observaratabeladesaltomanipuladuplicado
casosporsimplesmenteterortulomesmocdigo(loc_D)paraentradas4e6,e
lidacomcasosdedesaparecidosusandoortuloparaocasopadro(loc_def)comoentradas
1e5.
Nocdigodemontagem,atabeladesaltoindicadopelasseguintesdeclaraes,
aquensadicionamoscomentrios:

1 .seo .rodata
2 .align4 Alinharendereoparamltiplode4
3 .L7:
4 .longo .L3 Caso100:loc_A
5 .longo .L2 Caso101:loc_def
6 .longo .L4 Caso102:loc_B
7 .longo .L5 Caso103:loc_C

pgina252

Seco3.6Controlo 217

8 .longo .L6 Caso104:loc_D


9 .longo .L2 Caso105:loc_def
10 .longo .L6 Caso106:loc_D

Estasdeclaraesafirmarquedentrodosegmentodoarquivodeobjetodecdigodechamada
".rodata"(Para"somenteleituradedados"),devehaverumasequnciadesete"longos"
(4byte)palavras,quandoovalordecadapalavradadopeloendereodeinstruo
associadocomasetiquetasdecdigodemontagemindicados(porexemplo,.L3).Etiquetamarcao.L7
comeardestadotao.Oendereoassociadoaestaetiquetaservecomoabase
paraosaltoindirecta(linha6).
Osblocosdecdigodiferentes(Cetiquetasloc_Aatravsloc_Deloc_def)im
plementarosdiferentesramosdainstruoswitch.Amaioriadelessimplesmente
calcularumvalorparaoresultadoe,emseguida,vatofimdafuno.Similarmente,
osblocosdemontagemdecdigodecalcularumvalorpararegisto%eaxesaltarparaapo
sioindicadopelaetiqueta.L8nofinaldafuno.Apenasocdigoparaocaso
etiquetas102e103noseguemessepadro,paradarcontadaformaquecaso102
caiat103nocdigooriginalC.Issotratadonocdigoassembly
eswitch_eg_implporterdestinosseparadosparaosdoiscasos(loc_C
eloc_BemC,.L5e.L4emconjunto),emqueambosestesblocos,emseguida

https://translate.googleusercontent.com/translate_f#202 190/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
convergemparaocdigoqueincrementaresultadopor11(descansomarcadoemCe.L9em
montagem).
Examinandotudoissocdigorequerumestudocuidadoso,masopontochavever
queousodeumatabeladesaltopermiteumamaneiramuitoeficienteparaimplementarummultiponto
ramo.Nonossocaso,oprogramapoderiadesviarparacincolocaisdistintos,comum
refernciadetabelasaltonico.Mesmosetivssemosumainstruoswitchcomcentenasde
casos,elespoderiamsermanipuladosporumnicoacessotabelasalto.

PrticaProblema3.28
NafunoCquesesegue,omitimosocorpodainstruoswitch.
NocdigoC,osrtulosdecasosnoabrangemumintervalocontguo,ealgunscasosteve
vriosmarcadores.

switch2int(intx){
resultadoint=0
switch(x){
/*Corpodeinstruoswitchomitido*/
}
retornarresultado
}

Aocompilarafuno,gccgeraocdigodemontagemquesegueparao
parteinicialdoprocedimentoeparaatabeladesalto.Varivelxinicialmentenodeslocamento
8emrelaoaoregistar%ebp.

pgina253

218 Captulo3MachineNvelRepresentaodeProgramas

xem%ebp+8 Irmesaparaswitch2
1 movl 8(%ebp),%eax 1 .L8:
Configurarsaltoacessotabela 2 .longo .L3
2 addl $2,%eax 3 .longo .L2
3 cMpl US$6,%eax 4 .longo .L4
4 ja .L2 5 .longo .L5
5 jmp *.L8(,%Eax,4) 6 .longo .L6
7 .longo .L6
8 .longo .L7

Combasenessasinformaes,respondasseguintesperguntas:
A.Quaisforamosvaloresdosrtulosdecasonocorpoinstruoswitch?
casosB.OquetinhavriosrtulosnocdigoC?

PrticaProblema3.29
ParaumcomutadordefunoCcomaestruturageral

1 intswitcher(inta,intb,intc)
2 {
3 respostaint
4 switch(a){
5 caso : /*CasoA*/
6 C=
7 /*Cairem*/
8 caso : /*CasoB*/
9 answer=
10 pausa
11 caso : /*ProcessoC*/
12 caso : /*CasoD*/
13 answer=
14 pausa
15 caso : /*CasoE*/
16 answer=
17 pausa
18 padro:
19 answer=
20 }
21 responda

https://translate.googleusercontent.com/translate_f#202 191/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
22 }
gccgeraatabeladecdigodemontagemesaltarmostradonaFigura3.20.
PreencheraspartesfaltantesdocdigoC.Excetoparaaordenaodosrtulosdecaso
CeD,shumamaneiradeencaixarosdiferentescasosparaomodelo.

pgina254

Seo3.7Procedimentos219

Aa%EBP8,ba%EBP12,ca%EBP16
1 movl 8(%ebp),%eax 1 .L7:
2 cMpl US$7,%eax 2 .longo .L3
3 ja .L2 3 .longo .L2
4 jmp *.L7(,%Eax,4) 4 .longo .L4
5 .L2: 5 .longo .L2
6 movl 12(%ebp),%eax 6 .longo .L5
7 jmp .L8 7 .longo .L6
8 .L5: 8 .longo .L2
9 movl US$4,%eax 9 .longo .L4
10 jmp .L8
11 .L6:
12 movl 12(%ebp),%eax
13 xorl US$15,%eax
14 movl %Eax,16(%ebp)
15 .L3:
16 movl 16(%ebp),%eax
17 addl $112,%eax
18 jmp .L8
19 .L4:
20 movl 16(%ebp),%eax
21 addl 12(%ebp),%eax
22 sall $2,%eax
23 .L8:
Figura3.20cdigodeAssemblyesaltarmesaparaProblema3.29.

3.7Procedimentos

Achamadadeprocedimentoenvolveapassagemdeambososdados(naformadeprocedimentodeparametrizao
tersevaloresderetorno)econtroledeumapartedeumprogramaparaoutro.Dentro
Almdisso,eledevealocarespaoparaasvariveislocaisdoprocedimentodeentrada
edesalocarlosnasada.Amaioriadasmquinas,incluindoIA32,fornecerapenassimples
instruesparaatransfernciadocontroledeeparaprocedimentos.Apassagemdedados
eaalocaoedesalocaodevariveislocaisfeitapormanipulao
apilhadoprograma.

3.7.1PilhaEstruturaMoldura
programasIA32fazerusodapilhadeprogramadeapoioachamadasdeprocedimento.o
mquinausaapilhaparapassarargumentosdeprocedimento,paraarmazenarinformaesvoltar,
parasalvarregistrosachadosparaarestauraomaistarde,eparaoarmazenamentolocal.Apartedapilha
alocadaparaumanicachamadadeprocedimentochamadodeumquadrodepilha.Figura3.21diagramas
aestruturageraldeumquadrodepilha.Oquadrodepilhasuperiordelimitadapor
doisponteiros,comregisto%ebpservindocomooponteirodoquadro,eregistrar%esp

pgina255

https://translate.googleusercontent.com/translate_f#202 192/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

220 Captulo3MachineNvelRepresentaodeProgramas

Figura3.21 Pilha"bottom"
Empilharestruturadoquadro.o
pilhausadaparaapassagem
argumentos,paraarmazenar
informaesretornar,por
salvarregistros,epor
armazenamentolocal. quadrosanteriores

...
Aumentar
endereo
+4+4n argumenton
... quadrodochamador

+8 argumento1
+4 Endereodedevoluo
ponteirodoquadro
%ebp Salvo%ebp
J4
registosguardados,
variveislocais,
e
temporrios quadroatual

Argumento
ponteirodepilha construirrea
%esp
Pilha"top"

servindocomooponteirodepilha.Oponteirodepilhapodesemoverenquantooprocedimento
execuo,e,portanto,amaioriadasinformaesacessadorelaoaoponteirodoquadro.
ProcedimentoSuponhaqueP(ochamador)chamaprocedimentoQ(oreceptor).Osargumentos
aQestocontidosdentrodoquadrodepilhaparaP.Almdisso,quandoPchamaQ,
oendereoderetornodentrodePondeoprogramadevecontinuaraexecuoquando
eleretornaapartirQempurradoparaapilha,formandoofinaldoquadrodepilhadaP.o
quadrodepilhaparaQcomeacomovalorsalvodoponteirodoquadro(acpiadoregistro
%Ebp),seguidodecpiasdequaisqueroutrosvaloresderegistrosalvos.

pgina256

Seo3.7Procedimentos221

ProcedimentoQtambmusaapilhaparatodasasvariveislocaisquenopodemserarmazenados
nosregistos.Istopodeocorrerdevidosseguintesrazes:

. Nohregistrossuficienteparamantertodososdadoslocais.
. Algumasdasvariveislocaissomatrizesoudeestruturase,portanto,deveseracedida
pelovetorouestruturareferncias.
. Ooperadordeendereo'e'aplicadoaumavarivellocale,portanto,devemosestar
capazdegerarumendereoparaomesmo.

Almdisso,Qusaoquadrodepilhaparaarmazenarargumentosparaquaisquerprocedimentosque
chama.TalcomoilustradonaFigura3.21,nombitodoprocessochamado,oprimeiroargumento
posicionadonodeslocamento8%emrelaoaoebp,eosargumentosrestantes(assumindo
seustiposdedadosnonecessitamdemaisde4bytes)soarmazenadosemsucessivasde4bytes
blocos,demodoqueoargumentoinodeslocamento4+4iemrelaoao%ebp.argumentosmaiores
(Taiscomoasestruturaseosmaioresformatosnumricos)exigemregiesmaioresnapilha.
Comodescritoanteriormente,apilhacresceparaendereosinferioreseapilha

https://translate.googleusercontent.com/translate_f#202 193/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
ponteiro%ESPapontaparaoelementodetopodapilha.Osdadospodemserarmazenadoseme
recuperadaapartirdapilhausandoasinstruespushlepopl.Espaoparadadoscom
nenhumvalorinicialespecificadopodeseralocadanapilha,simplesmentediminuindoo
ponteirodepilhaporummontanteadequado.Damesmaforma,oespaopodeserdesalocadospelo
incrementandooponteirodepilha.

3.7.2TransfernciadeControle
Asinstruesdesuportechamadasdeprocedimentoeretornossomostradosnaseguinte
mesa:

Instruo Descrio
ligar Rtulo chamadadeprocedimento
ligar *Operando chamadadeprocedimento
sair Preparepilhaparaoretorno
ret Retornodechamada

Ainstruodechamadatemumalvoqueindicaoendereodainstruo
ondeoprocedimentochamadocomea.Comosaltos,umachamadapodeserdiretaouindireta.
Nocdigodemontagem,oalvodeumachamadadiretadadocomoumrtulo,enquantoametade
umachamadaindirectadadaporum*,seguidodeumespecificadoroperandoutilizandoumdo
formatosdescritonoponto3.4.1.
Oefeitodeumainstruodechamadaempurrarumendereoderetornonapilhae
saltarparaoinciodoprocessodechamada.Oendereoderetornooendereodo
instruoimediatamenteapsachamadanoprograma,demodoqueaexecuoser
retomarnestelocalquandooprocedimentochamadoretorna.Ainstruoret
apareceumendereonapilhaesaltaparaesselocal.Ousoadequadodeste
instruoterpreparadoapilhaparaqueoponteirodapilhaapontaparaa
localondeainstruodechamadaanteriorarmazenadoseuendereoderetorno.

pgina257

222 Captulo3MachineNvelRepresentaodeProgramas

%eip 0x080483dc %eip 0x08048394 %eip 0x080483e1


%esp0xff9bc960 %esp0xff9bc95c %esp0xff9bc960

0x080483e1
(a)Aexecuodechamadas (b)Depoisdechamada (c)Apsret
Figura3.22Ilustraodechamadaederetfunes.Aschamadastransfernciasdeinstruo
decontroloparaoinciodeumafuno,enquantoqueotempoderetinstruoretornadevoltaparaainstruo
apsachamada.

AFigura3.22ilustraaexecuodasinstruesdechamadaeretparao
somaeprincipaisfunesintroduzidasnoponto3.2.2.Aseguir,trechosde
ocdigodesmontadoparaasduasfunes:

Apartirdasomafuno
1 08048394<soma>:
2 8048394:55 empurrar%ebp
...
Retornardefunosum
3 80483a4:C3 ret
...
Chamadapararesumirdaprincipal
4 80483dc:E8b3ffffff ligar 8048394<soma>
5 80483e1:83c414 adicionar$0x14,%esp

Nestecdigo,podemosverqueainstruochamadacom0x080483dcendereo
principaischamadassomafuno.EsteestadoapresentadonaFigura(a)3,22,comoindicado
valoresparao%espponteirodepilhaeocontadordeprograma%eip.Oefeitode
achamadaparaempurraroendereoderetorno0x080483e1napilhaesaltar
paraaprimeirainstruoemfunosoma,noendereo0x08048394(Figura3.22(b)).
Aexecuodafunosumcontinuaatqueatingeainstruoretnoendereo

https://translate.googleusercontent.com/translate_f#202 194/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
0x080483a4.Estainstruopegaovalor0x080483e1dapilhaesaltos
paraesteendereo,retomaraexecuodoprincipallogoapsainstruodechamadaem
soma(Figura3.22(c)).
Ainstruolicenapodeserutilizadoparaprepararapilhaparaoretorno.Isto
equivaleaseqnciadecdigoaseguir:

1 movl%ebp,%espAjusteponteirodepilhaparaoinciodoquadro
2 popl%ebp Restaurarsalvo%ebpedefinirptrpilhaaofimdaestruturadochamador

pgina258

Seo3.7Procedimentos223

Alternativamente,estapreparaopodeserrealizadaporumasequnciadeexplcita
operaesdemovimentaoepop.Registo%eaxusadopararetornarovalordequalquer
funoqueretornauminteiroouponteiro.

PrticaProblema3.30
Ofragmentodecdigoaseguirocorremuitasvezesnaversocompiladadebiblioteca
rotinas:

1 chamarprxima
2 Prximo:
3 popl%eax

A.Paraquevalorseregistrar%eaxpreparese?
B.Expliqueporquenohnenhumainstruoretcorrespondenteaesteapelo.
C.Opropsitotilqueestefragmentodecdigoservir?

3.7.3ConvenesdeusoRegistrar
Oconjuntodeprogramaregistraagecomoumnicorecursocompartilhadoportodososproce
Dures.Apesardeapenasumprocedimentopodeserativoemumdeterminadomomento,nstemosquefazer
Certifiquesequequandoumprocedimento(ochamador)chamaoutro(oreceptor),oreceptor
nosubstituialgumvalorregistoqueochamadorplanejadoparausarmaistarde.Para
estarazo,IA32adotaumconjuntouniformedeconvenesparaousoderegistradores,quedevem
serrespeitadoportodososprocedimentos,incluindoaquelesembibliotecasdeprogramas.
Porconveno,registra%eax,%edx,e%ecxsoclassificadoscomochamadorsave
Registos.QuandoumprocedimentoQchamadopeloP,podesubstituirestesregistossem
destruirtodososdadosnecessriosporP.Poroutrolado,registra%EBX,ESI%,e
%edisoclassificadoscomocalleesaveregistros.IstosignificaqueQdevesalvarosvalores
dequalquerumdessesregistosnapilhaantesdesubstituloserestaurlos
antesdevoltar,porqueP(oualgumprocedimentodenvelsuperior)podeprecisardeles
valoresparaosseusfuturosclculos.Almdisso,registra%ebpe%espdeveser
mantidosdeacordocomasconvenesdescritasaqui.
Comoexemplo,considereoseguintecdigo:

1 intP(intx)
2 {
3 inty=x*x
4 intz=Q(Y)
5 voltary+z
6 }

pgina259

https://translate.googleusercontent.com/translate_f#202 195/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

224 Captulo3MachineNvelRepresentaodeProgramas

ProcedimentoPcalculayantesdechamarQ,mastambmdevegarantirqueovalor
deyestdisponvelapsoretornoQ.Elepodefazerissoporumdosdoismeios:

. ElepodearmazenarovalordeyemseuprprioquadrodepilhaantesdechamarQquandoQ
retornos,oprocedimentoPpodeentorecuperarovalordeydapilha.emoutra
palavras,P,ochamador,guardaovalor.
. Elepodearmazenarovalordeyemumreceptordeeconomiaderegisto.SeQ,ouqualqueroutroprocedimento
chamadoporQ,querusaresteregistro,eledevesalvarovalorderegistronasua
empilhararmaoerestaurarovalorantesderetornar(emoutraspalavras,oreceptor
salvaovalor).QuandoQretornaparaP,ovalordeyestaronoreceptordesalvamento
registrar,querporqueoregistonuncafoialteradoouporqueelefoisalvo
erestaurado.
Dequalquerconvenopodeserfeitoparatrabalhar,desdequehajaumacordoarespeitodeque
funoresponsvelporpoupanacujovalor.IA32segueambasasabordagens,
particionarosregistrosemumnicoconjuntoquechamadadeeconomia,eoutroconjuntoque
calleesave.

PrticaProblema3.31
Asequnciadecdigoaseguirocorrebempertodoinciodocdigodemontagem
geradopelogccparaumprocedimentodeC:

1 subi US$12,%esp
2 movl %EBX,(%esp)
3 movl %ESI,4(%esp)
4 movl %Edi,8(%esp)
5 movl 8(%ebp),%ebx
6 movl 12(%ebp),%edi
7 movl (%Ebx),%esi
8 movl (%Edi),%eax
9 movl 16(%ebp),%edx
10 movl (%EDX),%ecx
Vemosqueapenastrsregistros(%EBX%ESI,e%EDI)sosalvosnapilha
(linhas24).Oprogramamodificaesteseoutrostrsregistros(%eax,ecx%,e
%EDX).Nofinaldoprocedimento,osvaloresdosregistos%EDI,ESI%,e%EBX
sorestauradas(nomostrado),enquantoosoutrostrssodeixadosnosseusestadosmodificados.
Explicaressaaparenteinconsistncianaeconomiaerestaurarderegisto
EstadosMembros.

3.7.4ProcedimentoExemplo
Comoumexemplo,considereasfunesCdefinidosnaFigura3.23,ondeafuno
chamadorincluiumachamadaparaafunoswap_add.AFigura3.24mostraoquadrodepilha
estruturatantopoucoanteschamadorchamaafunoswap_addeenquantoswap_add

pgina260

Seo3.7Procedimentos225

1 intswap_add(int*xp,int*yp)
2 {
3 intx=*xp
4 inty=*yp
5
6 *Xp=y
7 *Yp=x
8 voltarx+y
9 }
10
11 intchamador()
12 {
13 intarg1=534
14 intarg2=1057

https://translate.googleusercontent.com/translate_f#202 196/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
15 intsum=swap_add(&arg1,arg2&)
16 intdiff=arg1arg2
17
18 voltarsoma*diff
19 }
Figura3.23Exemplodedefiniodoprocedimentoechamada.

Poucoanteschamada Nocorpode
paraswap_add swap_add
ponteirodoquadro
%ebp 0 Salvo%ebp Salvo%ebp
4 arg1 arg1
8 arg2 arg2
quadrodepilha
nousado parachamador nousado

+4 &arg2 +12 &arg2


%esp 0 &arg1 +8 &arg1
ponteirodepilha +4 Endereodedevoluo
Quadroponteiro%ebp 0 Salvo%ebp quadrodepilha
Pilhaponteiro%esp Salvo%ebx paraswap_add
Figura3.24Pilhamoldurasparachamadoreswap_add.Procedimentoswap_addrecupera
seusargumentosdamolduradepilhaparachamador.

estcorrendo.Algumasdasinstruesacessarlocaisdepilhaemrelaopilha
ponteiro%espenquantooutrosacessarlocalizaesrelativasaoponteirodebase%ebp.Estes
deslocamentossoidentificadospelaslinhasmostradasemrelaoaosdoisponteiros.

pgina261

226 Captulo3MachineNvelRepresentaodeProgramas

NovoparaC?Passandoparmetrosparaumafuno
Algumaslinguagens,comoPascal,fornecemduasmaneirasdiferentesparapassarparmetrosparaprocedimentosby
valor,emqueochamadorforneceovalordoparmetroactual,eporreferncia,emqueochamadorfornece
umponteiroparaovalor.EmC,todososparmetrossopassadosporvalor,masnspodemosimitaroefeitodeumareferncia
parmetrogerandoexplicitamenteumapontadorparaumvalordepassagemeesteponteiroparaumprocedimento.Nspodemos
verissocomachamadapelochamadorparaswap_add(Figura3.23).Aopassarponteirosparaarg1earg2,chamador
forneceumamaneiraparaswap_addparamodificaressesvalores.
UmadasmaneirasemqueC++estendeCainclusodeparmetrosdereferncia.

Oquadrodepilhaparaochamadorincluiarmazenamentoparavariveisarg1earg2local,
emposies4e8emrelaoaoponteirodoquadro.Essasvariveisdevemser
armazenadonapilha,umavezqueocdigodeveassociarumendereocomeles.o
seguintecdigodemontagemdaversocompiladadochamadormostracomoelechama
swap_add:
1 chamador:
2 pushl %ebp Salvevelhoebp%
3 movl %Esp,%ebp Definir%ebpcomoponteirodoquadro
4 subi US$24,%esp Alocar24bytesnapilha
5 movl $534,4(%ebp) Definirarg1para534
6 movl $1057,8(%ebp)Definirarg2para1057
7 Leal 8(%Ebp),%eax Computeearg2
8 movl %Eax,4(%esp) Lojanapilha
9 Leal 4(%Ebp),%eax Compute&arg1
10 movl %Eax,(%esp) Lojanapilha
11 ligar swap_add Chamarafunoswap_add
EstecdigoguardaumacpiadeEBP%edefine%EBPaoinciodoquadrodepilha
(linhas23).Emseguida,aloca24bytesnapilhapordiminuindoapilha
ponteiro(lembresedequeapilhacresceemdireoendereosinferiores).Eleinicializaarg1
eArg2a534e1057,respectivamente(linhas56),ecalculaosvaloresde
&Arg2e&arg1earmazenaestesnapilhaparaformarosargumentosparaswap_
adicionar(linhas710).Elearmazenaessesargumentosrelativosaoponteirodepilha,emdeslocamentos
0e4paraacessoposteriorporswap_add.Emseguida,chamaswap_add.Dos24bytes

https://translate.googleusercontent.com/translate_f#202 197/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
atribudoparaoquadrodepilha,8soutilizadosparaasvariveislocais,soutilizadospara8
passarparmetrosparaswap_adde8nosoutilizadosparamaisnada.

AlmPorquequegccalocarespaoquenuncausado?
Vemosqueocdigogeradopelogccparachamadoraloca24bytesnapilhamesmoques
fazusode16deles.Veremosmuitosexemplosdesseaparentedesperdcio.gccadere
umguiadeprogramao86queoespaodepilhatotalusadopelafunodeveserummltiplode
16bytes.Incluindoos4bytesparaovalorsalvo%ebpeos4bytesparaoendereoderetorno,chamador
utilizaumtotalde32bytes.Amotivaoparaestaconvenoassegurarumbomalinhamentoparaacessar
dados.Vamosexplicararazoparaterconvenesdealinhamentoecomoelessoimplementadosem
Seo3.9.3.

pgina262

Seo3.7Procedimentos227

Ocdigocompiladoparaswap_addtemtrspartes:o"setup",ondeapilha
quadroinicializadoo"corpo",ondeoclculorealdoprocedimento
realizadaeo"fim",ondeoestadopilharestauradoeoprocedimento
Retorna.
Oseguinteocdigodeconfiguraoparaswap_add.Lembresequeantesdeatingiresse
partedocdigo,ainstruodechamadavaiterempurradooendereoderetornoparao
pilha.
1 swap_add:
2 pushl %ebp Salvevelhoebp%
3 movl %Esp,%ebp Definir%ebpcomoponteirodoquadro
4 pushl %ebx Salve%ebx
Funoswap_addrequerregisto%ebxparaarmazenamentotemporrio.Umavezqueeste
umreceptordeeconomiaderegistrar,eleempurraovalorantigoparaapilhacomopartedapilha
configuraoquadro.Nesteponto,oestadodapilhaest,comomostradonoladodireito
daFigura3.24.Registre%ebpfoideslocadoparaservircomooponteirodoquadrode
swap_add.
Oseguinteocdigodecorpodeswap_add:

5 movl 8(%ebp),%edx obterxp


6 movl 12(%ebp),%ecx obteryp
7 movl (%EDX),%ebx obterx
8 movl (%Ecx),%eax obtery
9 movl %Eax,(%EDX) Lojaynoxp
10 movl %EBX,(%ecx) xlojaemyp
11 addl %EBX,%eax valorderetorno=x+y
Estecdigorecuperaosseusargumentosapartirdoquadrodepilhaparachamadas.Umavezqueoquadro
ponteiromudou,oslocaisdessesargumentosmudoudeposies+4
e0emrelaoaoantigovalordasposies%espto+12e+8emrelaoaonovovalor
de%ebp.Asomadasvariveisxeyarmazenadonoregisto%eaxaserpassadocomoo
valordevolvido.
Aseguirestocdigofinalparaswap_add:
12 popl %ebx Restaurar%ebx
13 popl %ebp Restaurar%ebp
14 ret Retorna
Estecdigorestauraosvaloresdosregistos%EBXe%ebp,aomesmotempo,redefinindo
oponteirodapilhaparaqueeleapontaparaoendereoderetornoarmazenado,demodoqueoret
transfernciasdeinstruodecontroledevoltaaochamador.
Ocdigoaseguirnochamadorvemimediatamenteapsachamadadeinstrues
swap_add:
12 movl 4(%Ebp),%edx
13 subi 8(%Ebp),%edx
14 imull %Edx,%eax
15 sair
16 ret

https://translate.googleusercontent.com/translate_f#202 198/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
pgina263

228 Captulo3MachineNvelRepresentaodeProgramas

Estecdigorecuperaosvaloresdearg1earg2dapilhaafimdecalcular
diff,eusaregistar%eaxcomoovalorderetornodeswap_add.Observeousode
ainstruolicenapararedefinirtantoapilhaeoponteirodoquadroantesdevoltar.
VimosemnossosexemplosdecdigoqueocdigogeradopeloGCCalgumasvezesusa
adeixarinstruesparadesalocarumquadrodepilha,esvezeseleusaumoudois
instruespopl.Qualquerabordagemaceitvel,easdiretrizesdaInteleda
AMDcomoaqueprefervelamudanaaolongodotempo.
Podemosverapartirdesteexemploqueocompiladorgeracdigoparagerenciaro
empilharestruturadeacordocomumconjuntosimplesdeconvenes.Argumentossopassados
paraumafunonapilha,ondeelespodemserrecuperadasusandodeslocamentospositivos
(8,12,...)emrelao%daEBP.Oespaopodeseralocadonapilha,querpor
usandoinstruesdeenvioousubtraindooffsetsdoponteirodepilha.Antes
retornando,umafunodeverestaurarapilhaparasuacondiooriginal,restaurando
qualquerregistradoressalvospelocalleee%ebperedefinindo%espparaqueeleapontapara
oendereoderetorno.importanteparatodososprocedimentosaseguirumconjuntoconsistente
deconvenesparaacriaoerestauraodapilhaemordemparaqueoprograma
executarcorretamente.

PrticaProblema3.32
funfunoACtemaseguintecorpocdigo:
*P=d
voltarxc
OcdigoIA32implementaodesteorganismoaseguinte:

1 movsbl12(%ebp),%edx
2 movl 16(%ebp),%eax
3 movl %Edx,(%eax)
4 movswl8(%ebp),%eax
5 movl 20(%ebp),%edx
6 subi %Eax,%edx
7 movl %Edx,%eax
Escreverumprottipoparaodivertimentofuno,mostrandoostiposeordenaodo
argumentosp,d,x,ec.

PrticaProblema3.33
DadaafunoC

1 procint(void)
2 {
3 intx,y
4 scanf("%x%x",ey,ex)
5 voltarxy
6 }

pgina264

Seo3.7Procedimentos229

gccgeraoseguintecdigodemontagem:

1 proc:
2 pushl %ebp
3 movl %Esp,%ebp
4 subi US$40,%esp
5 Leal 4(%Ebp),%eax
6 movl %Eax,8(%esp)
7 Leal 8(%Ebp),%eax
8 movl %Eax,4(%esp)
9 movl $.LC0,(%Esp) Ponteiroparastring"%x%x"

https://translate.googleusercontent.com/translate_f#202 199/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
10 ligar scanf
quadrodepilhaDiagramanestemomento
11 movl 4(%Ebp),%eax
12 subi 8(%Ebp),%eax
13 sair
14 ret
Suponhaqueprocedimentoprociniciaaexecuocomoseguintevaregisto
ues:
registo Valor
%esp 0x800040
%ebp 0x800060
procSuponhaquechamascanf(linha10),equescanflvalores0x46e
0x53daentradapadro.Suponhaqueastring"%x%x"armazenadonamemria
localizao0x300070.
A.Quevalor%ebpprepareseparanalinha3?
B.Quevalor%espprepareseparanalinha4?
C.Emqueosendereossovariveislocaisxeyarmazenados?
D.Drawadiagramofthestackframeforproclogoapsscanfretorna.Incluir
omximodeinformaespossvelsobreosendereoseoscontedosda
empilharelementosdoquadro.
E.indicarasregiesdaestruturadepilhaquenosoutilizadosporProc.

3.7.5Procedimentosrecursiva
Asconvenesdepilhaedeligaodescritosnaseoanteriorpermitempro
procedimentosachamarsedeformarecursiva.Umavezquecadachamadatemoseuprprioespaoprivado
napilha,asvariveislocaisdasvriaschamadasemcirculaonointerferem
unscomosoutros.Almdisso,adisciplinapilhafornecenaturalmenteobom
polticadealocaodearmazenamentolocalquandooprocedimentochamadoedesalocando
loquandoeleretorna.

pgina265

230 Captulo3MachineNvelRepresentaodeProgramas

1 intrfact(intn)
2 {
3 resultadoint
4 Se(N<=1)
5 resultado=1
6 outro
7 n*=resultadorfact(n1)
8 retornarresultado
9 }
Figura3.25cdigoCparaoprogramafactorialrecursiva.

Figura3.25mostraocdigoCparaumafunofactorialrecursiva.Amontagem
cdigogeradopelogccmostradonaFigura3.26.Vamosexaminarcomoamquina
cdigofuncionarquandochamadocomoargumenton.Ocdigodesetup(linhas2a5)cria
umquadrodepilhacontendoaversoantigado%ebp,ovalorguardadoparacalleesave
registar%EBX,e4bytesparamanteroargumentoquandosechamaasimesmodeformarecursiva,como
ilustradonaFigura3.27.Eleusaregistar%ebxparasalvarumacpiaden(linha6).Defineo
valorderetornonoregistrador%eaxa1(linha7)emantecipaoaocasoemquen1,
casoemqueelevaisaltarparaocdigodeconcluso.
Paraocasorecursivo,elecalculan1,armazenaanapilha,echamase
(linhas1012).Apsaconclusodocdigo,podemossupor(1)registrar%eaxdetm

Argumento:nem%ebp+8
Registos:nem%EBX,resultarem%eax
1 rfact:
2 pushl %ebp Salvevelhoebp%
3 movl %Esp,%ebp Definir%ebpcomoponteirodoquadro
4 pushl %ebx Salvereceptorsalvarregistar%ebx
5 subi US$4,%esp Alocar4bytesnapilha
6 movl 8(%ebp),%ebx obtern
https://translate.googleusercontent.com/translate_f#202 200/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
7 movl US$1,%eax resultado=1
8 cMpl US$1,%ebx CompararN:1
9 jle .L53 Se<=,Gotodone
10 Leal 1(%Ebx),%eax Computen1
11 movl %Eax,(%esp) Lojanotopodapilha
12 ligar rfact Chamadarfact(n1)
13 imull %EBX,%eax resultadoCompute=valorderetorno*n
14 .L53: feito:
15 addl US$4,%esp Desalocar4bytesdepilha
16 popl %ebx Restaurar%ebx
17 popl %ebp Restaurar%ebp
18 ret resultadoderetorno
Figura3.26cdigodemontagemparaoprogramafactorialrecursivanaFigura3.25.

pgina266

Seo3.7Procedimentos231

Figura3.27
Empilharquadropararecursiva
funofatorial.o quadrodepilha
Estadodaestruturamostrado parachamar
poucoantesdarecursiva procedimento
ligar. +8 N
+4 Endereodedevoluo
ponteirodoquadro
%ebp 0 Salvo%ebp
quadrodepilha
Salvo%ebx pararfact
ponteirodepilha
%esp N1

ovalorde(N1)!e(2)calleesaveregistar%EBXdetmoparmetron.isto
portanto,multiplicaessasduasgrandezas(linha13)paragerarovalorderetorno
afuno.
Paraambososcasosacondioterminaleachamadaaprocdigorecursiva
CEEDSparaaseodefinalizao(linhas1517)pararestaurarapilhaesalvareceptor
registrare,emseguida,eleretorna.
Podemosverquechamarumafunorecursivaprocedecomoqualqueroutro
chamadadefuno.Nossadisciplinapilhaforneceummecanismoondecadainvocao
deumafunotemasuaprpriaarmazenagemprivadadeinformaesdeestado(valoresdesalva
olocalderetorno,ponteirodoquadro,ecalleesaveregistos).Senecessrio,elepode
tambmfornecemarmazenamentoparaasvariveislocais.Adisciplinapilhadealocaoe
deallocationnaturalmentecorrespondeaordemdechamadaderetornodefunes.Estemtodo
deimplementarchamadasdefunoeretornafuncionaatmesmoparapadresmaiscomplexos,
incluindorecursomtua(porexemplo,quandoumprocedimentoPchamaQ,queporsuavez
chamaP).

PrticaProblema3.34
ParaumafunoCtendoaestruturageral

rfunint(semsinalx){
Ese( )
Retorna
unsignednx=
intrv=rfun(nx)
Retorna
}
gccgeraoseguintecdigodemontagem(comocdigodeconfiguraoeconcluso
Omitido):

1 movl 8(%ebp),%ebx
2 movl R$0,%eax
3 testl %EBX,%ebx
4 Je .L3

https://translate.googleusercontent.com/translate_f#202 201/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

pgina267

232 Captulo3MachineNvelRepresentaodeProgramas

5 movl %EBX,%eax
6 shrl %eax Deslocamentoparaadireitapor1
7 movl %Eax,(%esp)
8 ligar rfun
9 movl %EBX,%edx
10 eeu US$1,%edx
11 Leal (%Edx,%eax),%eax
12 .L3:

A.Quevalorfazlojarfunnacalleesaveregistar%ebx?
B.PreenchaasexpressesemfaltanocdigoCmostradoacima.
C.DescrevaemInglsquefunodestecdigocalcula.

3.8AlocaodematrizeAcesso
ArraysemCsoummeiodeagregardadosescalaresemtiposdedadosmaiores.C
utilizaumaparticularmentesimplesaplicaodematrizes,e,porconseguinte,atraduo
emcdigodemquinabastantesimples.UmacaractersticainvulgardeCque
podegerarponteirosparaelementosdentrodematrizeserealizaroperaesaritmticascomestes
ponteiros.Estessotraduzidosemclculosdeendereosemcdigodemquina.
compiladoresOtimizandosoparticularmentebonsemsimplificaroendereocomputacional
taesusadosporindexaodematriz.IssopodefazeracorrespondnciaentreoC
cdigoesuatraduoemcdigodemquinaumpoucodifcildedecifrar.

3.8.1PrincpiosBsicos
ParaotipodedadosTeconstanteinteiraN,adeclarao

TUm[N]

temdoisefeitos.Emprimeirolugar,queatribuiumaregiocontguadeLNbytesdememria,
ondeLotamanho(embytes)dotipodedadost.Vamosindicarolocaldepartida
comoXUma.Emsegundolugar,introduzumidentificadorAquepodeserusadocomoumponteiroparao
inciodamatriz.OvalordesteponteiroserxA.Oselementosdematrizpode
seracessadousandoumndiceinteirovariandoentre0eN1.Elementodematrizi
serarmazenadanoendereoXUma+Li.
Comoexemplos,considereasseguintesdeclaraes:

CaracteresA[12]
Caracteres
*B[8]
duplaC[6]
double*D[5]

pgina268

SeoAllocation3.8MatrizeAcesso 233

Estasdeclaraesirgerararrayscomosseguintesparmetros:
ordem tamanhodoelemento
Tamanhototal endereodeincio
elementoi
UMA 1 12 xA xA+i
B 4 32 xB xB+4i
C 8 48 XC xC+8i
D 4 20 xD xD+4i

https://translate.googleusercontent.com/translate_f#202 202/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Amatrizcompostaporelementos12debytenico(char).MatrizCcompostoporseis
valoresdepontoflutuantedeprecisodupla,cadaumaexigindo8bytes.BeDsoambos
matrizesdeponteirose,portanto,oselementosdamatrizso4bytescada.
AmemriareferenciarasinstruesdeIA32soprojetadosparasimplificaramatriz
Acesso.Porexemplo,suponhaqueEumamatrizdeint,edesejamosparaavaliarE[i],
ondeoendereodeEarmazenadanoregisto%edxeiarmazenadonoregisto%ecx.
Emseguida,ainstruo
movl(%edx,%ecx,4),%eax
executaroendereocomputaoxE+4i,liquelocaldamemriae
copiaroresultadopararegistrar%eax.Osfatoresdeescalapermitidode1,2,4e8Tampa
ostamanhosdostiposdedadosprimitivoscomuns.

PrticaProblema3.35
Considereasseguintesdeclaraes:
curto S[7]
curto *T[3]
curto **L[6]
longdouble V[8]
longdouble*W[4]
Preencheraseguintetabeladescrevendootamanhodoelemento,otamanhototal,eo
endereodoelementoIparacadaumadessasmatrizes.
ordem tamanhodoelemento
Tamanhototal endereodeincio
elementoi
S xS
T xT
voc xL
V xV
W xW

3.8.2Aritmticadeponteiro
Cpermitearitmticaemponteiros,ondeovalorcalculadodimensionadodeacordocoma
otamanhodotipodedadosreferenciadopeloponteiro.Isto,seosmboloprepresentaumponteiroparadados

pgina269

234 Captulo3MachineNvelRepresentaodeProgramas

dotipoT,eovalordepxp ,entoaexpressop+itemumvalorxp +Li,


ondeLotamanhodotipodedadost.
Osoperadoresunrios&e*permitemageraoedereferencingdeponto
Ers.Ouseja,paraumaexpressoExprdenotandoalgumobjeto,eExprumadoaodoponteiro
oendereodoobjecto.ParaumaexpressoAExprdenotandoumendereo,*AExpr
dovalornesseendereo.AsexpressesExpre*&Exprso,portanto,
equivalente.Aoperaosubscriptingmatrizpodeseraplicadaaambasasmatrizese
ponteiros.Amatrizderefernciaa[i]idnticaexpresso*(a+i).com
putesoendereodoielementodamatrizthedepoisacessaestelocaldememria.
Expandindonossoexemploanterior,suponhaqueoendereoinicialdointeiro
srieEendiceinteiroisoarmazenadosnosregistos%edxe%ecx,respectivamente.
AseguirestoalgumasexpressesenvolvendoE.Mostramostambmumcdigodemontagem
implementaodecadaexpresso,comoresultadosendoarmazenadonoregistrador%eax.

Expresso Tipo Valor cdigodemontagem


E int* xE movl%edx,%eax
E[0] int M[xE] movl(%EDX),%eax
E[i] int M[xE+4i] movl(%edx,%ecx,4),%eax
&E[2] int* xE+8 leal8(%EDX),%eax
E+i1 int* xE+4i4 leal4(%edx,%ecx,4),%eax
*(E+I3) int* M[xE+4i12] movl12(%edx,%ecx,4),%eax
&E[i]E int Eu movl%ecx,eax%

Nestesexemplos,ainstruoLealusadoparagerarumendereo,enquantomovl
usadoparafazerrefernciaamemria(exceptonosprimeiroseltimoscasos,ondeoantigo
cpiasdeumendereoeosltimosexemplaresdondice).Oltimoexemplomostraque
podesecalcularadiferenadedoisponteirosdentrodamesmaestruturadedados,
comoresultadodivididopelotamanhodotipodedados.

https://translate.googleusercontent.com/translate_f#202 203/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

PrticaProblema3,36
SuponhaqueoendereodocurtoarraydeinteirosSeinteirondiceisoarmazenadosem
registra%EDXeECX%,respectivamente.Paracadaumadasexpressesseguintes,dar
seutipo,umafrmulaparaoseuvalor,eumaimplementaodecdigodemontagem.Oresultado
deveserarmazenadoemregisto%eaxseumponteiroeregistrar%machadoelementose
uminteirocurto.

Expresso Tipo Valor cdigodemontagem


S+1
S[3]
&Si]
S[4*i+1]
S+i5

pgina270

SeoAllocation3.8MatrizeAcesso 235

3.8.3matrizesaninhadas
Osprincpiosgeraisdealocaodematrizereferenciamentodesegurar,mesmoquando
criarmatrizesdematrizes.Porexemplo,adeclarao

inta[5],[3]
equivalenteaodeclarao

typedefintrow3_t[3]
row3_tA[5]

Tipodedadosrow3_tdefinidacomosendoumadisposiodetrsnmerosinteiros.Amatrizcontmcinco
taiselementos,cadaumexigindo12bytesparaarmazenarostrsinteiros.Ototaldematriz
otamanhoento4.5.3=60bytes.
Umamatriztambmpodeservistacomoumamatrizbidimensionalcomcincolinhase
trscolunas,referenciadascomoA[0][0]auma[4][2].Oselementosdamatrizso
ordenadanamemria"linhaprincipal"ordem,ouseja,todososelementosdafileira0,que
podeserescritaa[0],seguidoportodososelementosdelinha(1A[1]),eassimpordiante.

Linha Elemento Endereo


A[0] A[0][0] xA
A[0][1] xA+4
A[0][2] xA+8
Um[1] Um[1][0] xA+12
Um[1][1] xA+16
Um[1][2] xA+20
Um[2] Um[2][0] xA+24
Um[2][1] xA+28
Um[2][2] xA+32
A[3] A[3][0] xA+36
A[3][1] xA+40
A[3][2] xA+44
Um[4] Um[4][0] xA+48
Um[4][1] xA+52
Um[4][2] xA+56
Estaordenaoumaconsequnciadanossadeclaraoaninhada.VisualizandoAcomoumamatrizde
cincoelementos,cadaumdosquaisumamatrizdetrsint,primeirotemosa[0],seguido
porA[1],eassimpordiante.
Paraacessarelementosdearraysmultidimensionais,ocompiladorgeracdigopara
calcularodeslocamentodoelementodesejadoe,emseguida,usaumdosthemovinstructions
comoinciodamatrizcomooendereodebaseeo(possivelmenteemescala)comocompensar
umndice.Emgeral,paraumamatrizdeclaradacomo

TD[R][C]

https://translate.googleusercontent.com/translate_f#202 204/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

pgina271

236 Captulo3MachineNvelRepresentaodeProgramas

elementodamatrizD[i][j]noendereodememria

&D[i][j]=xD+L(C.I+j), (3.1)
ondeLotamanhodotipodedadosTembytes.Comoumexemplo,considereointeiro53
Umamatrizdefinidaanteriormente.SuponhaxUm,I,eJsoemdeslocamentos8,12,e16emrelaoao
EBP%,respectivamente.EntoelementodamatrizA[i][j]podemsercopiadospararegistar%eaxpor
oseguintecdigo:

Aat%ebp8,iem%ebp+12,jem%ebp+16
1 movl 12(%ebp),%eax Entendi
2 Leal (%Eax,%eax,2),%eax Calcule3*i
3 movl 16(%ebp),%edx obterj
4 sall $2,%edx Calcularj*4
5 addl 8(%ebp),%edx ComputexA+4j
6 movl (%Edx,%eax,4),%eax LerapartirdoM[xA+4j+12i]
Comopodeservisto,estecdigocalculaoendereodoelementocomoXUma+4j+12i=
xA+4(3i+j)usandoumacombinaodedeslocamento,adicionando,edimensionamentoparaevitarmais
instruesdemultiplicaodispendioso.

PrticaProblema3.37
Considereoseguintecdigofonte,ondeMeNsoconstantesdeclaradocom
#definir:

1 intmat1[H][N]
2 intmat2[N][M]
3
4 intsum_element(inti,jint){
5 voltarmat1[i][j]+mat2[j][i]
6 }
Naelaboraodesteprograma,gccgeraoseguintecdigodemontagem:

iem%ebp8,jem%ebp+12
1 movl 8(%ebp),%ecx
2 movl 12(%ebp),%edx
3 Leal 0(,%ecx,8),%eax
4 subi %Ecx,eax%
5 addl %Edx,%eax
6 Leal (%Edx,%edx,4),%edx
7 addl %Ecx,%edx
8 movl mat1(,%eax,4),%eax
9 addl mat2(,%edx,4),%eax
UsesuashabilidadesdeengenhariareversaparadeterminarosvaloresdeMeNcombaseem
estecdigodemontagem.

pgina272

SeoAllocation3.8MatrizeAcesso 237

3.8.4Matrizesdetamanhofixo
OcompiladorCcapazdefazermuitasotimizaesparaocdigooperandoemmulti
Matrizestridimensionaisdetamanhofixo.Porexemplo,suponhaquedeclarartipodedadosfix_
matrizdemodoa1616matrizesdenmerosinteiros,comosegue:

https://translate.googleusercontent.com/translate_f#202 205/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

1 #defineN16
2 typedefintfix_matrix[N][N]

(Esteexemploilustraumaboaprticadecodificao.Semprequeumprogramausaalgumas
constantecomoumadimensodematrizoutamanhodamemriaintermdia,possvelparaassociarumnome
loatravsdeumadeclarao#define,e,emseguida,usaressenomedeformaconsistente,aoinvsdo
valornumrico.Dessaforma,seumaocasiosempresurgeparaalterarovalor,podeser
feitosimplesmentealterandoadeclarao#define.)OcdigonaFigura3.28(a)
calculaelementoi,kdoprodutodematrizesAeB,deacordocomafrmula

0J<Numi,j.bj,k.OcompiladorCgeracdigoquensentorecodificadosemC,
comomostradonaFigurafix_prod_ele_optfuno3.28(b).Estecdigocontmuma
nmerodeotimizaesinteligentes.Elareconhecequeoloopiracessarapenaso
elementosdalinhaidamatrizA,eporissocriaumavariveldeponteirolocal,que
temoschamadoArow,paraforneceracessodiretoparaalinhaidamatriz.arow
inicializadopara&A[i][0],eassimporelementodamatrizA[i][j]podeseracessadocomoArow[j].
EletambmreconhecequeocicloiracessaroselementosdematrizB,comoB[0][k],
B[1][k],...,B[15][k]emsequncia.Esteselementosocupamposiesnamemria
comeandocomoendereodoelementodamatrizB[0][K]eespaadas64bytesseparados.
Oprogramapode,portanto,usarumponteirovarivelbPtrparaacessaressessucessiva
Localizaes.EmC,esseponteiromostradocomosendoincrementadoporN(16),emboraem
fatodeoendereorealincrementadopor4.16=64.
Oseguinteocdigodemontagemrealparaoloop.Vemosquequatro
variveissomantidasemregistosnaloop:Arow,bPtr,j,eoresultado.

Registos:rowem%ESI,bPtrem%ecx,jem%edx,resultarem%ebx
1 .L6: loop:
2 movl (%Ecx),%eax Obter*bPtr
3 imull (%ESI,%edx,4),%eax MultiplicarporArow[j]
4 addl %Eax,%ebx Adicionararesultar
5 addl US$1,%edx incrementoj
6 addl $64,%ecx Adicionar64abPtr
7 cMpl US$16,%edx CompararJ:16
8 jne .L6 Se!=,LaoGoto

Comopodeservisto,registar%ecxincrementadoem64nointeriordocircuito(linha6).
cdigodemquinaconsideracadaponteiroparaserumendereodebyte,eassimnacompilao
ponteiroaritmtica,devedimensionarcadaincrementoporotamanhodosdadossubjacentes
tipo.

pgina273

238 Captulo3MachineNvelRepresentaodeProgramas

PrticaProblema3,38
OseguintecdigoCdefineoselementosdadiagonaldeumdosnossosmatrizesdetamanhofixopara
val:
1 /*Definatodososelementosdiagonaisparaval*/
2 fix_set_diagvoid(fix_matrixA,intval){
3 inti
4 for(i=0i<Ni++)
5 A[i][i]=val
6 }
Quandocompilado,gccgeraoseguintecdigodemontagem:
Aat%ebp8,valem%ebp+12
1 movl 8(%ebp),%ecx
2 movl 12(%ebp),%edx
3 movl R$0,%eax
4 .L14:
5 movl %Edx,(%ecx,eax%)
6 addl $68,%eax
7 cMpl $1088,%eax
8 jne .L14
CriarumprogramadecdigoCfix_set_diag_optqueusaotimizaessemelhantes
aosdocdigodemontagem,nomesmoestiloqueocdigonaFigura3.28(b).Usar
expressesqueenvolvemoparmetroN,emvezdeconstantesinteiras,demodoqueoseu
cdigoirfuncionarcorretamenteseNredefinido.

https://translate.googleusercontent.com/translate_f#202 206/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

3.8.5matrizesdetamanhovarivel
Historicamente,Csuportadoapenasarraysmultidimensionais,ondeostamanhos(coma
possvelexceodaprimeiradimenso)poderiaserdeterminadoemtempodecompilao.
Osprogramadoresquenecessitamdematrizesdetamanhovariveltevedealocararmazenamentoparaestes
arraysusandofunestaiscomomallocoucalloc,etevequecodificarexplicitamente
omapeamentodasarraysmultidimensionaisparaosunidimensionaisvialinhaprincipal
indexao,comoexpressonaEquao3.1.ISOC99introduziuacapacidadedeter
dimensesdamatrizserexpressesquesocomputadoscomoamatrizestsendoalocado,
easversesrecentesdosuportegccamaioriadasconvenesparadetamanhovarivel
matrizesemISOC99.
NaversoCdematrizesvariveldetamanho,podemosdeclararumamatriz
intA[expr1][expr2],quercomoumavarivellocaloucomoumargumentoparaumafuno,
e,emseguida,asdimensesdamatrizdeterminadoatravsdaavaliaodaexpresso
sesexpr1eexpr2nomomentodadeclaraoencontrado.Assim,porexemplo,
podemosescreverumafunoparaacessaroelementoi,jdeumannmatrizdaseguintemaneira:
1 intvar_ele(intn,intA[n][n],inti,jint){
2 retornarA[i][j]
3 }

pgina274

SeoAllocation3.8MatrizeAcesso 239

(A)decdigoCOriginal
1 /*Computei,kdamatrizprodutofixa*/
2 fix_prod_eleint(fix_matrixA,Bfix_matrix,inti,intk){
3 intj
4 resultadoint=0
5
6 para(j=0j<Nj++)
7 resultado+=A[i][j]*B[j][k]
8
9 retornarresultado
10 }

(B)ocdigoCOptimized
1 /*Computei,kdamatrizprodutofixa*/
2 fix_prod_ele_optint(fix_matrixA,Bfix_matrix,inti,intk){
3 int*Arow=&A[i][0]
4 int*bPtr=&B[0][k]
5 resultadoint=0
6 intj
7 para(j=0j=N!j++){
8 resultado+=Arow[j]**bPtr
9 BPtr+=N
10 }
11 retornarresultado
12 }
Figura3.28Originalecdigootimizadoparacalcularelementoi,kdamatrizproduto
paramatrizesdecomprimentofixo.Ocompiladorexecutaessasotimizaesautomaticamente.

OparmetrondeveprecederoparmetroA[N][N],demodoaqueafunopode
calcularasdimensesdamatrizcomooparmetroforencontrado.
gccgeracdigoparaestafunodereferenciamentocomo

nem%ebp8,Aa%ebp12,iem%ebp16,jem%ebp+20
1 movl 8(%ebp),%eax obtern
2 sall $2,%eax Calcule4*n
3 movl %Eax,%edx Copiar4*n
4 imull 16(%ebp),%edx Calcule4*n*i
5 movl 20(%ebp),%eax obterj
6 sall $2,%eax Calcule4*j
7 addl 12(%ebp),%eax ComputexA+4*j
8 movl (%Eax,%edx),%eax LerapartirxA+4*(n*i+j)
Comoasanotaesmostram,estecdigocalculaoendereodoelementoi,jcomoxA+
4(n.I+j).Acomputaodoendereosemelhantedamatrizdetamanhofixo
(Pgina236),exceptoque(1)asposiesdosargumentosnapilhasodeslocados
devidoadiodeparmetron,e(2)umainstruodemultiplicaoutilizado(linha4)para

https://translate.googleusercontent.com/translate_f#202 207/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

pgina275

240 Captulo3MachineNvelRepresentaodeProgramas

1 /*Computei,kdamatrizprodutovarivel*/
2 intvar_prod_ele(intn,intA[n][n],intB[n][n],inti,intk){
3 intj
4 resultadoint=0
5
6 para(j=0j<Nj++)
7 resultado+=A[i][j]*B[j][k]
8
9 retornarresultado
10 }
Figura3.29Cdigoparacalcularelementoi,kdeprodutodematrizparadetamanhovarivel
matrizes.Ocompiladorexecutaotimizaessemelhantesquelesparamatrizesdetamanhofixo.

calcularni,emvezdeumainstruolealparacalcular3i.Vemos,portanto,que
referenciarmatrizesdetamanhovarivelrequerapenasumaligeirageneralizaosobrefixo
aquelesdetamanho.Aversodinmicadeveusarumainstruodemultiplicaoescalaripelo
N,emvezdeumasriededeslocamentoseadiciona.Emalgunsprocessadores,estamultiplicao
podeincorreremumapenalidadededesempenhosignificativa,masinevitvelnestecaso.
Quandomatrizesdetamanhovarivelsoreferenciadosdentrodeumloop,ocompiladorpode
muitasvezesotimizarosclculosdondice,explorandoaregularidadedoacesso
Padres.Porexemplo,aFigura3.29apresentaocdigoCparacalcularelementoi,kda
produtodedoisnnmatrizesAeB.Ocompiladorgeraumcdigosemelhanteaoque
vimosparamatrizesdetamanhofixo.Naverdade,ocdigocarregasemelhanaprximado
Figura3.28(b),exceptoquedimensionabPtr,oponteiroparaoelementoB[j][k],pela
valordavarivelnemvezdovalorfixoNemcadaiterao.
Oseguinteocdigodemontagemparaoloopdevar_prod_ele:

Narmazenadasa%EBP8
Registos:rowem%esi,bPtrem%ecx,j,em%edx,
resultadoem%EBX,%edidetm4*n
1 .L30: loop:
2 movl (%Ecx),%eax Obter*bPtr
3 imull (%ESI,%edx,4),%eax MultiplicarporArow[j]
4 addl %Eax,%ebx Adicionararesultar
5 addl US$1,%edx incrementoj
6 addl %Edi,%ecx Adicionar4*nparabPtr
7 cMpl %Edx,8(%ebp) CompararN:J
8 jg .L30 Se>,Gotocircuito
Vemosqueoprogramafazusodeambosumvalorescalado4n(registar%EDI)para
incrementandobPtreovalorrealdenarmazenadonodeslocamento8de%ebpparaverificar
oslimitesloop.AnecessidadededoisvaloresnoaparecemnocdigoC,devido
odimensionamentodaaritmticadeponteiro.Ocdigorecuperaovalordenapartirdamemriaem
cadaiteraoparaverificarsehrescisoloop(linha7).Esteumexemploderegisto
derramando:nohregistrossuficienteparamantertodososdadostemporriosnecessrios,
e,portanto,ocompiladordevemanteralgumasvariveislocaisnamemria.Nessecaso
ocompiladorescolheuparaderramarN,porqueum"readonly"valorlanoaltera

pgina276

Seo3.9Estruturasdedadosheterogneo241

valordentrodoloop.IA32devemuitasvezesderramevaloresdeansadememria,umavezqueo
processadortemtopoucosregistros.Emgeral,aleituraapartirdamemriapodeserfeitamais
prontamentedoqueescreverparaamemria,eassimporderramarVariveisdeleituraprefervel.
https://translate.googleusercontent.com/translate_f#202 208/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
VejaoProblema3.61sobrecomomelhorarestecdigoparaevitarregistoderramamento.

3.9Estruturasdedadosheterogneo

Cfornecedoismecanismosparaacriaodetiposdedadosatravsdacombinaodeobjetosdedife
rentestipos:estruturas,declaradousandoapalavrachavestruct,agregadomltipla
objetosemumanicaunidadesindicatos,declaradousandoapalavrachavesindicato,permitirqueum
objectoaserreferenciadoutilizandovriostiposdiferentes.

3.9.1Estruturas
AdeclaraoCstructcriaumtipodedadosqueagrupaobjetosdepossivelmente
diferentestiposemumnicoobjeto.Osdiferentescomponentesdeumaestruturaso
referenciadapornomes.Aexecuodeestruturassemelhanteaodematrizes
emquetodososcomponentesdeumaestruturasoarmazenadosnumaregiocontguade
memria,eumponteiroparaumaestruturaoendereodoseuprimeirobyte.ocompilador
mantminformaessobrecadatipodeestrutura,indicandoodeslocamentodebytede
cadacampo.Elegerarefernciasparaestruturarelementosusandoessascompensaescomo
deslocamentoseminstruesdememriadereferncia.

NovoparaC?Representandoumobjetocomoumstruct
OconstrutorstructtipodedadosacoisamaisprximaCforneceaosobjetosdeC++eJava.isto
permitequeoprogramadorparamanterasinformaessobrealgumaentidadenumanicaestruturadedados,edereferncia
essasinformaescomnomes.
Porexemplo,umprogramadegrficospoderepresentarumrectngulocomoumaestrutura:
rectstruct{
intLLX /*Xcoordenadainferioresquerdocanto*/
intlly /*CoordenadaYinferioresquerdocanto*/
corint/*Codificaodecor */
widthint/*Largura(empixels) */
intaltura/*Altura(empixels) */
}
Poderamosdeclararumavarivelrdotiporectstructedefinirseusvaloresdecampodaseguinteforma:
structrectr
r.llxr.lly==0
r.color=0xFF00FF
r.width=10
r.height=20
emqueaexpressoselecionar.llxLLXcampodeestruturar.

pgina277

242 Captulo3MachineNvelRepresentaodeProgramas

Alternativamente,nsdoispodemosdeclararavariveleinicializarseuscamposcomumanicainstruo:

structrectR={0,0,0xFF00FF,10,20}
comumparapassarponteirosparaestruturasdeumlugarparaoutro,emvezdecopilos.
Porexemplo,aseguintefunocalculaareadeumrectngulo,emqueumponteiroparaorectngulo
structpassadoparaafuno:
reaint(structrectrp*)
{
retorno(*rp).width.height*(*rp)
}
Aexpresso(*rp).widthdereferencesoponteiroeselecionaocampolarguradaresultante
estrutura.Parntesessonecessrios,porqueocompiladoririainterpretaraexpresso*rp.widthcomo
*(Rp.width),quenovlida.Estacombinaodedereferencingeseleodecampotocomum
Cqueproporcionaumanotaoalternativautilizando>.Isto,RP>larguraequivalenteexpresso
(*Rp).width.Porexemplo,podemosescreverumafunoquegiraumretngulosentidoantihorrio
90grausquanto
vaziorotate_left(structrectrp*)
{
/*LarguradoExchangeealtura*/
intt =RP>altura

https://translate.googleusercontent.com/translate_f#202 209/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
RP>height=RP>largura
RP>width=t
/*Shiftparanovocantoinferioresquerdo*/
RP>LLX =T
}
OsobjetosdeC++eJavasomaiselaboradasdoqueasestruturasemC,emqueelestambmassociar
umconjuntodemtodoscomumobjetoquepodeserchamadoparaexecutaroclculo.EmC,nssimplesmente
escreverestasfunescomuns,comoareadefuneserotate_leftmostradoacima.

Comoexemplo,considereoseguintedeclaraodeestrutura:

recstruct{
inti
intj
inta[3]
int*p
}
Estaestruturacontmquatrocampos:doisde4bytesintde,umamatrizqueconsisteemtrs
4bytesint,eumponteirointeirode4bytes,dandoumtotalde24bytes:

compensar
0 4 8 20 24
Contedo Eu J um[0] a[1] um[2] P

pgina278

Seo3.9Estruturasdedadosheterogneo243

Observequeumconjuntoincorporadodentrodaestrutura.Osnmerosaolongodo
partesuperiordodiagramaosdeslocamentosdarbytedoscamposapartirdoinciodo
estrutura.
Paraacederaoscamposdeumaestrutura,ocompiladorgeracdigoqueadicionao
deslocamentoapropriadosparaoendereodaestrutura.Porexemplo,suponhavarivelr
dotipostructrec*estemregisto%edx.Emseguida,oseguinteelementocpiasdecdigo
R>iparaelementor>j:

1 movl (%EDX),%eax Obterr>i


2 movl %Eax,4(%EDX) Armazenaremr>j
Umavezqueodeslocamentodecampoi0,oendereodestecamposimplesmenteovalorder.Para
lojanocampodej,ocdigoadicionacompensado4paraoendereodor.
Paragerarumponteiroparaumobjetodentrodeumaestrutura,podemossimplesmenteadicionaro
ocampodedeslocamentoparaoendereoestrutura.Porexemplo,podesegeraroponteiro
e(r>[1]a)aoadicionaroffset8+4.1=12.Paraponteirornoregistrador%eaxe
varivelinteiroinoregisto%edx,podemosgerarovalordoponteiro&(r>a[i])
comanicainstruo

Registos:Rem%edx,iem%eax
1 Leal 8(%edx,%eax,4),%eax Definir%eaxpara&r>a[i]
Comoexemplofinal,ocdigoaseguirimplementaainstruo

R>p=&r>a[r>i+r>j]
comeandocomrnoregisto%edx:

1 movl 4(%EDX),%eax Obterr>j


2 addl (%EDX),%eax Adicionarr>i
3 Leal 8(%edx,%eax,4),%eax Compute&r>a[r>i+r>j]
4 movl %Eax,20(%EDX) Armazenaremr>p
Comomostramestesexemplos,aselecodosdiferentescamposdeumaestrutura
manipuladoscompletamenteemtempodecompilao.Ocdigodemquinanocontmnenhumainformao
sobreasdeclaraesdecampoouosnomesdoscampos.

PrticaProblema3.39
Considereaseguintedeclaraoestrutura:

provstruct{
int*p
struct{
intx
inty
}S
https://translate.googleusercontent.com/translate_f#202 210/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
structprov*seguinte
}

pgina279

244 Captulo3MachineNvelRepresentaodeProgramas

Estadeclaraoilustraqueumaestruturapodeserincorporadodentrodeoutro,
assimcomomatrizespodemserincorporadosdentrodasestruturas,ematrizespodeserincorporado
dentrodematrizes.
Oprocedimentoquesesegue(comalgumasexpressesomitido)actuaneste
estrutura:
vaziosp_init(structprovsp*)
{
SP>sx =
SP>p =
SP>next=
}
A.Quaissoosdeslocamentos(embytes)dasseguintesreas?
P:
sx:
sy:
seguinte:
B.Quantosbytesnototalqueaestruturarequer?
C.Ocompiladorgeraoseguintecdigodemontagemparaocorpodesp_
nisso:
spem%ebp+8
1 movl 8(%ebp),%eax
2 movl 8(%eax),%edx
3 movl %Edx,4(%eax)
4 Leal 4(%eax),%edx
5 movl %Edx,(%eax)
6 movl %Eax,12(%eax)
Combasenessasinformaes,preencherasexpressesemfaltanocdigo
parasp_init.

3.9.2Unies
SindicatosfornecemumamaneiradecontornarosistemadetipodeC,permitindoqueumnicoobjeto
paraserreferenciadodeacordocomvriostipos.Asintaxedeumadeclaraodeunio
idnticoaoqueparaestruturas,masasuasemnticasomuitodiferentes.Aoinvsde
tendoosdiferentescamposderefernciadiferentesblocosdememria,todoselesdereferncia
omesmobloco.
Considereasseguintesdeclaraes:
structS3{
charc
inti[2]

pgina280

Seo3.9Estruturasdedadosheterogneo245

https://translate.googleusercontent.com/translate_f#202 211/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
vdupla
}

U3union{
charc
inti[2]
vdupla
}

QuandocompiladascomumamquinaIA32Linux,osdeslocamentosdoscampos,assimcomoa
detamanhototaldetiposdedadosS3eU3,socomoapresentadonaseguintetabela:

Tipo C Eu V Tamanho
S3 0 4 12 20
U3 0 0 0 8

(Vamosverlogoporqueeucompensou4emS3emvezde1,evamosdiscutir
porqueosresultadosseriamdiferentesparaumamquinaexecutandooMicrosoftWindows.)
ParaponteiropdetipodeunioU3*,refernciasP>c,p>i[0],ep>vfariatudo
referenciaroinciodaestruturadedados.Observartambmqueotamanhototaldo
umaunioigualaotamanhomximodequalquerdosseuscampos.
Uniespodesertilemvrioscontextos.Noentanto,elestambmpodemlevaradesagradvel
erros,umavezqueignoraraseguranaproporcionadapelosistemaTipoC.umaaplicao
quandosesabeantecipadamentequeautilizaodedoisdomniosdiferentesnumaestruturadedados
vaisermutuamenteexclusivos.Emseguida,declararessesdoiscamposcomopartedeumaunio,emvez
doqueumaestruturairreduziroespaototalafectado.
Porexemplo,suponhaquequeremosimplementarumaestruturadedadosrvorebinria
ondecadanfolhatemumvalordedadosdupla,enquantoquecadaninternotem
ponteirosparadoisfilhos,masnohdados.Sedeclararissocomo

structNODE_S{
structNODE_S*esquerda
structNODE_S*direita
dadosduplas
}

emseguida,cadanrequer16bytes,commetadedosbytesdesperdiadosparacadatipoden.
Poroutrolado,sedeclararcomoumn

unioNODE_U{
struct{
NODE_Uunio*esquerda
NODE_Uunio*direita
}interno
dadosduplas
}

pgina281

246 Captulo3MachineNvelRepresentaodeProgramas

emseguida,cadanvaiexigirapenas8bytes.Senumapontadorparaumndotipounio
N*,quefariarefernciaosdadosdeumnfolhacomon>dados,eosfilhos
deumninterno,talcomon>internal.leften>internal.right.
Comestacodificao,noentanto,nohnenhumamaneiradedeterminarseumdado
numafolhaouumninterno.Ummtodocomumaintroduodeumenumer
Tipodeateddefinindoasdiferentesopespossveisparaaunio,e,emseguida,criaruma
estruturaquecontmumcampodetageaunio:

enumtypedef{N_LEAF,N_INTERNAL}nodetype_t

NODE_Tstruct{
Tiponodetype_t
Unio{
struct{
structNODE_T*esquerda
structNODE_T*direita
}interno
dadosduplas
}Info
}

https://translate.googleusercontent.com/translate_f#202 212/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Estaestruturanecessitadeumtotalde12bytes:4paraotipoe,ou4paracada
info.internal.lefteinfo.internal.right,ou8parainfo.data.Nisso
caso,oganhodepoupanautilizandoumauniopequenaemrelaoaoconstrangimentode
ocdigoresultante.Paraestruturasdedadoscommaiscampos,aeconomiapodesermais
atraente.
Uniestambmpodeserusadoparaacederaospadresdediferentestiposdedadosdebit.
Porexemplo,oseguintecdigoretornaarepresentaodeumflutuadorcomoumbit
semsinal:

1 unsignedfloat2bit(floatf)
2 {
3 Unio{
4 flutuarF
5 unoassinado
6 }Temporrio
7 temp.f=F
8 voltartemp.u
9 }
Nestecdigo,nsarmazenamosoargumentonauniousandoumtipodedadoseacesslo
utilizandooutro.Curiosamente,ocdigogeradoparaesteprocedimentoidnticoao
que,paraoprocedimentoquesesegue:

1 cpiasemassinatura(noassinadou)
2 {
3 voltaru
4 }

pgina282

Seo3.9Estruturasdedadosheterogneo247

Ocorpodeambososprocedimentosapenasumanicainstruo:
1 movl 8(%ebp),%eax
Istodemonstraafaltadeinformaessobreotipodecdigodemquina.oargumento
mentosernodeslocamento8%emrelaoaoEBPindependentementedesesetratadeumflutuadorouum
semsinal.Oprocedimentosimplesmentecopiaseuargumentocomoovalorderetornosem
modificarqualquerbits.
Aousarsindicatosparacombinartiposdedadosdediferentestamanhos,byteordenao
questespodesetornarimportante.Porexemplo,suponhaqueescreverumprocedimentoqueir
criarum8byteduplousandoospadresdebitsdadaspordoissemassinaturade4bytes:
1 bit2doubledouble(semassinaturaword0,semassinaturaword1)
2 {
3 Unio{
4 dduplo
5 unoassinado[2]
6 }Temporrio
7
8 temp.u[0]=word0
9 temp.u[1]=word1
10 voltartemp.d
11 }
Emumamquinalittleendian,comoIA32,oargumentoword0vaisetornaro
baixaordem4bytesded,enquantoword1setornaroaaltaordem4bytes.Emumagrande
endianmquina,opapeldosdoisargumentosserrevertida.

PrticaProblema3.40
SuponhaquevocestdadaatarefadeverificaodequeumcompiladorCgeraobom
cdigoparaaestruturaeauniodeacesso.Vocescreveaseguintedeclaraodeestrutura:
uniotypedef{
struct{
curtav
curtad
int S
}T1
struct{
inta[2]
char*p
}T2
}U_type

https://translate.googleusercontent.com/translate_f#202 213/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Vocescreveumasriedefunesdaforma
vazioget(u_type*se,digite*dest){
*Dest=EXPR
}

pgina283

248 Captulo3MachineNvelRepresentaodeProgramas

comexpressesdiferentesdeacessoEXPRecomdestinotipodedadosconjuntoTIPO
deacordocomotipoassociadocomExpr.Voc,ento,examinarocdigogerado
quandocompilarasfunesparaverseelescorrespondemssuasexpectativas.
Suponhanestasfunesqueparacimaedestsocarregadosemregistradores%eaxe
%Edx,respectivamente.PreenchaatabelaaseguircomotipoTYPEeassequnciasdedados
de13instruesparacalcularaexpressoearmazenaroresultadoemdest.Tente
usarapenasregistra%eaxeedx%,utilizandoregisto%ecxquandoestesnososuficientes.

EXPR TIPO Cdigo


paracima>t1.s int movl4(%eax),%eax
movl%eax,(%EDX)

paracima>t1.v

Eparacima>t1.d

paracima>t2.a

paracima>t2.a[paracima>t1.s]

*Paracima>t2.p

3.9.3AlinhamentodeDados
Muitasrestriessistemasinformticoscolocamosendereospermitidosparao
tiposdedadosprimitivos,exigindoqueoendereodealgumtipodeobjetodeveserum
mltiplodealgumvalorK(tipicamente2,4,ou8).Taisrestriesdealinhamentosimplificar
aconcepodoequipamentoqueformaainterfaceentreoprocessadoreo
sistemadememria.Porexemplo,suponhaqueumprocessadorsempreobtm8bytesde
memriacomumendereoquedeveserummltiplode8.Sepodemosgarantirquequalquer
duplavaiseralinhadoparateroseuendereodeserummltiplode8,emseguida,ovalorpode
serlidoouescritocomumanicaoperaodememria.Casocontrrio,talvezsejanecessrio

pgina284

https://translate.googleusercontent.com/translate_f#202 214/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Seo3.9Estruturasdedadosheterogneo249

executardoisacessosmemria,umavezqueoobjetopodeserdivididoemdois8byte
blocosdememria.
OhardwareIA32irfuncionarcorrectamente,independentementedoalinhamentodosdados.
Noentanto,aIntelrecomendaqueosdadossejamalinhadosparamelhorarosistemadememria
desempenho.Linuxsegueumapolticadealinhamentoemquetiposdedadosde2bytes(porexemplo,
short)deveterumendereoqueummltiplode2,enquantoquequaisquertiposdedadosmaiores
(Porexemplo,int,int*,floatedouble)deveterumendereoqueummltiplode
4.Notequeestaexignciasignificaqueobitmenossignificativodoendereodo
umobjetodotipocurtodeveserigualazero.Damesmaforma,qualquerobjetodotipointouqualquer
ponteiro,deveserdeumendereodeterabaixaordem2bitsigualazero.

AlmUmcasodealinhamentoobrigatrio
ParaamaioriadasinstruesIA32,mantendoosdadosalinhadosmelhoraaeficincia,masnoafetaoprograma
comportamento.Poroutrolado,algumasdasinstruesSSEparaaimplementaodeoperaesmultimdia
noirfuncionarcorretamentecomosdadosdesalinhadas.Estasinstruesoperaremblocosde16bytesdedadose
asinstruesquetransfernciadedadosentreaunidadeSSEememriarequeremosendereosdememriapara
sermltiplosde16.Qualquertentativadeacessaramemriacomumendereoquenosatisfazestealinhamento
levaraumaexceo,comocomportamentopadroparaoprogramaparaterminar.
EstaamotivaoportrsdaconvenoIA32decertificarsedequecadaquadrodepilhaum
mltiplode16bytes(veroladodapgina226).Ocompiladorpodealocararmazenamentodentrodeumapilha
estruturadetalmodoqueumblocopossaserarmazenadocomumalinhamentode16bytes.

AlmAlinhamentocomoMicrosoftWindows
MicrosoftWindowsimpeumalinhamentorequisitodequalquerobjetoprimitivomaisfortedeKbytes,por
K=2,4ou8,deveterumendereoqueummltiplodeK.Emparticular,necessrioqueoendereo
deumcasalouumlongoserummltiplode8.Esterequisitoaumentaodesempenhodamemriaem
custadealgumespaodesperdiado.AconvenoLinux,emqueosvaloresde8bytessoalinhadosem4bytes
limitesfoi,provavelmente,bomparaoi386,devoltaquandoamemriaeraescassoeinterfacesdememriaforam
apenas4bytesdelargura.Comosprocessadoresmodernos,oalinhamentodaMicrosoftumamelhordecisodedesign.Tipodedados
longdouble,paraoqualgccgeracdigoIA32alocar12bytes(mesmoqueotipodedadosreal
requerapenas10bytes)temumaexignciadealinhamentode4bytescomWindowseLinux.

Oalinhamentoexecutadaporcertificandosedequecadatipodedadosorganizadae
atribudosdetalformaquetodososobjectosdentrodotiposatisfazseualinhamento
Restries.Ocompiladorcolocadirectivasnocdigoassemblyqueindicao
alinhamentodesejadoparadadosglobal.Porexemplo,adeclaraodemontagemdecdigo
tabeladesaltoapartirdapgina217contmaseguintediretivanalinha2:

.align4
Issogarantequeosdadosqueselhesegue(nestecaso,oinciodatabeladesalto)vai
comearcomumendereoqueummltiplode4.Umavezquecadaentradanatabelade4bytesdecomprimento,
oselementossucessivosvaiobedecerarestriodealinhamentode4bytes.

pgina285

250 Captulo3MachineNvelRepresentaodeProgramas

rotinasdebibliotecaquealocammemria,taiscomomalloc,devemserconcebidos
demodoqueelesretornamumponteiroquesatisfazarestriodealinhamentodepiorcaso
paraamquinaqueestsendoexecutado,normalmente4ou8.Paraestruturasdecdigoenvolvendo,
ocompiladorpodeprecisarinserirlacunasnaatribuiodecampoparagarantirquecada
elementodaestruturasatisfazaexignciadealinhamento.Aestruturatem,emseguida,alguns
alinhamentonecessrioparaseuendereodepartida.
Porexemplo,considereaseguintedeclaraoestrutura:

structS1{
inti
charc
intj
}
Suponhaqueocompiladorusadoaalocaomnimade9byte,diagramadocomo
Seguinte:

compensar
0 45 9

https://translate.googleusercontent.com/translate_f#202 215/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Contedo Eu C J
Emseguida,seriaimpossveldesatisfazerorequisitodealinhamento4byteparaambos
camposi(offset0)eJ(compensado5).Emvezdisso,ocompiladorinsereumintervalode3bytes(mostrado
aquicomosombreadaemazul)entreoscamposcej:

compensar
0 45 8 12
Contedo Eu C J

Comoresultado,jtemcompensado8,eotamanhototalestruturade12bytes.Maisdistante
mais,ocompiladordevegarantirqueoponteiropdotipo*satisfazstructS1
umalinhamentode4bytes.Usandonossanotaoanterior,deixeponteiroptmvalorxp .Ento
xp deveserummltiplode4.Istogarantequeambosp>i(endereoxp )ep>j
(endereoxp +8)irsatisfazerosseusrequisitosdealinhamentode4bytes.
Almdisso,ocompiladorpodesernecessrioadicionarestofoparaofinaldaestrutura
demodoquecadaelementodeumamatrizdeestruturasirosatisfazeraexignciadealinhamento.
Porexemplo,considereaseguintedeclaraoestrutura:
structS2{
inti
intj
charc
}
Sensembalamosessaestruturaem9bytes,aindapodemossatisfazerasexignciasdealinhamento
paracamposIeJ,certificandosedequeoendereoinicialdossatisfazestrutura
umrequisitoalinhamentode4bytes.Considerese,noentanto,aseguintedeclarao:

structS2d[4]

pgina286

Seo3.9Estruturasdedadosheterogneo251

Comaatribuio9bytes,quenopossvelsatisfazeraexignciadealinhamento
paracadaelementoded,porqueesteselementosteroendereosxd ,xd +9,
xd +18,exd +27.Emvezdisso,ocompiladoraloca12bytesparaaestruturaS2,
comosltimos3bytessendodesperdiadoespao:

compensar
0 4 98 12
Contedo Eu J C

Dessaforma,oselementosdedterendereosxd ,xd +12,xd +24,exd +36.


Enquantoxd ummltiplode4,todasasrestriesdealinhamentosersatisfeito.

PrticaProblema3.41
Paracadaumdosseguintesdeclaraesestrutura,determinamodeslocamentodecadacampo,
otamanhototaldaestrutura,esuaexignciadealinhamentoemLinux/IA32.
A.structP1{inticharcintjcaractered}
B.structP2{inticharccaracteredintj}
C.structP3{shortw[3]charc[3]}
D.structP4{shortw[3]char*c[3]}
E.structP1P3{structum[2]structP2*p}

PrticaProblema3,42
Paraadeclaraodeestrutura

struct{
Caracteres*uma
curto b
Duplo C
Caracteres D
flutuador e
Caracteres F
glonglong
vazio *h
}Foo
suponhaqueelefoicompiladoemumamquinaWindows,ondecadatipodedadosprimitivos

https://translate.googleusercontent.com/translate_f#202 216/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
deKbytesdeveterumdeslocamentoqueummltiplodeK.
A.Quaissoosoffsetsdebytesdetodososcamposnaestrutura?
B.Oqueotamanhototaldaestrutura?
C.reorganizaroscamposdaestruturaparaminimizaroespaodesperdiado,e,emseguida
mostrarosdeslocamentosbyteetamanhototalparaaestruturareorganizada.

pgina287

252 Captulo3MachineNvelRepresentaodeProgramas

3.10PuttingItTogether:PonteirosEntendendo

OsponteirossoumacaractersticacentraldalinguagemdeprogramaoC.Elesservemcomoum
maneirauniformeparagerarrefernciasaelementosdentrodediferentesestruturasdedados.
Osponteirossoumafontedeconfusoparaprogramadoresiniciantes,masosubjacente
conceitossobastantesimples.Aquidestacamosalgunsprincpioschavedeponteirose
seumapeamentoemcdigodemquina.

. Cadaponteirotemumtipoassociado.Estetipoindicaotipodeobjeto
oponteiroapontapara.Usandoasseguintesdeclaraesdeponteirocomoilustraes,

int*ip
char**CPP

ipvarivelumponteiroparaumobjetodotipoint,enquantoCPPumponteiroparaum
objetarqueemsiumponteiroparaumobjetodotipochar.Emgeral,seoobjecto
temotipoT,emseguida,oponteirotemotipo*T.Otipoespecialvoid*representaum
ponteirogenrico.Porexemplo,afunomallocretornaumponteirogenrico,
queconvertidoparaumponteirodigitado,queratravsdeumaconversoexplcitaoupela
conversoimplcitadaoperaodecesso.tiposdeponteironofazempartedo
CdigodamquinaelessoumaabstraofornecidaporCparaajudarosprogramadores
evitarabordarerros.
. Cadacursortemumvalor.Estevalorumendereodealgumobjetodo
tipodesignado.OespecialNULL(0)valorindicaqueoponteirofaz
Noaponteemqualquerlugar.
. Osponteirossocriadoscomo&operador.Esseoperadorpodeseraplicadoaqualquer
ExpressoCqueclassificadocomoumlvalue,ouseja,umaexpressoquepode
aparecemnoladoesquerdodeumaatribuio.Exemplosincluemvariveiseo
elementosdeestruturas,sindicatosematrizes.Vimosqueamquina
realizaodecdigodooperador&muitasvezesusaainstruolealparacomputar
ovalordeexpresso,umavezqueestainstruosedestinaacalcularoendereo
deumarefernciadememria.
. Osponteirossodereferencedcomo*operador.Oresultadoumvalorquetema
tipoassociadocomoponteiro.Dereferencingimplementadoporumamemria
dereferncia,querarmazenarourecuperarapartirdoendereoespecificado.
. Arrayseponteirosestointimamenterelacionados.Onomedeumamatrizpodeserreferenciado
(Masnoactualizados)comosefosseumavariveldeponteiro.Matrizreferenciar(porexemplo,
um[3])temomesmoefeitocomoaritmticaponteiroedereferencing(porexemplo,
*(A+3)).Ambosrefernciaarrayearitmticadeponteirorequeremdimensionamentodo
compensaesporotamanhodoobjeto.Quandoescrevemosumaexpressop+iparaponteiropcom
valordep,oendereoresultantecalculadocomoP+Li,ondeLotamanhode
otipodedadosassociadocomp.
. Fundiodeumtipodeponteiroparaoutromudaoseutipo,masnooseuvalor.
Umdosefeitosdafundiomudarqualquerescaladearitmticadeponteiro.Entopara
exemplo,sepumponteirodotipochar*comvalorp,entoaexpresso

pgina288

https://translate.googleusercontent.com/translate_f#202 217/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

Seo3.10PuttingItTogether:PonteirosEntendendo 253

(int*)p+7calculap+28,aomesmotempo(int*)(p+7)calculap+7.(Lembrese
queelencotemprecednciamaiordoqueadio.)
. Ponteirostambmpodeapontarparafunes.Istoforneceumrecursopoderosopara
Armazenandoepassandorefernciasaocdigo,quepodemserinvocadosemalgumoutro
partedoprograma.Porexemplo,setemosumafunodefinidapeloproto
tipo

divertidoint(intx,int*p)

entopodemosdeclarareatribuirumfpponteiroparaessafunopelaseguinte
sequnciadecdigo:

(Int)(*fp)(int,int*)
fp=diverso

Podemos,ento,chamarafunousandoesseponteiro:

inty=1
intresultado=fp(3,ey)

Ovalordeumponteirodefunooendereodainstruonoprimeiro
representaomquinadocdigodafuno.

NovoparaC?ponteirosdefuno
Asintaxeparadeclararponteirosdefunoespecialmentedifcilparaprogramadoresiniciantesparaentender.
Paraumadeclaraocomo

int(*f)(int*)
eleajudaalloapartirdedentro(comeandocom"f")etrabalhandoparafora.Assim,vemosquef
umponteiro,comoindicadopor"(*F)."umponteiroparaumafunoquetemumnicoint*comoumargumento,
comoindicadopor"(*f)(int*)".Finalmente,vemosqueumponteiroparaumafunoquelevaumint*comoum
argumentoeretornaint.
Osparntesesemtorno*fsonecessrios,porquecasocontrrioadeclarao

int*f(int*)
serialidocomo

(Int*)f(int*)
Isto,deveserinterpretadocomoumprottipodefuno,declaraumafunofquetemumint*comooseu
argumentoeretornaumint*.
Kernighan&Ritchie[58,Sect.5.12]apresentamumtutorialtilnaleituradedeclaraesC.

pgina289

254 Captulo3MachineNvelRepresentaodeProgramas

3.11avidanomundoreal:usandoo gdbDebugger

OdepuradorgdbGNUforneceumnmerodecaractersticasteisparaapoiaro
runtimeavaliaoeanlisedosprogramasdenveldemquina.Comosexemplos
eexercciosdestelivro,tentamosinferirocomportamentodeumprograma
sdeolharparaocdigo.Usandogdb,tornasepossvelestudarocomportamento
assistindooprogramaemao,apesardeteremumcontroleconsidervelsobreasua
execuo.
Figura3.30mostraexemplosdealgunsgdbordenaqueajudaquandosetrabalha
commquinadenvel,programasIA32.muitotilparaaprimeiraobjdumpprazoparaobter
desmontadoumaversodoprograma.Nossosexemplossobaseadosemgdbrunning
noprogarquivo,descritoedesmontadonapgina164.Comeamosgdbcomo
seguintelinhadecomando:

unix>proggdb

https://translate.googleusercontent.com/translate_f#202 218/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Oesquemageraldefinirpontosdeinterrupopertodepontosdeinteressenapro
grama.Estespodemserdefinidosparaapenasapsaentradadeumafuno,ouaumendereodeprograma.
Quandoumdospontosdeinterrupoatingidoduranteaexecuodoprograma,oprogramair
deteredevolverocontroleparaousurio.Deumpontodeinterrupo,podemosexaminardiferentes
registroselocaisdememriaemvriosformatos.Podemostambmsinglepassodo
programa,executandoapenasalgumasinstruesdeumavez,oupodemosavanarparaaprxima
pontodeinterrupo.
Comoosnossosexemplossugerem,gdbtemumasintaxedecomandoobscuro,masoon
informaesdelinhadeajuda(invocadodentrogdbcomocomandohelp)supera
estalacuna.Aoinvsdeusarainterfacedelinhadecomandoparagdb,muitos
programadorespreferemusarddd,umaextensoparagdbqueforneceumagrficadeusurio
interface.

WebAlmASM:OPTcdigomquinageradocommaioresnveisdeotimizao
Emnossaapresentao,nsolhamosocdigodemquinageradocomnvelumoptimization(especificado
comaopodelinhadecomando'O1').Naprtica,osprogramasmaisutilizadossocompiladoscommaior
nveisdeotimizao.Porexemplo,todasasbibliotecasepacotesGNUsocompiladascomnveldedois
otimizao,especificadocomaopodelinhadecomando'O2'.
Asversesrecentesdogccempregarumextensoconjuntodeoptimizaesaonveldois,fazendoomapeamento
entreocdigofonteeocdigogeradomaisdifcildediscernir.Aquiestoalgunsexemplosde
asotimizaesquepodemserencontradosnonveldois:

. Asestruturasdecontroletornamsemaisemaranhados.Amaioriadosprocedimentostervriospontosderetorno,
eocdigodegerenciamentodepilhaparaconfigurareconcluirumafunomisturadocomocdigo
execuodasoperaesdoprocesso.
. Chamadasdeprocedimentosomuitasvezesembutido,substituindoaspelasinstruesdeaplicaodosprocedimentos.
Issoeliminagrandepartedasobrecargaenvolvidanachamadaeretornardeumafuno,eele
permiteotimizaesquesoespecficosparachamadasdefunesindividuais.Poroutrolado,setentarmos
definirumpontodeinterrupoparaumafunoemumdepurador,talveznuncaencontrarumachamadaparaestafuno.

pgina290

Seo3.11vidanomundoreal:usandoogdbDebugger 255

Comando Efeito
Iniciareparar
Sair gdbExit
corre Executeoprograma(darargumentosdelinhadecomandoaqui)
matar Pararoseuprograma
Pontosdeinterrupo
somapausa Definirpontodeinterruponaentradaparafuncionarsoma
quebrar*0x8048394 Definirpontodeinterruponoendereo0x8048394
excluir1 Excluirpontodeinterrupo1
excluir Excluirtodosospontosdeinterrupo
Execuo
stepi Executarumainstruo
stepi4 Executarquatroinstrues
proximoeu Comostepi,masprocederpormeiodechamadasdefuno
continuar execuocurrculo
terminar Corraatfunoretornaatuais
cdigoexaminando
disas Desmontefunoatual
somadisas Funodedesmontarsoma
0x8048397disas Funodedesmontartornoendereo0x8048397
disas0x80483940x80483a4cdigoDesmontedentrodoalcanceendereoespecificado
impresso/x$eip contadordeprogramadeimpressoemhexadecimal
examinandodados
print$eax Contedosdeimpressode%eaxemdecimal
impresso/x$eax Contedosdeimpressode%eaxemhexadecimal
impresso/t$eax Contedosdeimpressode%eaxembinrio
0x100impresso Imprimirrepresentaodecimalde0x100
impresso/x555 representaohexadecimaldeimpressode555
impresso/x($ebp+8) Contedosdeimpressode%ebpmais8emhexadecimal
print*(int*)0xfff076b0 Inteirodeimpressonoendereo0xfff076b0
print*(int*)($ebp+8) Inteirodeimpressonoendereo%ebp+8
x/2W0xfff076b0 Examineduaspalavras(4bytes)comeandonoendereo0xfff076b0

https://translate.googleusercontent.com/translate_f#202 219/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
xsoma/20b
Informaotil Examineprimeiros20bytesdafunosoma
Informaoquadro Informaessobrequadroatualdapilha
Informaesregistos Osvaloresdetodososregistros
Socorro Obterinformaessobregdb
Figura3.30ExemploGDBcomandos.Estesexemplosilustramalgumasdasformasgdb
suportaadepuraodeprogramasdenveldemquina.

pgina291

256 Captulo3MachineNvelRepresentaodeProgramas

. Arecursomuitasvezessubstitudoporiterao.Porexemplo,afunorfactfactorialrecursiva(Fi
ure3,25)compiladoemcdigomuitosemelhanteaogeradopelaexecuoloopwhile
(Figura3.15).Maisumavez,issopodelevaraalgumassurpresasquandotentamoscontrolaraexecuodoprograma
comumdepurador.
Essasotimizaespodemmelhorarsignificativamenteodesempenhodoprograma,maselesfazemomapeamento
entrefonteecdigodemquinamuitomaisdifcildediscernir.Issopodetornarosprogramasmais
difcildedepurar.Noentanto,essasotimizaesdenvelsuperiorjsetornarampadro,eassim
aquelesqueestudamprogramasnonveldamquinadevesefamiliarizarcomaspossveisotimizaes
elespodemencontrar.

3.12OutofBoundsrefernciasdememria
eestourodebuffer

VimosqueCnoexecutarqualquerverificaodelimitesparaasrefernciasdematriz,
equeasvariveislocaissoarmazenadosnapilhajuntocominformaesdeestado,tais
comovaloresderegistrosalvoseendereosderetorno.Estacombinaopodeconduziragraves
errosdeprograma,ondeoestadoarmazenadonapilhasocorrompidosporumagravaoparaum
foradoslimitesdoelementodamatriz.Quandooprograma,emseguida,tentarecarregaroregisto
ouexecutarumainstruoretcomesteestadocorrompido,ascoisaspodemcorrersrio
errado.
Umafonteparticularmentecomumdacorrupoestadoconhecidocomobufferoverflow.
Normalmentealgunsmatrizdecaracteresalocadonapilhaparasegurarumacorda,maso
tamanhodacadeiaexcedeoespaoalocadoparaoarray.Istodemonstrado
peloseguinteexemplodeprograma:

1 /*Implementaodeexemplodefunodebibliotecarecebe()*/
2 char*gets(char*s)
3 {
4 intC
5 char*dest=s
6 intgotchar=0/*Tempelomenosumcaracterefoilido?*/
7 while((c=getchar())!='\n'&&c!=EOF){
8 *dest++=c/*Nohverificaodelimites!*/
9 gotchar=1
10 }
11 *dest++='\0'/*Terminarstring*/
12 if(c==EOF&&!gotchar)
13 retornarNULL/*Fimdoarquivoouerro*/
14 retornars
15 }
16

pgina292

https://translate.googleusercontent.com/translate_f#202 220/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

257
Seo3.12RefernciasmemriaforadoslimiteseBufferOverflow

17 /*Leialinhadeentradaeescrevlodevolta*/
18 echovoid()
19 {
20 decharbuf[8]/*Pequenodemais!*/
21 gets(buf)
22 puts(BUF)
23 }

Ocdigoanteriormostraumaimplementaodafunodebibliotecarecebe
parademonstrarumsrioproblemacomestafuno.Elelumalinhado
entradapadro,parandoquandoumcaracteredeterminaodenovalinhaoualgum
condiodeerroencontrada.Elecopiaessastringparaolocaldesignadopela
argumentos,eterminaastringcomumcaracterenulo.Mostramosautilizaode
ficanoechofuno,quesimplesmentelumalinhadaentradapadroe
ecoalodevoltaparaasadapadro.
Oproblemacomsetemqueelenotemmaneiradedeterminarsesuficiente
espaofoialocadoparaseguraracordatoda.Nonossoexemplodeeco,temos
propositadamenteobuffermuitopequenoapenasoitocaracteres.qualquercadeia
maisdesetecaracteresircausarumagravaoforadaquadra.
Examinandoocdigoassemblygeradopelogccparaechomostracomoapilha
estorganizado.

1 eco:
2 pushl %ebp Salve%ebpnapilha
3 movl %Esp,%ebp
4 pushl %ebx Salve%ebx
5 subi US$20,%esp Alocar20bytesnapilha
6 Leal 12(%Ebp),%ebxComputebufcomo%ebp12
7 movl %EBX,(%esp) buflojanotopodapilha
8 ligar fica chamadarecebe
9 movl %EBX,(%esp) buflojanotopodapilha
10 ligar puts putschamada
11 addl US$20,%esp espaodepilhaDesalocar
12 popl %ebx Restaurar%ebx
13 popl %ebp Restaurar%ebp
14 ret Retorna

Podemosvernesteexemploqueoprogramaarmazenaocontedodosregistradores%ebp
e%EBXnapilha,e,emseguida,alocaumadicionalde20bytespelasubtraco20
doponteirodepilha(linha5).Alocalizaodobufmatrizdecaracterescalculadocomo
12bytesabaixo%EBP(linha6),umpoucoabaixodovalorarmazenadodeEBX%,talcomoilustradona
Figura3.31.Enquantoousuriodigitanomximosetecaracteres,astringretornada
porgets(incluindoonulodeterminao)vaicaberdentrodoespaoalocadoparabuf.
Aseqnciamaislonga,noentanto,farcomquecomeaasubstituiralgumasdasinformaes

pgina293

258 Captulo3MachineNvelRepresentaodeProgramas

Figura3.31
organizaodepilhapara
echofuno.Personagem quadrodepilha
matrizbufestlogoabaixoparte parachamador
doestadosalvo.umasada Endereodedevoluo
doslimitesescrevaparabufpode Salvo%ebp %ebp
corromperoestadodoprograma. Salvo%ebx
[7][6][5][4]
quadrodepilha
paraecho[3][2][1][0]buf

https://translate.googleusercontent.com/translate_f#202 221/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
armazenadonapilha.Comoacadeiaficamaislongo,aseguinteinformaoter
corrompido:

caracteresdigitados Estadocorrompidoadicional
07 Nenhum
811 Valorguardado%ebx
1215 Valorsalvo%ebp
1619 Endereodedevoluo
20+ estadosalvonochamador
Talcomoestatabelaindica,acorrupocumulativo,comoonmerodecarac
actersaumenta,maisestadoficacorrompido.Dependendodequalporesdo
Estadosoafetados,oprogramapodesecomportarmaldevriasmaneirasdiferentes:

. Seovalorarmazenadode%EBXestcorrompido,entoesteregistonoserrestaurada
adequadamenteemlinha12,edemodoqueochamadornosercapazdeconfiarnaintegridadede
Nesteregisto,mesmoqueeledeveserreceptorsalvos.
. Seovalorarmazenadode%ebpestcorrompido,entoesteregistonoserrestaurada
adequadamentenalinha13,edemodoqueochamadornoserocapazesdereferenciaroseulocalde
variveisouparmetroscorretamente.
. Seovalorarmazenadodoendereoderetornoestcorrompido,entoainstruoret
(Linha14)farcomqueoprogramaparasaltarparaumlocaltotalmenteinesperado.
NenhumdestescomportamentosparecepossvelcombasenocdigoC.Oimpacto
deoutoflimitesdegravaoemmemria,funescomoficaspodeserentendido
estavaestudandooprogramanonveldamquinacdigo.
Nossocdigodeecosimples,masdesleixado.Umaversomelhorenvolveousodo
fgetsfuno,queincluicomoumargumentoumacontagemdonmeromximo
debytesparaler.Problema3.68pedelheparaescreverumafunodeecoquepodelidarcom
umacadeiadeentradadecomprimentoarbitrrio.Emgeral,usandoobtmouqualquerfunoquepode
armazenamentoestouroconsideradaumaprticadeprogramaoruim.OcompiladorCmesmo
produzaseguintemensagemdeerroquandocompilarumarquivoquecontmumachamadapara
fica:"Arecebefunoperigosoenodeveserutilizada."Infelizmente,

pgina294

259
Seo3.12RefernciasmemriaforadoslimiteseBufferOverflow

umnmerodefunesdebibliotecavulgarmenteutilizados,incluindostrcpy,strcat,e
sprintf,temapropriedadedequeelespodemgerarumasequnciadebytessemser
dadaqualquerindicaosobreotamanhodobufferdedestino[94].Taiscondiespodem
levaravulnerabilidadesdeestourodebuffer.

PrticaProblema3,43
Figura3.32mostrauma(baixaqualidade)implementaodeumafunoquelumalinha
daentradapadro,copiaaseqnciadecaracteresparaarmazenamentorecmalocado,eretornaum
ponteiroparaoresultado.
Considereoseguintecenrio.getlineprocedimentochamadocomoretorno
abordariguala0x8048643,cadastre%ebpiguala0xbffffc94,cadastre%ebx
iguala0x1,cadastre%ediiguala0x2,eregistrar%ESIiguala0x3.Voc
digitarastring"012345678901234567890123".Oprogramaterminacom

(A)decdigoC
1 /*Istomuitocdigodebaixaqualidade.
2 Eledestinadoailustrarasprticasdeprogramaoruins.
3 VejaoProblema3.43.*/
4 char*getline()
5 {
6 decharbuf[8]
7 *Resultadodechar
8 gets(buf)
9 result=malloc(strlen(buf))
10 strcpy(resultado,buf)
11 retornarresultado
12 }

(b)Desmontagemseatravsdechamadapararecebe
1 080485c0<getline>:

https://translate.googleusercontent.com/translate_f#202 222/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
2 80485c0:55 empurrar%ebp
3 80485c1:89e5 mov %Esp,%ebp
4 80485c3:83ec28 sub $0x28,%esp
5 80485c6:89f45d mov %EBX,0xc(%ebp)
6 80485c9:8975f8 mov %ESI,0x8(%ebp)
7 80485cc:89fc7d mov %Edi,0x4(%ebp)
pilhaDiagramanestemomento
8 80485cf:8d75ec Lea 0x14(%Ebp),%esi
9 80485d2:893424 mov %ESI,(%esp)
10 80485d5:E8a3ffffff ligar 804857d<recebe>
Modificardiagramaparamostrarcontedodapilhanestemomento
Figura3.32Cedesmontadocdigoparaoproblema3,43.

pgina295

260 Captulo3MachineNvelRepresentaodeProgramas

umafalhadesegmentao.Vocexecutargdbedeterminarqueoerroocorreduranteo
execuodainstruoretdegetline.
A.Preenchaodiagramaaseguir,indicandoomximoquepudersobreo
empilharimediatamentedepoisdeexecutarainstruonalinha7nadesmontagem.Rtulo
asquantidadesarmazenadasnapilha(porexemplo,"endereoderetorno")sobreodireito,e
seusvaloreshexadecimais(seconhecida)dentrodacaixa.Cadacaixarepresenta4
bytes.Indicaraposio%ebp.

08048643endereoderetorno

B.Modificarseudiagramaparamostraroefeitodachamadaparagets(linha10).
C.Paraqueendereoqueatentativadoprogramapararetornar?
D.Oregisto(s)tmcorrompidovalor(es)retornaquandogetline?
E.Almdopotencialdebufferoverflow,queduasoutrascoisasestoerradas
comocdigoparagetline?

Umautilizaomaisperniciosadeestourodebufferobterumprogramaparaexecutar
umafunoqueseriadeoutraformanoestardispostosafazer.Esteumdosmais
mtodoscomunsparaatacaraseguranadeumsistemaatravsdeumarededecomputador.
Tipicamente,oprogramaalimentadocomumacadeiaquecontmacodificaobytedealguns
cdigoexecutvel,chamadodecdigodeexplorao,almdealgunsbytesextrasquesubstituemo
endereoderetornocomumponteiroparaocdigodeexplorao.OefeitodeexecutaroRET
instruo,emseguida,parasaltarparaocdigodeexplorao.
Emumaformadeataque,ocdigodeexplorao,emseguida,usaumachamadadesistemaparainiciarum
programadeshell,proporcionandooatacantecomumagamadefunesdosistemaoperacional.
Emoutraforma,ocdigodeexploraorealizaalgumatarefadeoutraformanoautorizada,
reparaodedanosparaapilha,e,emseguida,executaumsegundotempoderet,causandoum
(Aparentemente)rendimentonormalparaochamador.
Comoexemplo,ofamosoInternetwormdenovembro1988usadoquatrodife
rentesmaneirasdeganharacessoamuitosdoscomputadoresatravsdaInternet.umera
umataquedebufferoverflownofingerddedodaemon,queservesolicitaespor
ocomandodedo.Aoinvocardedocomumaseqnciaadequada,oworm
poderiafazerodaemonemumlocalremototemumestourodebuffereexecutarcdigos
quedeuoacessosemfimparaosistemaremoto.Umavezqueowormganhouacessoaum
sistema,seriareplicarseeconsomempraticamentetodoputadordamquina
ingrecursos.Comoconsequncia,centenasdemquinasforamefetivamenteparalisado
atqueespecialistasemseguranapoderiadeterminaraformadeeliminaroworm.Oautordo

https://translate.googleusercontent.com/translate_f#202 223/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador

pgina296

261
Seo3.12RefernciasmemriaforadoslimiteseBufferOverflow

owormfoicapturadoeprocessado.Elefoicondenadoa3anosdeliberdadecondicional,
400horasdeserviocomunitrioeumamultadeUS$10.500.Athoje,noentanto,
aspessoascontinuamaencontrarfalhasdeseguranaemsistemasqueosdeixamvulnerveisa
ataquesdebufferoverflow.Issodestacaanecessidadedeprogramaocuidadosa.Qualquer
interfacecomoambienteexternodeveserfeita"provadebala",demodoquenenhum
comportamentoporumagenteexternopodelevarosistemaasecomportarmal.

AlmWormsevrus
Ambososvermesevrussopedaosdecdigoquetentamespalharseentrecomputadores.Como
descritoporSpafford[102],umsemfimumprogramaquepodeserexecutadoporsisepodepropagarumtrabalhototalmente
versodesimesmoparaoutrasmquinas.Umvrusumpedaodecdigoqueseagregaaoutrosprogramas,incluindo
sistemasoperacionais.Elenopodeserexecutadodeformaindependente.Naimprensa,otermo"vrus"utilizadoparasereferir
aumavariedadedediferentesestratgiasparaadifusoatacandocdigoentreossistemas,eporissovocvaiouvir
pessoasdizendo"vrus"paraoquemaispropriamentedeveserchamadode"verme".

3.12.1ataquesdeestourodebufferfrustrando
Ataquesdebufferoverflowtornaramsetodifundidaetercausadotantos
problemascomsistemasdecomputadorqueosmodernoscompiladoresesistemasoperacionais
implementarammecanismosparatornlomaisdifcildemontaressesataques
eparalimitarasmaneiraspelasquaisumintrusopodeassumirocontroledeumsistemaatravsdeumbuffer
ataquedeestouro.Nestaseo,apresentaremososquesofornecidospelorecente
versesdogccparaLinux.

RandomizationStack
Afimdeinserirocdigodeexploraoemumsistema,oatacanteprecisainjetartanto
ocdigo,bemcomoumponteiroparaessecdigocomopartedacadeiadeataque.Gerando
esteponteiroexigesaberoendereodapilhaondeacadeiaserlocalizado.
Historicamente,osendereosdepilhaparaumprogramaforamaltamenteprevisvel.Paratodos
sistemasqueexecutamamesmacombinaodeprogramaeversodosistemaoperacional,
oslocaisdepilhapermaneceramrelativamenteestveisemmuitasmquinas.Assim,porexemplo,se
uminvasorpodedeterminarosendereosdepilhausadosporumservidorWebcomum,
poderiaconceberumataquequeiriatrabalharemmuitasmquinas.usandoinfecciosa
doenacomoumaanalogia,muitossistemaseramvulnerveisaexatamenteamesmaestirpede
umvrus,umfenmenomuitasvezesreferidacomoumamonoculturadesegurana[93].
Aideiaderandomizaopilhafazercomqueaposiodapilhapodevariarde
umaexecuodeumprogramaparaoutro.Assim,mesmoquemuitasmquinasestorodandoidnticos
cdigo,todosestariamusandodiferentesendereosdepilha.Istoimplementadopor
atribuiodeumaquantidadealeatriadeespaoentre0enbytesnapilhano
inciodeumprograma,porexemplo,usandoafunoallocaatribuio,oqual
alocaoespaoparaumdeterminadonmerodebytesnapilha.Esteespaoalocado
nousadapeloprograma,maselefazcomquetodososlocaisdepilhaposterioresvariamde
umaexecuodeumprogramaparaoutro.Ointervalodeatribuionnecessitadesergrande
osuficienteparaobtervariaessuficientesnosendereospilha,aindapequenoosuficienteparaqueele
nodesperdiamuitoespaonoprograma.

pgina297

262 Captulo3MachineNvelRepresentaodeProgramas

Ocdigoaseguirmostraumamaneirasimplesparadeterminaroendereodepilha"tpico":

1 intmain(){
2 intlocal
3 printf("localem%p\n",elocal)
4 return0
5 }

Estecdigosimplesmenteimprimeoendereodeumavarivellocalnafunoprincipal.

https://translate.googleusercontent.com/translate_f#202 224/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
Executandoocdigode10.000vezesemumamquinaLinuxemmodode32bits,osendereos
variaramde0xff7fa7e0para0xffffd7e0,umagamadecercade223 .Porcomparao,
execuoemumsistemaLinuxmaisvelho,omesmoendereoocorreutodasasvezes.Corrida
nomodode64bitsnamquinamaisrecente,osendereosvarioude0x7fff00241914
para0x7ffffff98664,umagamadecercade232 .
randomizaopilhatornouseprticapadroemsistemasLinux.Isto
umdeumaclassemaiordetcnicasconhecidascomoespaodeendereorandomizaodisposio,
ouASLR[95].ComASLR,diferentespartesdoprograma,incluindooprograma
cdigo,cdigodebiblioteca,pilha,variveisglobaisemontodedados,socarregadosemdiferentes
regiesdememriacadavezqueumprogramaexecutado.Issosignificaqueumprogramaemexecuo
emumamquinatermuitodiferentesmapeamentosdeendereosdoqueomesmoprograma
rodandoemoutrasmquinas.Issopodefrustraralgumasformasdeataque.
Nogeral,noentanto,umintrusopersistentepodesuperarrandomizaoporbrute
fora,tentandorepetidamenteataquescomdiferentesendereos.Umtruquecomum
paraincluirumalongasequnciadenop(pronunciase"noop",abreviaode"nenhumaoperao")
instruesantesdeorealcdigodeexplorao.ExecutaestainstruonotemEF
fect,exceptoincrementarocontadordoprogramaparaaprximainstruo.contanto
comooatacantepodeadivinharumendereoemalgumlugardentrodessaseqncia,oprograma
serexecutadoatravsdaseqnciae,emseguida,bateuocdigodeexplorao.Otermocomumpara
estasequnciauma"noptren"[94],expressandoaideiadequeoprograma"slides"
atravsdasequncia.Semontamosumnoptrende256bytes,entoarandomizao
maisden=223 podeserquebradaporenumerar215 =32,768comeandoendereos,que
totalmentevivelparaumdeterminadoatacante.Paraocasode64bits,tentandoenumer
comi224 =16,777,216umpoucomaisdifcil.Podemosverquearandomizaopilha
eoutrosaspectosdaASLRpodeaumentaroesfororequeridoparaatacarcomsucessoum
sistema,e,portanto,reduzirconsideravelmenteataxaemqueumvrusousemfimpodeespalhar,
masnosepodepreverumacompletaproteco.

PrticaProblema3,44
Correndoonossocdigopilhadeverificaode10.000vezesemumsistemarodandoLinuxver
2.6.16sion,obtivemosendereosquevariamentreummnimode0xffffb754parauma
mximode0xffffd754.
A.Qualointervaloaproximadodeendereos?
B.Senstentouumestourodebuffercomumnoptrende128bytes,quantos
tentativasserianecessrioparatestarexaustivamentetodososendereosdepartida?

pgina298

263
Seo3.12RefernciasmemriaforadoslimiteseBufferOverflow

Figura3.33
organizaodepilhapara
echofunocomapilha quadrodepilha
protectorhabilitado.UMA parachamador
valorespecial"canrio" Endereodedevoluo
posicionadaentreamatriz Salvo%ebp %ebp
bufeoestadosalvo. Salvo%ebx
Ocdigoverificaocanrio
Canrio
valorparadeterminarse quadrodepilha
ounooestadopilhatem paraecho [7][6][5][4]
foicorrompido. [3][2][1][0]buf

PilhadeDetecodeCorrupo
Umasegundalinhadedefesaadesercapazdedetectarquandoumapilhafoicorrompido.
Nsvimosnoexemplodafunoecho(Figura3.31)queacorrupo
normalmenteocorrequandosuperaodoslimitesdeumbufferlocal.EmC,noh
maneiraconfivelparaevitarescreveralmdoslimitesdeumamatriz.Emvezdisso,podemostentar
paradetectarquandoumatalgravaoocorreuantesdequaisquerefeitosprejudiciaispodeocorrer.
Asversesrecentesdogccincorporarummecanismoconhecidocomoprotetordepilhaem
ocdigogeradoparadetectarestourosdebuffer.Aidiaarmazenarumespecialcanrio
valor4 noquadrodepilhaentrequalquerbufferlocaledorestodoestadodapilha,
comoilustradonaFigura3.33[32,94].Estevalorcanrio,tambmreferidocomoumguarda
valor,geradoaleatoriamentecadavezqueoprogramaexecutado,eporissonohfcil
caminhoparaumatacanteparadeterminaroque.Antesderestauraroestadoderegistoe
retornardafuno,oprogramaverificaseocanriofoialteradopor
algumaoperaodestafunoouumaquechamou.Seassimfor,oprogramaaborta
comumerro.
Asversesrecentesdogcctentardeterminarseumafunovulnervela

https://translate.googleusercontent.com/translate_f#202 225/226
27/02/2017 SistemasdeComputador:APerspectivadeUmprogramador
umestourodepilha,einserirestetipodedetecodeexcessoautomaticamente.Defato,
paraanossademonstraoanteriordoestourodepilha,tivemosquedaralinhadecomando
opo"fnostackprotector"paraevitargccdeinserirestecdigo.Quando
nscompilamosafunoechosemestaopoe,portanto,comprotetordepilha
ativado,obtemosaseguintecdigodemontagem:

1 eco:
2 pushl %ebp
3 movl %Esp,%ebp
4 pushl %ebx
5 subi US$20,%esp
6 movl %gs:20,%eax recuperarcanrio
7 movl %Eax,8(%ebp) Lojanapilha

4.Otermo"canrio"refereseutilizaohistricadestasavesparadetectarapresenadegasesperigosos
emminasdecarvo.

pgina299

264 Captulo3MachineNvelRepresentaodeProgramas

8 xorl %Eax,%eax Zeropararegisto

https://translate.googleusercontent.com/translate_f#202 226/226

Das könnte Ihnen auch gefallen