{"version":1,"pages":[{"id":"-Lif0irl9nLBxxSWx6oA","title":"Introdução","pathname":"/assembly","siteSpaceId":"sitesp_WYoQo","description":"Livro gratuito sobre Assembly x86 e x86-64"},{"id":"-LifEJ7s-Ui75DFGPo1O","title":"Conteúdo","pathname":"/assembly/conteudo","siteSpaceId":"sitesp_WYoQo","description":"Conteúdo que será apresentado neste livro"},{"id":"-LjM3ofUw6vQde7CX6FZ","title":"Como usar este livro","pathname":"/assembly/como-usar-este-livro","siteSpaceId":"sitesp_WYoQo","description":"Aprenda a aprender"},{"id":"-LifWCDcC-qNg28qa5-H","title":"A base","pathname":"/assembly/a-base","siteSpaceId":"sitesp_WYoQo","description":"Capítulo explicando os principais tópicos à respeito do Assembly e da arquitetura."},{"id":"-Lis0_1-yVlntJ3C0T0_","title":"Noção geral da arquitetura","pathname":"/assembly/a-base/arquitetura-x86","siteSpaceId":"sitesp_WYoQo","description":"Noção geral da arquitetura x86","breadcrumbs":[{"label":"A base"}]},{"id":"-LiuDrAKqYAosaVhk6th","title":"Modos de operação","pathname":"/assembly/a-base/modos-de-operacao","siteSpaceId":"sitesp_WYoQo","description":"Entendendo os diversos modos de operação presentes em processadores x86","breadcrumbs":[{"label":"A base"}]},{"id":"-LikHAOr_Ts1P3PH1XHy","title":"Sintaxe","pathname":"/assembly/a-base/sintaxe","siteSpaceId":"sitesp_WYoQo","description":"Entendendo a sintaxe da linguagem Assembly no nasm","breadcrumbs":[{"label":"A base"}]},{"id":"-Liv2b0wO-QroRa3xB-V","title":"Registradores de propósito geral","pathname":"/assembly/a-base/registradores-de-proposito-geral","siteSpaceId":"sitesp_WYoQo","description":"Entendendo os registradores da arquitetura x86-64","breadcrumbs":[{"label":"A base"}]},{"id":"-Lj6HYxABndFt5KzS85M","title":"Endereçamento","pathname":"/assembly/a-base/enderecamento","siteSpaceId":"sitesp_WYoQo","description":"Entendendo o acesso à memória RAM na prática","breadcrumbs":[{"label":"A base"}]},{"id":"-LjcdxWDNsC63jelMQm2","title":"Pilha","pathname":"/assembly/a-base/pilha","siteSpaceId":"sitesp_WYoQo","description":"Entendendo como a pilha (hardware stack) funciona na arquitetura x86","breadcrumbs":[{"label":"A base"}]},{"id":"-LjfQy0vG74YPBdBAxyw","title":"Saltos","pathname":"/assembly/a-base/saltos","siteSpaceId":"sitesp_WYoQo","description":"Desviando o fluxo de execução do código","breadcrumbs":[{"label":"A base"}]},{"id":"-LjqRKv4B1sd1ogUNdNB","title":"Procedimentos","pathname":"/assembly/a-base/procedimentos","siteSpaceId":"sitesp_WYoQo","description":"Entendendo funções em Assembly","breadcrumbs":[{"label":"A base"}]},{"id":"-LkWADpXqUnYSI0J-7H8","title":"Seções e símbolos","pathname":"/assembly/a-base/secoes-e-simbolos","siteSpaceId":"sitesp_WYoQo","description":"Entendendo um pouco do arquivo objeto","breadcrumbs":[{"label":"A base"}]},{"id":"-LkH5sj2wDCEX2HBnv42","title":"Instruções assembly x86","pathname":"/assembly/a-base/instrucoes","siteSpaceId":"sitesp_WYoQo","description":"Entendendo algumas instruções do Assembly x86","breadcrumbs":[{"label":"A base"}]},{"id":"-LkWTM1uwqjZmn58KIBf","title":"Instruções do NASM","pathname":"/assembly/a-base/instrucoes-do-nasm","siteSpaceId":"sitesp_WYoQo","description":"Um pouco sobre o uso do NASM","breadcrumbs":[{"label":"A base"}]},{"id":"-LkfaIl5qDlcLY0z97BN","title":"Pré-processador do NASM","pathname":"/assembly/a-base/pre-processador-do-nasm","siteSpaceId":"sitesp_WYoQo","description":"Aprendendo a usar o pré-processador do NASM","breadcrumbs":[{"label":"A base"}]},{"id":"-LkizwvwSAngc-Rr3hFk","title":"Syscall no Linux","pathname":"/assembly/a-base/syscall-no-linux","siteSpaceId":"sitesp_WYoQo","description":"Chamada de sistema no Linux","breadcrumbs":[{"label":"A base"}]},{"id":"-LkjBSYWfLUkHTO-6_4i","title":"Olá mundo no Linux","pathname":"/assembly/a-base/ola-mundo-no-linux","siteSpaceId":"sitesp_WYoQo","description":"Finalmente o Hello World.","breadcrumbs":[{"label":"A base"}]},{"id":"-LkWSbrWlKrLTuFt5Fnm","title":"Revisão","pathname":"/assembly/a-base/revisao","siteSpaceId":"sitesp_WYoQo","description":"Entenda tudo o que viu aqui","breadcrumbs":[{"label":"A base"}]},{"id":"-Lkorn6e8w68l21cWTp2","title":"Aprofundando em Assembly","pathname":"/assembly/aprofundando-em-assembly","siteSpaceId":"sitesp_WYoQo","description":"Aprendendo mais um pouco"},{"id":"-Lj03pRdL5zI_wcK_1Zf","title":"Registradores de segmento","pathname":"/assembly/aprofundando-em-assembly/registradores-de-segmento","siteSpaceId":"sitesp_WYoQo","description":"Segmentação da memória RAM.","breadcrumbs":[{"label":"Aprofundando em Assembly"}]},{"id":"-Lkxd9L6fDGUQe2O3WpN","title":"CALL e RET","pathname":"/assembly/aprofundando-em-assembly/call-e-ret","siteSpaceId":"sitesp_WYoQo","description":"Entendendo detalhadamente as instruções CALL e RET.","breadcrumbs":[{"label":"Aprofundando em Assembly"}]},{"id":"-MfT2gzKC94xlbOIyN6G","title":"Position-independent executable","pathname":"/assembly/aprofundando-em-assembly/position-independent-executable","siteSpaceId":"sitesp_WYoQo","description":"Explicando PIE e ASLR","breadcrumbs":[{"label":"Aprofundando em Assembly"}]},{"id":"-Ll7KM0Xy2208Wa5n2BM","title":"Atributos","pathname":"/assembly/aprofundando-em-assembly/atributos","siteSpaceId":"sitesp_WYoQo","description":"Explicando os atributos das instruções da arquitetura x86.","breadcrumbs":[{"label":"Aprofundando em Assembly"}]},{"id":"-LlDbOerNoy3T9lzdHSw","title":"Prefixos","pathname":"/assembly/aprofundando-em-assembly/prefixos","siteSpaceId":"sitesp_WYoQo","description":"Modificando os atributos da operação.","breadcrumbs":[{"label":"Aprofundando em Assembly"}]},{"id":"-LlILCkKp4ZTalJY_3qZ","title":"Flags do processador","pathname":"/assembly/aprofundando-em-assembly/flags-do-processador","siteSpaceId":"sitesp_WYoQo","description":"Registrador EFLAGS e FLAGS.","breadcrumbs":[{"label":"Aprofundando em Assembly"}]},{"id":"-LlOq38Duciv99bob0E7","title":"Instruções condicionais","pathname":"/assembly/aprofundando-em-assembly/instrucoes-condicionais","siteSpaceId":"sitesp_WYoQo","description":"Entendendo as instruções condicionais e as status flags.","breadcrumbs":[{"label":"Aprofundando em Assembly"}]},{"id":"-LktMZb8dT7MB-spVn8K","title":"Programando no MS-DOS","pathname":"/assembly/aprofundando-em-assembly/programando-no-ms-dos","siteSpaceId":"sitesp_WYoQo","description":"Conhecendo o ambiente do MS-DOS.","breadcrumbs":[{"label":"Aprofundando em Assembly"}]},{"id":"-LqHXc5bLbgofuUF_CGW","title":"Interrupções de software e exceções","pathname":"/assembly/aprofundando-em-assembly/interrupcoes-de-software","siteSpaceId":"sitesp_WYoQo","description":"Interrupções e exceções sendo entendidas na prática.","breadcrumbs":[{"label":"Aprofundando em Assembly"}]},{"id":"-M31HdmIv-_M4zD1HpRL","title":"Procedimentos do BIOS","pathname":"/assembly/aprofundando-em-assembly/procedimentos-do-bios","siteSpaceId":"sitesp_WYoQo","description":"Existem algumas interrupções que são criadas pelo próprio BIOS do sistema. Vamos ver algumas delas aqui.","breadcrumbs":[{"label":"Aprofundando em Assembly"}]},{"id":"-M3sHnG9X1A46bY_vaSf","title":"Usando instruções da FPU","pathname":"/assembly/aprofundando-em-assembly/usando-instrucoes-da-fpu","siteSpaceId":"sitesp_WYoQo","description":"Aprendendo a usar o x87 para fazer cálculos.","breadcrumbs":[{"label":"Aprofundando em Assembly"}]},{"id":"-MfFyR9UXDxFb6ISIDy9","title":"Entendendo SSE","pathname":"/assembly/aprofundando-em-assembly/entendendo-sse","siteSpaceId":"sitesp_WYoQo","description":"Aprendendo sobre SIMD, SSE e registradores XMM.","breadcrumbs":[{"label":"Aprofundando em Assembly"}]},{"id":"-MfJxKsqr-jqo1Jx111d","title":"Instruções de movimentação de dados","pathname":"/assembly/aprofundando-em-assembly/entendendo-sse/instrucoes-de-movimentacao-de-dados","siteSpaceId":"sitesp_WYoQo","description":"Listando algumas instruções de movimentação de dados do SSE.","breadcrumbs":[{"label":"Aprofundando em Assembly"},{"label":"Entendendo SSE"}]},{"id":"-MfJxnzElI5R6uPgQe9H","title":"Instruções aritméticas","pathname":"/assembly/aprofundando-em-assembly/entendendo-sse/instrucoes-aritmeticas","siteSpaceId":"sitesp_WYoQo","description":"Instruções de operação aritmética do SSE.","breadcrumbs":[{"label":"Aprofundando em Assembly"},{"label":"Entendendo SSE"}]},{"id":"-MfJvm1MnAXhgGq-AQur","title":"Instruções lógicas e de comparação","pathname":"/assembly/aprofundando-em-assembly/entendendo-sse/instrucoes-logicas-e-de-comparacao","siteSpaceId":"sitesp_WYoQo","description":"","breadcrumbs":[{"label":"Aprofundando em Assembly"},{"label":"Entendendo SSE"}]},{"id":"-MfKH6scWw66uKT3NAXL","title":"Instruções com inteiros 128-bit","pathname":"/assembly/aprofundando-em-assembly/entendendo-sse/instrucoes-com-inteiros-128-bit","siteSpaceId":"sitesp_WYoQo","description":"","breadcrumbs":[{"label":"Aprofundando em Assembly"},{"label":"Entendendo SSE"}]},{"id":"-MfNfIHq5KXCKEpYNAti","title":"Instruções de conversão","pathname":"/assembly/aprofundando-em-assembly/entendendo-sse/instrucoes-de-conversao","siteSpaceId":"sitesp_WYoQo","description":"Convertendo valores entre float, double e inteiro.","breadcrumbs":[{"label":"Aprofundando em Assembly"},{"label":"Entendendo SSE"}]},{"id":"-MfULIzkOHmXDbvc58cf","title":"Programando junto com C","pathname":"/assembly/programando-junto-com-c","siteSpaceId":"sitesp_WYoQo","description":"Aprendendo a mesclar Assembly e C"},{"id":"-MfUQRq7vGD2suErULeE","title":"Sintaxe do GAS","pathname":"/assembly/programando-junto-com-c/sintaxe-do-gas","siteSpaceId":"sitesp_WYoQo","description":"Aprendendo a sintaxe AT&T e a usar o GAS","breadcrumbs":[{"label":"Programando junto com C"}]},{"id":"-MfYL3mGG6x33oxaHYhb","title":"Convenção de chamada da System V ABI","pathname":"/assembly/programando-junto-com-c/convencao-de-chamada-da-system-v-abi","siteSpaceId":"sitesp_WYoQo","description":"Aprendendo sobre a convenção de chamada do C usada no Linux.","breadcrumbs":[{"label":"Programando junto com C"}]},{"id":"-Mfj2F-r2jqki37S91L2","title":"Convenções de chamada no Windows","pathname":"/assembly/programando-junto-com-c/convencoes-de-chamada-no-windows","siteSpaceId":"sitesp_WYoQo","description":"Aprendendo sobre as convenções de chamada usadas no Windows (x64, cdecl e stdcall).","breadcrumbs":[{"label":"Programando junto com C"}]},{"id":"-Mg2qwZm9TRz16t_X9t3","title":"Variáveis em C","pathname":"/assembly/programando-junto-com-c/variaveis-em-c","siteSpaceId":"sitesp_WYoQo","description":"Entendendo como variáveis em C são representadas em Assembly.","breadcrumbs":[{"label":"Programando junto com C"}]},{"id":"-MgTiQ5kOCtPFd7r-Iqs","title":"Funções em C","pathname":"/assembly/programando-junto-com-c/funcoes-em-c","siteSpaceId":"sitesp_WYoQo","description":"Entendendo as funções em C do ponto de vista do Assembly.","breadcrumbs":[{"label":"Programando junto com C"}]},{"id":"-MgnX6wyM74tR9y32_6n","title":"Ambiente hosted","pathname":"/assembly/programando-junto-com-c/ambiente-hosted","siteSpaceId":"sitesp_WYoQo","description":"Entendendo a execução de código em C no ambiente hosted.","breadcrumbs":[{"label":"Programando junto com C"}]},{"id":"-MgrrlPZDiK46BIs4qwH","title":"Ambiente freestanding","pathname":"/assembly/programando-junto-com-c/ambiente-freestanding","siteSpaceId":"sitesp_WYoQo","description":"Entendendo a execução de código em C no ambiente freestanding.","breadcrumbs":[{"label":"Programando junto com C"}]},{"id":"-Mgw2SgE7Ass0KC_qjfy","title":"Inline Assembly no GCC","pathname":"/assembly/programando-junto-com-c/inline-assembly-no-gcc","siteSpaceId":"sitesp_WYoQo","description":"Aprendendo a usar o inline Assembly do compilador GCC.","breadcrumbs":[{"label":"Programando junto com C"}]},{"id":"-Mh1AgeKfDQI1zYZ9xpl","title":"Instruções intrínsecas","pathname":"/assembly/programando-junto-com-c/instrucoes-intrinsecas","siteSpaceId":"sitesp_WYoQo","description":"Aprendendo sobre as instruções intrínsecas na arquitetura x86-64","breadcrumbs":[{"label":"Programando junto com C"}]},{"id":"-MhegdziIdh93Xl8P6Qo","title":"Depuração de código","pathname":"/assembly/depuracao-de-codigo","siteSpaceId":"sitesp_WYoQo","description":"Aprendendo a depurar código em nível de Assembly"},{"id":"-MhegkN6fR3rxMIGh1YH","title":"Entendendo os depuradores","pathname":"/assembly/depuracao-de-codigo/entendendo-os-depuradores","siteSpaceId":"sitesp_WYoQo","description":"Entendendo os conceitos principais sobre um depurador e como eles funcionam.","breadcrumbs":[{"label":"Depuração de código"}]},{"id":"-Mi5GPV7jtPb-O40Ipd3","title":"Depurando com o GDB","pathname":"/assembly/depuracao-de-codigo/depurando-com-o-gdb","siteSpaceId":"sitesp_WYoQo","description":"Aprendendo a usar o depurador GDB do projeto GNU.","breadcrumbs":[{"label":"Depuração de código"}]},{"id":"DsLSxo2BgGkZZgca8cjj","title":"Depurando com o Dosbox","pathname":"/assembly/depuracao-de-codigo/depurando-com-o-dosbox","siteSpaceId":"sitesp_WYoQo","description":"Aprendendo a usar o depurador do Dosbox","breadcrumbs":[{"label":"Depuração de código"}]},{"id":"AfBM4PvRPqYLtxxgHUhi","title":"Código de máquina","pathname":"/assembly/apendices/codigo-de-maquina","siteSpaceId":"sitesp_WYoQo","description":"Entendendo o código de máquina x86-64","breadcrumbs":[{"label":"Apêndices"}]},{"id":"qgWBnl1vK5e8bRRVEObA","title":"Formato das instruções","pathname":"/assembly/apendices/codigo-de-maquina/formato-das-instrucoes","siteSpaceId":"sitesp_WYoQo","description":"O formato das instruções do código de máquina.","breadcrumbs":[{"label":"Apêndices"},{"label":"Código de máquina"}]},{"id":"yF8qGSBO4YPCDCTiUr2Q","title":"Atributos e prefixos","pathname":"/assembly/apendices/codigo-de-maquina/atributos-e-prefixos","siteSpaceId":"sitesp_WYoQo","description":"Entendendo os prefixos no código de máquina.","breadcrumbs":[{"label":"Apêndices"},{"label":"Código de máquina"}]},{"id":"yQVOiRaYybHY4I9Tea0U","title":"Immediate","pathname":"/assembly/apendices/codigo-de-maquina/immediate","siteSpaceId":"sitesp_WYoQo","description":"Campo immediate na instrução do código de máquina.","breadcrumbs":[{"label":"Apêndices"},{"label":"Código de máquina"}]},{"id":"liA8Y0QFYb5bULk7OunD","title":"Displacement","pathname":"/assembly/apendices/codigo-de-maquina/displacement","siteSpaceId":"sitesp_WYoQo","description":"Campo displacement na instrução do código de máquina.","breadcrumbs":[{"label":"Apêndices"},{"label":"Código de máquina"}]},{"id":"hukJf9XWxglR1RvuxX1d","title":"ModR/M e SIB","pathname":"/assembly/apendices/codigo-de-maquina/modr-m-e-sib","siteSpaceId":"sitesp_WYoQo","description":"Entendendo os byte ModR/M e SIB.","breadcrumbs":[{"label":"Apêndices"},{"label":"Código de máquina"}]},{"id":"tZcAnS0SF2ZwmqLBqCOo","title":"Opcode","pathname":"/assembly/apendices/codigo-de-maquina/opcode","siteSpaceId":"sitesp_WYoQo","description":"Entendendo o opcode da instrução.","breadcrumbs":[{"label":"Apêndices"},{"label":"Código de máquina"}]},{"id":"zc42HWR58lYEVvyEIsbi","title":"Prefixo REX","pathname":"/assembly/apendices/codigo-de-maquina/prefixo-rex","siteSpaceId":"sitesp_WYoQo","description":"Entendendo o prefixo REX no x86-64.","breadcrumbs":[{"label":"Apêndices"},{"label":"Código de máquina"}]},{"id":"Q6aigICLm6yM6yWbWHtH","title":"Codificação dos registradores","pathname":"/assembly/apendices/codigo-de-maquina/codificacao-dos-registradores","siteSpaceId":"sitesp_WYoQo","description":"Entendendo a codificação dos registradores em 16-bit, 32-bit e 64-bit","breadcrumbs":[{"label":"Apêndices"},{"label":"Código de máquina"}]},{"id":"-LkjXqAiQkVoOSx6La1Q","title":"TO DO","pathname":"/assembly/metadados/to-do","siteSpaceId":"sitesp_WYoQo","description":"Ainda não acabou.","breadcrumbs":[{"label":"Metadados"}]},{"id":"-MgLSPdus1PLM8DwctEv","title":"Referências","pathname":"/assembly/metadados/referencias","siteSpaceId":"sitesp_WYoQo","description":"","breadcrumbs":[{"label":"Metadados"}]}]}