{"id":2665,"date":"2018-09-01T14:00:00","date_gmt":"2018-09-01T17:00:00","guid":{"rendered":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/?p=2665"},"modified":"2025-09-02T13:45:25","modified_gmt":"2025-09-02T16:45:25","slug":"mars-ide-para-programacao-em-assembl","status":"publish","type":"post","link":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/2018\/09\/01\/mars-ide-para-programacao-em-assembl","title":{"rendered":"MARS: IDE para programa\u00e7\u00e3o em Assembly"},"content":{"rendered":"\n<section id=\"h.7a4292dd6ad776e6_8\" class=\"yaqOZd\">\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_5\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">Nesta edi\u00e7\u00e3o do PET Reda\u00e7\u00e3o, vamos falar um pouquinho sobre programa\u00e7\u00e3o de baixo n\u00edvel. Isso quer dizer que a programa\u00e7\u00e3o \u00e9 ruim? N\u00e3o, nada disso! Programa\u00e7\u00e3o de baixo n\u00edvel se trata de usarmos uma linguagem de programa\u00e7\u00e3o que segue as caracter\u00edsticas de estrutura do computador. Para isso, utilizaremos o software MARS <em>(MIPS Assembler and Runtime Simulator) <\/em>e a arquitetura MIPS32.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">MARS \u00e9 um ambiente de desenvolvimento integrado (IDE) destinado a estudos da arquitetura MIPS monociclo. Em conjunto com o software, nas disciplinas de Organiza\u00e7\u00e3o de Computadores e Arquitetura de Computadores, \u00e9 utilizado o livro do Patterson, Organiza\u00e7\u00e3o e Arquitetura de Computadores.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">A ferramenta MARS \u00e9 um programa desenvolvido em Java e a partir do release 4.0, cont\u00e9m 155 instru\u00e7\u00f5es b\u00e1sicas da arquitetura MIPS, aproximadamente 370 pseudo-instru\u00e7\u00f5es, 17 fun\u00e7\u00f5es <em>syscalls <\/em>para o console e entrada e sa\u00edda de dados, outras 22 fun\u00e7\u00f5es <em>syscalls<\/em> para outros usos como o <em>MIDI output<\/em>, para as sa\u00eddas de m\u00eddia, gera\u00e7\u00e3o de n\u00fameros aleat\u00f3rios, entre outras tantas fun\u00e7\u00f5es que vamos ver ao longo do texto.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Como podemos ver com essa breve introdu\u00e7\u00e3o, a ferramenta \u00e9 bem completa e proporciona ao usu\u00e1rio uma \u00f3tima no\u00e7\u00e3o do que acontece no processador. Ent\u00e3o, basta fazer o download do software e come\u00e7ar a programar em Assembly.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.7a4292dd6ad776e6_13\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-II5mzb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_9\" class=\"hJDwNd-AhqUyc-II5mzb pSzOP-AhqUyc-II5mzb jXK9ad D2fZ2 OjCsFc wHaque\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter wp-image-2860 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars1.png\" alt=\"\" width=\"308\" height=\"377\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars1.png 308w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars1-245x300.png 245w\" sizes=\"(max-width: 308px) 100vw, 308px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-OwsYgb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc yYI8W \">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_19\" class=\"hJDwNd-AhqUyc-OwsYgb jXK9ad D2fZ2 OjCsFc GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">Assembly \u00e9 o que, no mundo da computa\u00e7\u00e3o, chamamos de linguagem de montagem. \u00c9, basicamente, uma linguagem intermedi\u00e1ria entre as linguagens de programa\u00e7\u00e3o que n\u00f3s usu\u00e1rios usamos e o que o computador interpreta.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"oKdM2c\">\n<div id=\"h.7a4292dd6ad776e6_21\" class=\"hJDwNd-AhqUyc-OwsYgb jXK9ad D2fZ2 wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">O compilador (GCC, por exemplo) interpreta o nosso c\u00f3digo em linguagem de alto n\u00edvel (C, C++) e gera um arquivo do programa traduzido para o assembly da arquitetura em que o programa est\u00e1 sendo rodado. N\u00f3s podemos gerar o arquivo do assembly com o GCC mandando a flag -S junto do c\u00f3digo para compilar. Nesse caso, estaremos gerando um assembly da arquitetura x86, que \u00e9 a arquitetura da maioria dos computadores de hoje em dia.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.7a4292dd6ad776e6_29\" class=\"yaqOZd\">\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_26\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">A imagem acima mostra exatamente o que acontece com um programa quando ele \u00e9 compilado. O compilador recebe o c\u00f3digo fonte (arquivo.c) e gera um c\u00f3digo assembly (arquivo.s) a partir dele. Depois, o Assembler vai interpretar o c\u00f3digo assembly do c\u00f3digo fonte e, com as bibliotecas, vai gerar um c\u00f3digo objeto (arquivo.o). Esse c\u00f3digo objeto \u00e9 um aglomerado de 0s e 1s referentes ao nosso programa. Depois do c\u00f3digo objeto ser montado, o Linker vai pegar todos os c\u00f3digos objetos que o programa tiver, caso tenha mais do que um, e vai montar um c\u00f3digo execut\u00e1vel (arquivo.exe). \u00c9 basicamente isso o que acontece com um programa ao ser compilado.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">O foco desse texto \u00e9 aprender e entender como funciona um c\u00f3digo Assembly. Por isso vamos nos basear no software MARS e na arquitetura MIPS32 para isso. O software est\u00e1 dispon\u00edvel para download no site dos desenvolvedores logo abaixo.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\"><a class=\"XqQF9c\" href=\"http:\/\/www.google.com\/url?q=http%3A%2F%2Fwww.cs.missouristate.edu%2FMARS%2F.&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNEV6VyzXNNEhDiDZM4gfIjxSG-n-A\" target=\"_blank\" rel=\"noopener noreferrer\">Link para download do MARS.<\/a><\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Assim que voc\u00ea abrir o MARS, vai se dar de cara com uma interface bem comum, at\u00e9. O software tem uma estrutura bem parecida com outras IDEs. Como a ferramenta \u00e9 feita para fins educativos da arquitetura MIPS32, a IDE tem alguns elementos bem peculiares.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.7a4292dd6ad776e6_33\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_30\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img decoding=\"async\" class=\"aligncenter wp-image-2861 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars2.png\" alt=\"\" width=\"1280\" height=\"685\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars2.png 1280w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars2-300x161.png 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars2-1024x548.png 1024w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars2-768x411.png 768w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.7a4292dd6ad776e6_37\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_34\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">Em nossa direita \u00e9 poss\u00edvel ver uma lista de elementos estranhos, com os cabe\u00e7alhos \u201cName\u201d, \u201cNumber\u201d e \u201cValor\u201d. Cada elemento dessa lista representa um registrador e, essa lista, est\u00e1 representando o banco de registradores do processador.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Os campos \u201cName\u201d e \u201cNumber\u201d servir\u00e3o para referenciarmos os nossos registradores no nosso c\u00f3digo, j\u00e1 o campo \u201cValue\u201d, armazenar\u00e1 algum dado que quisermos colocar.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Abaixo do espa\u00e7o azul h\u00e1 uma caixa em branco com o bot\u00e3o \u201cClear\u201d \u00e0 sua esquerda. Esta caixa \u00e9 o console da IDE. Nela, vamos receber respostas do programa, solicitar entrada de dados pelo console e afins.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">E por \u00faltimo, mas n\u00e3o menos importante, temos esse espa\u00e7o em azul que \u00e9 o editor de texto.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Para criarmos um novo arquivo, basta clicarmos no primeiro \u00edcone da tabela de acesso r\u00e1pido, ou ir em \u2018File&gt;New\u2019. Ap\u00f3s criarmos um arquivo em branco, o nosso editor vai ficar desse jeito.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.7a4292dd6ad776e6_41\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_38\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img decoding=\"async\" class=\"aligncenter wp-image-2862 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars3.png\" alt=\"\" width=\"1280\" height=\"679\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars3.png 1280w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars3-300x159.png 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars3-1024x543.png 1024w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars3-768x407.png 768w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.7a4292dd6ad776e6_56\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-qWD73c purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_65\" class=\"hJDwNd-AhqUyc-qWD73c jXK9ad D2fZ2 OjCsFc wHaque\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2863 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars4.png\" alt=\"\" width=\"777\" height=\"593\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars4.png 777w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars4-300x229.png 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars4-768x586.png 768w\" sizes=\"(max-width: 777px) 100vw, 777px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-qWD73c purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc yYI8W \">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_62\" class=\"hJDwNd-AhqUyc-qWD73c jXK9ad D2fZ2 OjCsFc GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">Com um arquivo criado na IDE, podemos come\u00e7ar a escrever alguns c\u00f3digos. Para ajudarmos-nos, \u00e9 aconselh\u00e1vel usar o <em>Help<\/em>. Apertando <strong>F1<\/strong> temos acesso a ele.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"oKdM2c\">\n<div id=\"h.7a4292dd6ad776e6_64\" class=\"hJDwNd-AhqUyc-qWD73c jXK9ad D2fZ2 wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">A janela de <em>Help<\/em> \u00e9 essencial no aprendizado da ferramenta pois nele obtemos acesso a todas aquelas instru\u00e7\u00f5es as quais comentei no come\u00e7o do texto. Obtemos acesso \u00e0s <em>syscalls<\/em>, \u00e0s diretivas, \u00e0s pseudo-instru\u00e7\u00f5es e at\u00e9 \u00e0s macros. N\u00e3o veremos tudo isso nesse texto, mas veremos uma boa parte.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Ent\u00e3o, como come\u00e7amos a escrever um c\u00f3digo Assembly? Para come\u00e7armos com um c\u00f3digo assembly, temos que entender como as instru\u00e7\u00f5es funcionam.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.7a4292dd6ad776e6_69\" class=\"yaqOZd\">\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_66\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">Em uma instru\u00e7\u00e3o temos dois elementos principais: O mnem\u00f4nico e os operandos.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">O mnem\u00f4nico \u00e9 o \u201cnome\u201d da instru\u00e7\u00e3o, vamos dizer assim, e os operandos s\u00e3o os nomes ou n\u00fameros dos registradores nos quais estamos operando.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Um exemplo de instru\u00e7\u00e3o \u00e9 o \u2018add\u2019. Essa instru\u00e7\u00e3o realiza uma soma de dois registradores e armazena em um terceiro registrador. A instru\u00e7\u00e3o fica assim:<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">add $t2, $t0, $t1<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Nesse caso, estamos fazendo uma soma do conte\u00fado do registrador $t0 com o conte\u00fado do registrador $t1 e armazenando o resultado em $t2. O registrador que recebe o resultado \u00e9 o primeiro a ser referenciado na express\u00e3o, seguido pelos registradores que far\u00e3o a opera\u00e7\u00e3o.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">J\u00e1 sabemos como funciona uma instru\u00e7\u00e3o de soma, vamos coloc\u00e1-la na ferramenta e testar para ver o que vai dar.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.7a4292dd6ad776e6_70\" class=\"yaqOZd\">\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc yYI8W \">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_76\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">Antes da minha opera\u00e7\u00e3o de soma, coloquei duas outras instru\u00e7\u00f5es para carregar valores nos registradores $t0 e $t1. Ap\u00f3s carregar esses dois valores nos meus registradores, eu posso realizar a instru\u00e7\u00e3o add e ver o que vai acontecer.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"oKdM2c\">\n<div id=\"h.7a4292dd6ad776e6_80\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2864 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars5.png\" alt=\"\" width=\"1280\" height=\"687\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars5.png 1280w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars5-300x161.png 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars5-1024x550.png 1024w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars5-768x412.png 768w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"oKdM2c\">\n<div id=\"h.7a4292dd6ad776e6_78\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">Para compilar o c\u00f3digo que estamos escrevendo, primeiro \u00e9 necess\u00e1rio salvar o arquivo. Ap\u00f3s salvar o arquivo, para compilar basta apertar <strong>F3<\/strong> ou ir em \u2018Assemble&gt;Run\u2019.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.7a4292dd6ad776e6_92\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_89\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2865 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars6.png\" alt=\"\" width=\"1280\" height=\"684\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars6.png 1280w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars6-300x160.png 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars6-1024x547.png 1024w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars6-768x410.png 768w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.7a4292dd6ad776e6_96\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_93\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">Ap\u00f3s compilar o programa, abre uma nova tela com esses elementos mostrados acima. Nesta tela podemos ver que temos outros dois segmentos que n\u00e3o conhec\u00edamos, os segmentos de texto e de dados. O segmento de texto cont\u00e9m todas as nossas instru\u00e7\u00f5es do nosso c\u00f3digo. Cada instru\u00e7\u00e3o ter\u00e1 um endere\u00e7o, um c\u00f3digo e para facilitar a compreens\u00e3o na ferramenta, temos o campo \u2018Source\u2019, que cont\u00e9m exatamente o que est\u00e1 marcado naquela linha. J\u00e1 o segmento de dados, representa a nossa mem\u00f3ria. Mais adiante, nesse texto, veremos instru\u00e7\u00f5es que ir\u00e3o gravar na mem\u00f3ria.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Podemos ver na imagem acima que nosso segmento de texto cont\u00e9m tr\u00eas instru\u00e7\u00f5es a serem executadas. E s\u00e3o exatamente as instru\u00e7\u00f5es que colocamos no nosso editor de texto, l\u00e1 na outra tela. \u00c9 poss\u00edvel acessar aquela tela apenas clicando no bot\u00e3o \u2018Edit\u2019, bem \u00e0 esquerda , abaixo da barra de acesso r\u00e1pido.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Mas e agora, como fazemos para ver o programa sendo executado? Bom, h\u00e1 duas formas de executar o programa. Podemos execut\u00e1-lo instru\u00e7\u00e3o a instru\u00e7\u00e3o ou podemos execut\u00e1-lo normal. Se apertarmos a tecla <strong>F5<\/strong> ou formos em \u2018Run&gt;Go\u2019, veremos que o programa ir\u00e1 executar at\u00e9 o fim, sem parar, mostrando os resultados no nosso banco de registradores \u00e0 direita do segmento de dados.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Os valores de $t0, $t1 e $t2 foram alterados para os valores que colocamos em $t0 e $t1, e o valor da soma em $t2.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Se pressionarmos a tecla <strong>F7 <\/strong>ou acessar no menu a op\u00e7\u00e3o Run&gt;Step, executaremos uma instru\u00e7\u00e3o de cada vez. Executar desta maneira \u00e9 muito bom para entender exatamente o que est\u00e1 acontecendo no processador. \u00c9 bastante \u00fatil, tamb\u00e9m, para debugar c\u00f3digo, pois veremos todas as instru\u00e7\u00f5es do programa sendo executadas uma por vez, conseguindo assim detectar o bug para corrigir exatamente onde nos \u00e9 conveniente.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Agora voltando ao nosso c\u00f3digo, vemos que ele parece estar \u201csolto\u201d ali no editor de texto, n\u00e3o \u00e9? Pois bem, a partir de agora utilizaremos as diretivas para organizar o nosso c\u00f3digo.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.7a4292dd6ad776e6_97\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc yYI8W \">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_103\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">As diretivas servir\u00e3o para dizer ao assembler onde ele dever\u00e1 escrever aquele dado.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">As duas principais diretivas s\u00e3o \u2018.text\u2019 e \u2018.data\u2019, e servir\u00e3o para dizer se estamos escrevendo c\u00f3digo para o segmento de texto ou para o segmento de dados, respectivamente. Podemos consultar todas as diretivas do MIPS no <em>Help<\/em> pressionando <strong>F1<\/strong> e indo na aba \u2018<em>Directives<\/em>\u2019.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Para entendermos melhor o que essas duas diretivas fazem, vamos olhar outro c\u00f3digo. Vejamos este c\u00f3digo de <strong>Hello World! <\/strong>em Assembly.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"oKdM2c\">\n<div id=\"h.7a4292dd6ad776e6_106\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2866 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars7.png\" alt=\"\" width=\"1280\" height=\"684\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars7.png 1280w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars7-300x160.png 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars7-1024x547.png 1024w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars7-768x410.png 768w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"oKdM2c\">\n<div id=\"h.7a4292dd6ad776e6_105\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">O que h\u00e1 de novo neste c\u00f3digo? Podemos ver as diretivas, como explicado anteriormente, mas tamb\u00e9m podemos ver novos elementos. Temos a instru\u00e7\u00e3o la, que vai nos servir para armazenar o endere\u00e7o de algum elemento em um registrador espec\u00edfico. Nesse caso, estamos pegando o endere\u00e7o do r\u00f3tulo \u2018printHelloWorld\u2019. Um r\u00f3tulo \u00e9 como se fosse uma marca\u00e7\u00e3o daquele endere\u00e7o espec\u00edfico. E com essa marca\u00e7\u00e3o, podemos acessar esse endere\u00e7o por esse r\u00f3tulo.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Depois, temos a primeira <em>syscall<\/em>. Uma <em>syscall<\/em> \u00e9 uma chamada do sistema, literalmente falando. Como ela funciona? Essa chamada do sistema tem dois registradores padr\u00e3o de argumentos. O $a0 e o $v0. Para essa <em>syscall<\/em>, que \u00e9 de imprimir uma string no console, enviamos o endere\u00e7o da string que queremos imprimir para $a0 e o c\u00f3digo da opera\u00e7\u00e3o enviamos para $v0. Esse c\u00f3digo da opera\u00e7\u00e3o podemos consultar no <em>Help<\/em> apertando <strong>F1<\/strong> e indo na aba <em>Syscalls<\/em>. Ap\u00f3s enviarmos os valores para os registradores de argumento da <em>syscall<\/em>, fazemos uma chamada com o comando syscall no nosso c\u00f3digo.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Tamb\u00e9m temos uma nova diretiva, o .asciiz, que \u00e9 a diretiva respons\u00e1vel por representar os caracteres da string a seguir em ASCII com a termina\u00e7\u00e3o \u2018\\0\u2019.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Fora os novos elementos do c\u00f3digo, \u00e9 vis\u00edvel que ele est\u00e1 melhor estruturado, separando o que \u00e9 do segmento de texto e o que \u00e9 do segmento de dados.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Ap\u00f3s compilar o nosso c\u00f3digo, na nossa tela de execu\u00e7\u00e3o teremos algo diferente. O nosso segmento de dados n\u00e3o est\u00e1 mais vazio. Agora, cont\u00e9m nele a nossa string <strong>\u201cHello World!\u201d<\/strong>, que enviamos com a diretiva .asciiz. Podemos executar o programa pressionando o <strong>F5<\/strong> ou atrav\u00e9s do <strong>F7<\/strong> e ver como o processador faz a execu\u00e7\u00e3o de cada instru\u00e7\u00e3o.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Se prestar aten\u00e7\u00e3o, veremos que no segmento de dados existem alguns valores bem grandes nos primeiros endere\u00e7os. E se clicarmos no ASCII, abaixo do segmento de dados, veremos estes valores em ASCII. Nos primeiros endere\u00e7os est\u00e3o armazenados todos os caracteres em c\u00f3digo ASCII da nossa string.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.7a4292dd6ad776e6_88\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_85\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2867 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars8.png\" alt=\"\" width=\"1280\" height=\"687\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars8.png 1280w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars8-300x161.png 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars8-1024x550.png 1024w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars8-768x412.png 768w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.7a4292dd6ad776e6_111\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_108\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">Ap\u00f3s o t\u00e9rmino da execu\u00e7\u00e3o teremos no nosso console a string que mandamos imprimir e tamb\u00e9m poderemos ver dois valores em nossos registradores $a0 e $v0. Em $a0 observamos o valor 0x10010000, que corresponde ao endere\u00e7o de come\u00e7o da nossa string e, em $v0, o valor 0x00000004, que corresponde ao valor 4 que colocamos nele para executar a opera\u00e7\u00e3o de imprimir string.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">At\u00e9 agora vimos como o software MARS funciona, como as instru\u00e7\u00f5es da arquitetura MIPS funcionam e outras fun\u00e7\u00f5es relacionadas a entrada e sa\u00edda de dados. O que veremos agora ser\u00e3o as estruturas b\u00e1sicas de um programa representado em Assembly.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.7a4292dd6ad776e6_112\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc yYI8W \">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_118\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\"><strong>Estruturas sequenciais:<\/strong><\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">As estruturas sequenciais s\u00e3o representadas da mesma forma que estruturamos essas em uma linguagem do paradigma procedural. Cada instru\u00e7\u00e3o \u00e9 posicionada uma abaixo da outra. Vamos ver um exemplo de uma estrutura sequencial em Assembly.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"oKdM2c\">\n<div id=\"h.7a4292dd6ad776e6_122\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2868 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars9.jpg\" alt=\"\" width=\"1280\" height=\"688\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars9.jpg 1280w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars9-300x161.jpg 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars9-1024x550.jpg 1024w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars9-768x413.jpg 768w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"oKdM2c\">\n<div id=\"h.7a4292dd6ad776e6_120\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">No c\u00f3digo acima, vemos que no c\u00f3digo escrito em C, estamos atribuindo valores para tais vari\u00e1veis, operando estes valores e atribuindo para outras vari\u00e1veis. Como \u00e9 poss\u00edvel ver, no assembly \u00e9 bem parecido. Nesse caso, os nossos registradores $t0, $t1, $t2, $t3, e $t4 representam as vari\u00e1veis \u2018a\u2019, \u2018b\u2019, \u2018c\u2019, \u2018d\u2019, e \u2018e\u2019, respectivamente.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.7a4292dd6ad776e6_123\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc yYI8W \">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_129\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\"><strong>Estruturas condicionais:<\/strong><\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Nas estruturas condicionais temos os \u2018<em>if\u2019s\u2019<\/em> , \u2018<em>elses\u2019 <\/em>e o <em>switch<\/em>. Essas estruturas ser\u00e3o constru\u00eddas em assembly com instru\u00e7\u00f5es de desvios, chamadas de <em>branch.<\/em> Tamb\u00e9m devemos estruturar o c\u00f3digo de forma a executar apenas os da condi\u00e7\u00e3o, entretanto, como fazer isto? Bom, h\u00e1 duas formas de fazer isso, podemos estruturar o c\u00f3digo para que verifique se a condi\u00e7\u00e3o \u00e9 satisfeita e salte para as instru\u00e7\u00f5es ou podemos estruturar o c\u00f3digo para a condi\u00e7\u00e3o que n\u00e3o \u00e9 satisfeita e fique executando na sequ\u00eancia das instru\u00e7\u00f5es.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">A primeira forma de fazermos uma estrutura condicional \u00e9 usando a instru\u00e7\u00e3o beq <em>(Branch if equal)<\/em>. A instru\u00e7\u00e3o beq verifica se os registradores possuem a mesma informa\u00e7\u00e3o. Caso seja verdade, a instru\u00e7\u00e3o salta para o r\u00f3tulo relacionado a ela.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Podemos ver no exemplo abaixo:<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"oKdM2c\">\n<div id=\"h.7a4292dd6ad776e6_133\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2869 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars10.jpg\" alt=\"\" width=\"1280\" height=\"689\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars10.jpg 1280w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars10-300x161.jpg 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars10-1024x551.jpg 1024w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars10-768x413.jpg 768w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"oKdM2c\">\n<div id=\"h.7a4292dd6ad776e6_131\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">A outra forma de estruturarmos um <em>if-else <\/em>\u00e9 com a instru\u00e7\u00e3o bne <em>(Branch if not equal)<\/em>. Essa instru\u00e7\u00e3o verifica se os registradores que est\u00e3o operando s\u00e3o diferentes, caso sejam, a instru\u00e7\u00e3o realizar\u00e1 um salto para o r\u00f3tulo relacionado.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.7a4292dd6ad776e6_134\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc yYI8W \">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_140\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">A seguir, veja o exemplo na imagem:<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"oKdM2c\">\n<div id=\"h.7a4292dd6ad776e6_144\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2870 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars11.png\" alt=\"\" width=\"1280\" height=\"685\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars11.png 1280w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars11-300x161.png 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars11-1024x548.png 1024w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars11-768x411.png 768w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"oKdM2c\">\n<div id=\"h.7a4292dd6ad776e6_142\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">Nos dois exemplos, vemos a instru\u00e7\u00e3o j, que \u00e9 uma instru\u00e7\u00e3o de salto incondicional. Esta instru\u00e7\u00e3o realiza um salto para o r\u00f3tulo relacionado a ela que cont\u00e9m o endere\u00e7o de salto.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.7a4292dd6ad776e6_145\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc yYI8W \">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_151\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">A estrutura\u00e7\u00e3o de um <em>switch<\/em> na linguagem assembly usa v\u00e1rias instru\u00e7\u00f5es <em>branch<\/em> pois essa estrutura pode ter mais de dois resultados poss\u00edveis. Vejamos um exemplo de switch com 3 casos:<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"oKdM2c\">\n<div id=\"h.7a4292dd6ad776e6_155\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2871 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars12.png\" alt=\"\" width=\"1280\" height=\"684\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars12.png 1280w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars12-300x160.png 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars12-1024x547.png 1024w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2020\/09\/mars12-768x410.png 768w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"oKdM2c\">\n<div id=\"h.7a4292dd6ad776e6_153\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">Como pode ser visto no exemplo, s\u00e3o v\u00e1rias instru\u00e7\u00f5es <em>branch<\/em> em sequ\u00eancia que verificam o valor do <em>case<\/em>. Neste caso, h\u00e1 o valor 2 no nosso <em>switch,<\/em> que far\u00e1 com que realize o c\u00f3digo do <em>case2<\/em>. Caso nenhum dos casos seja satisfeito, o programa realiza as instru\u00e7\u00f5es do <em>default<\/em>, colocado logo abaixo de todos os <strong>beq<\/strong>\u2019s.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.7a4292dd6ad776e6_159\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_156\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\"><strong>Estruturas de repeti\u00e7\u00e3o:<\/strong><\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">As estruturas de repeti\u00e7\u00e3o na linguagem Assembly utilizam-se de elementos que comp\u00f5em as nossas outras estruturas. Como realizar uma opera\u00e7\u00e3o <em><strong>n<\/strong><\/em> vezes? Em todos os casos haver\u00e1 uma condi\u00e7\u00e3o de parada. E para verificarmos uma condi\u00e7\u00e3o, utilizamos as instru\u00e7\u00f5es <em>branch<\/em>.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">\u201cA soma \u00e9 realizada 10 vezes\u2026\u201d<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Nesse caso, o nosso la\u00e7o ir\u00e1 iterar 10 vezes, certo? E como essa repeti\u00e7\u00e3o funciona? Ela precisa executar aqueles passos contidos dentro da estrutura do la\u00e7o e voltar para o come\u00e7o do la\u00e7o, correto?<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Bom, para estruturarmos essa \u201cvolta para o come\u00e7o do la\u00e7o\u201d, usamos a instru\u00e7\u00e3o j e endere\u00e7amos um r\u00f3tulo do come\u00e7o do la\u00e7o. Nos exemplos abaixo d\u00e1 pra ver as tr\u00eas estruturas de repeti\u00e7\u00e3o: <strong>do-while, while <\/strong>e <strong>for<\/strong>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.7a4292dd6ad776e6_160\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-ibL1re JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-OwsYgb purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc yYI8W \">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_190\" class=\"hJDwNd-AhqUyc-OwsYgb jXK9ad D2fZ2 OjCsFc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-3341 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2022\/11\/mars13.jpg\" alt=\"\" width=\"881\" height=\"472\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2022\/11\/mars13.jpg 881w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2022\/11\/mars13-300x161.jpg 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2022\/11\/mars13-768x411.jpg 768w\" sizes=\"(max-width: 881px) 100vw, 881px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"oKdM2c\">\n<div id=\"h.7a4292dd6ad776e6_165\" class=\"hJDwNd-AhqUyc-OwsYgb jXK9ad D2fZ2 GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<div id=\"h.6yj1vza0cens\" class=\"CobnVe aP9Z7e\">\u00a0<\/div>\n<div class=\"CjVfdc\">\n<div class=\"PPhIP rviiZ\">\n<div class=\"U26fgb mUbCce fKz7Od LRAOtb rm120e\" role=\"presentation\" aria-describedby=\"h.6yj1vza0cens\" aria-label=\"Copiar link do t\u00edtulo\" data-tooltip=\"Copiar link do t\u00edtulo\" aria-hidden=\"true\" data-tooltip-position=\"top\" data-tooltip-vertical-offset=\"12\" data-tooltip-horizontal-offset=\"0\">\n<div class=\"VTBa7b MbhUzd\">\u00a0<\/div>\n<\/div>\n<\/div>\nDo-While<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"oKdM2c\">\n<div id=\"h.7a4292dd6ad776e6_197\" class=\"hJDwNd-AhqUyc-OwsYgb jXK9ad D2fZ2\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-3339 size-full\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2022\/11\/mars14.jpg\" alt=\"\" width=\"890\" height=\"471\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2022\/11\/mars14.jpg 890w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2022\/11\/mars14-300x159.jpg 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2022\/11\/mars14-768x406.jpg 768w\" sizes=\"(max-width: 890px) 100vw, 890px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"oKdM2c\">\n<div id=\"h.7a4292dd6ad776e6_172\" class=\"hJDwNd-AhqUyc-OwsYgb jXK9ad D2fZ2 GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<div id=\"h.tkg95z4666x\" class=\"CobnVe aP9Z7e\">\u00a0<\/div>\n<div class=\"CjVfdc\">\n<div class=\"PPhIP rviiZ\">\n<div class=\"U26fgb mUbCce fKz7Od LRAOtb rm120e\" role=\"presentation\" aria-describedby=\"h.tkg95z4666x\" aria-label=\"Copiar link do t\u00edtulo\" data-tooltip=\"Copiar link do t\u00edtulo\" aria-hidden=\"true\" data-tooltip-position=\"top\" data-tooltip-vertical-offset=\"12\" data-tooltip-horizontal-offset=\"0\">\n<div class=\"VTBa7b MbhUzd\">\u00a0<\/div>\n<\/div>\n<\/div>\nWhile<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"oKdM2c\">\n<div id=\"h.7a4292dd6ad776e6_201\" class=\"hJDwNd-AhqUyc-OwsYgb jXK9ad D2fZ2\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd baZpAe\">\n<div class=\"t3iYD\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3340 size-full aligncenter\" src=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2022\/11\/mars15.jpg\" alt=\"\" width=\"887\" height=\"436\" srcset=\"https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2022\/11\/mars15.jpg 887w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2022\/11\/mars15-300x147.jpg 300w, https:\/\/www.ufsm.br\/app\/uploads\/sites\/791\/2022\/11\/mars15-768x378.jpg 768w\" sizes=\"(max-width: 887px) 100vw, 887px\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"oKdM2c\">\n<div id=\"h.7a4292dd6ad776e6_179\" class=\"hJDwNd-AhqUyc-OwsYgb jXK9ad D2fZ2 wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<div id=\"h.qtakf0r20d36\" class=\"CobnVe aP9Z7e\">\u00a0<\/div>\n<div class=\"CjVfdc\">\n<div class=\"PPhIP rviiZ\">\n<div class=\"U26fgb mUbCce fKz7Od LRAOtb rm120e\" role=\"presentation\" aria-describedby=\"h.qtakf0r20d36\" aria-label=\"Copiar link do t\u00edtulo\" data-tooltip=\"Copiar link do t\u00edtulo\" aria-hidden=\"true\" data-tooltip-position=\"top\" data-tooltip-vertical-offset=\"12\" data-tooltip-horizontal-offset=\"0\">\n<div class=\"VTBa7b MbhUzd\">\u00a0<\/div>\n<\/div>\n<\/div>\nFor<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"hJDwNd-AhqUyc-c5RTEf JNdkSc L6cTce-purZT L6cTce-pSzOP\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\u00a0<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.7a4292dd6ad776e6_205\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_202\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<p class=\"zfr3Q\" dir=\"ltr\">Apesar das tr\u00eas estruturas serem bem parecidas, elas diferem no posicionamento do incremento da vari\u00e1vel controladora do la\u00e7o. Estes exemplos s\u00e3o b\u00e1sicos, apenas para situar voc\u00ea, leitor, sobre como funcionam la\u00e7os em uma linguagem de montagem.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">O MARS possui v\u00e1rias ferramentas que auxiliam no desenvolvimento de programas mais elaborados. Acessando o menu \u2018<em>Tools\u2019<\/em>, podemos ver essas ferramentas. Algumas delas s\u00e3o bem interessantes como a <em>MIPS X-Ray<\/em>, que mostra a propaga\u00e7\u00e3o da instru\u00e7\u00e3o corrente no processador. O <em>Bitmap Display<\/em> \u00e9 um simulador de uma interface gr\u00e1fica, o interessante nessa ferramenta, implementando um programa para ser executado com essa interface, \u00e9 ver como as GPUs funcionam e ter uma ideia de como funciona uma placa de v\u00eddeo. O <em>Keyboard and Display MMIO Simulator<\/em> simula as entradas do teclado em tempo real do programa. Estas s\u00e3o algumas das ferramentas que o software traz para o usu\u00e1rio estudar e aprender a programa\u00e7\u00e3o de n\u00edvel mais baixo.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Al\u00e9m das ferramentas e de todas as funcionalidades que vimos no texto, o software tamb\u00e9m oferece as fun\u00e7\u00f5es e registradores de ponto flutuante. Acessando a aba <em>\u2018Coproc 1\u2019<\/em>, obtemos acesso a esses registradores. E as fun\u00e7\u00f5es podem ser consultadas no menu <em>Help<\/em>, pressionando a tecla <strong>F1<\/strong>.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">As fun\u00e7\u00f5es de ponto flutuante operam apenas nos registradores $<em>f<\/em>n. Apenas as instru\u00e7\u00f5es de convers\u00e3o utilizam os dois tipos de registradores.<\/p>\n<p class=\"zfr3Q\" dir=\"ltr\">Caso voc\u00ea tenha curiosidade de conhecer um pouco mais sobre a ferramenta, disponibilizo abaixo o link do meu GitHub, que cont\u00e9m os trabalhos que realizei na disciplina de Organiza\u00e7\u00e3o de Computadores. Nestes trabalhos eu utilizei tanto os simuladores de interface gr\u00e1fica quanto os registradores de ponto flutuante.<\/p>\n<ul class=\"n8H08c UVNKR\">\n<li class=\"TYR86d zfr3Q\">\n<p class=\"zfr3Q\" dir=\"ltr\"><a class=\"XqQF9c\" href=\"https:\/\/www.google.com\/url?q=https%3A%2F%2Fgithub.com%2Fmtsdalmolin%2FJogoDaForca&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNE270w5CFqQOrfO-JXHn9qFzFXmYw\" target=\"_blank\" rel=\"noopener noreferrer\">Jogo da Forca em Assembly.<\/a><\/p>\n<\/li>\n<li class=\"TYR86d zfr3Q\">\n<p class=\"zfr3Q\" dir=\"ltr\"><a class=\"XqQF9c\" href=\"https:\/\/www.google.com\/url?q=https%3A%2F%2Fgithub.com%2Fmtsdalmolin%2Ft2-org&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNG9_CQ73SbQ-HyjLwQBUvEgrsjwcw\" target=\"_blank\" rel=\"noopener noreferrer\">Opera\u00e7\u00f5es em ponto flutuante.<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"h.7a4292dd6ad776e6_210\" class=\"yaqOZd\">\n<div class=\"yaqOZd IFuOkc\">\u00a0<\/div>\n<div class=\"mYVXT\">\n<div class=\"LS81yb VICjCf\">\n<div class=\"hJDwNd-AhqUyc-uQSCkd purZT-AhqUyc-II5mzb pSzOP-AhqUyc-qWD73c JNdkSc\">\n<div class=\"JNdkSc-SmKAyb\">\n<div class=\"\">\n<div class=\"oKdM2c Kzv0Me\">\n<div id=\"h.7a4292dd6ad776e6_207\" class=\"hJDwNd-AhqUyc-uQSCkd jXK9ad D2fZ2 OjCsFc wHaque GNzUNc\">\n<div class=\"jXK9ad-SmKAyb\">\n<div class=\"tyJCtd mGzaTb baZpAe\">\n<div id=\"h.tf68m9kxj2qg\" class=\"GV3q8e aP9Z7e\">\u00a0<\/div>\n<div class=\"CjVfdc\">\n<div class=\"PPhIP rviiZ\">\n<div class=\"U26fgb mUbCce fKz7Od LRAOtb rm120e\" role=\"presentation\" aria-describedby=\"h.tf68m9kxj2qg\" aria-label=\"Copiar link do t\u00edtulo\" data-tooltip=\"Copiar link do t\u00edtulo\" aria-hidden=\"true\" data-tooltip-position=\"top\" data-tooltip-vertical-offset=\"12\" data-tooltip-horizontal-offset=\"0\">\n<div class=\"VTBa7b MbhUzd\">\u00a0<\/div>\n<\/div>\n<\/div>\n<strong>Refer\u00eancias:<\/strong><\/div>\n<ol class=\"n8H08c BKnRcf\">\n<li class=\"TYR86d zfr3Q OmQG5e\">\n<div class=\"CjVfdc\">\n<div class=\"PPhIP rviiZ\">\n<div class=\"U26fgb mUbCce fKz7Od LRAOtb rm120e\" role=\"presentation\" aria-describedby=\"h.u311lesjy3gi\" aria-label=\"Copiar link do t\u00edtulo\" data-tooltip=\"Copiar link do t\u00edtulo\" aria-hidden=\"true\" data-tooltip-position=\"top\" data-tooltip-vertical-offset=\"12\" data-tooltip-horizontal-offset=\"0\">\n<div class=\"VTBa7b MbhUzd\"><a class=\"XqQF9c\" href=\"http:\/\/www.google.com\/url?q=http%3A%2F%2Fcourses.missouristate.edu%2FKenVollmar%2Fmars%2F&amp;sa=D&amp;sntz=1&amp;usg=AFQjCNHDczBqd0o4NOUEKSY6GADQ4Cz7kg\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>Website dos desenvolvedores do software MARS;<\/strong><\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/li>\n<li class=\"TYR86d zfr3Q OmQG5e\">\n<div class=\"CjVfdc\">\n<div class=\"PPhIP rviiZ\"><strong>\u201cComputer and Organization Design\u201d &#8211; David A. Patterson, John L. Hennessy.<\/strong><\/div>\n<\/div>\n<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>Nesta edi\u00e7\u00e3o do PET Reda\u00e7\u00e3o, vamos falar um pouquinho sobre programa\u00e7\u00e3o de baixo n\u00edvel. Isso quer dizer que a programa\u00e7\u00e3o \u00e9 ruim? N\u00e3o, nada disso! Programa\u00e7\u00e3o de baixo n\u00edvel se trata de usarmos uma linguagem de programa\u00e7\u00e3o que segue as caracter\u00edsticas de estrutura do computador. Para isso, utilizaremos o software MARS (MIPS Assembler and Runtime [&hellip;]<\/p>\n","protected":false},"author":2948,"featured_media":2662,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[124,112],"tags":[184,149],"class_list":["post-2665","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-destaques","category-redacao","tag-ferramentas","tag-redacao"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts\/2665","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/users\/2948"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/comments?post=2665"}],"version-history":[{"count":0,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/posts\/2665\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/media\/2662"}],"wp:attachment":[{"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/media?parent=2665"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/categories?post=2665"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ufsm.br\/pet\/sistemas-de-informacao\/wp-json\/wp\/v2\/tags?post=2665"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}