<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>programação bare-metal - MCU &amp; FPGA</title>
	<atom:link href="https://mcu.tec.br/tags/programacao-bare-metal/feed/" rel="self" type="application/rss+xml" />
	<link>https://mcu.tec.br</link>
	<description>Microcontroladores &#38; FPGA</description>
	<lastBuildDate>Wed, 07 Jan 2026 16:24:37 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://mcu.tec.br/wp-content/uploads/2025/02/Robo-para-o-site-MCU.tec_.br-512x512-1-150x150.png</url>
	<title>programação bare-metal - MCU &amp; FPGA</title>
	<link>https://mcu.tec.br</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Assembly ARM vs Thumb: Arquitetura de Instruções nos Cortex-M e Exemplo Prático em Assembly</title>
		<link>https://mcu.tec.br/linguagem/assembly-arm-vs-thumb-arquitetura-de-instrucoes-nos-cortex-m-e-exemplo-pratico-em-assembly/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=assembly-arm-vs-thumb-arquitetura-de-instrucoes-nos-cortex-m-e-exemplo-pratico-em-assembly</link>
		
		<dc:creator><![CDATA[Carlos Delfino]]></dc:creator>
		<pubDate>Wed, 07 Jan 2026 16:14:28 +0000</pubDate>
				<category><![CDATA[Linguagem]]></category>
		<category><![CDATA[ARMv6-M]]></category>
		<category><![CDATA[ARMv7-M]]></category>
		<category><![CDATA[ARMv8-M]]></category>
		<category><![CDATA[Armv8.1-M]]></category>
		<category><![CDATA[arquitetura ARM]]></category>
		<category><![CDATA[assembly ARM]]></category>
		<category><![CDATA[assembly Cortex-M]]></category>
		<category><![CDATA[Cortex-M]]></category>
		<category><![CDATA[firmware Cortex-M]]></category>
		<category><![CDATA[microcontroladores ARM]]></category>
		<category><![CDATA[programação bare-metal]]></category>
		<category><![CDATA[Thumb]]></category>
		<category><![CDATA[Thumb-2]]></category>
		<category><![CDATA[UART em assembly]]></category>
		<guid isPermaLink="false">https://mcu.tec.br/?p=1186</guid>

					<description><![CDATA[<p>Entenda de forma clara e técnica as diferenças entre o assembly ARM clássico e o Thumb, com foco nos microcontroladores Cortex-M. O artigo explica a evolução das arquiteturas ARMv6-M, ARMv7-M, ARMv8-M e ARMv8.1-M, detalhando como o conjunto de instruções Thumb-2 influencia desempenho, consumo de energia e previsibilidade em sistemas embarcados. Inclui um exemplo completo e comentado de “Hello World” em assembly para Cortex-M3 utilizando UART, ideal para quem deseja compreender o funcionamento do firmware em baixo nível e o que realmente acontece por trás do código C.</p>
<p>The post <a href="https://mcu.tec.br/linguagem/assembly-arm-vs-thumb-arquitetura-de-instrucoes-nos-cortex-m-e-exemplo-pratico-em-assembly/">Assembly ARM vs Thumb: Arquitetura de Instruções nos Cortex-M e Exemplo Prático em Assembly</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="root-eb-toc-6r6o9 wp-block-essential-blocks-table-of-contents"><div class="eb-parent-wrapper eb-parent-eb-toc-6r6o9 "><div class="eb-toc-container eb-toc-6r6o9  eb-toc-is-not-sticky eb-toc-not-collapsible eb-toc-initially-not-collapsed eb-toc-scrollToTop style-1 list-style-none" data-scroll-top="false" data-scroll-top-icon="fas fa-angle-up" data-collapsible="false" data-sticky-hide-mobile="false" data-sticky="false" data-scroll-target="scroll_to_toc" data-copy-link="false" data-editor-type="" data-hide-desktop="false" data-hide-tab="false" data-hide-mobile="false" data-itemcollapsed="false" data-highlight-scroll="false"><div class="eb-toc-header"><h2 class="eb-toc-title">Table of Contents</h2></div><div class="eb-toc-wrapper " data-headers="[{&quot;level&quot;:2,&quot;content&quot;:&quot;1 \u2014 ARM Assembly \u201ccl\u00e1ssico\u201d vs Thumb: o que realmente muda&quot;,&quot;text&quot;:&quot;1 \u2014 ARM Assembly \u201ccl\u00e1ssico\u201d vs Thumb: o que realmente muda&quot;,&quot;link&quot;:&quot;eb-table-content-0&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;2 \u2014 Arquiteturas de instru\u00e7\u00f5es nos Cortex-M: ARMv6-M, ARMv7-M, ARMv8-M e ARMv8.1-M&quot;,&quot;text&quot;:&quot;2 \u2014 Arquiteturas de instru\u00e7\u00f5es nos Cortex-M: ARMv6-M, ARMv7-M, ARMv8-M e ARMv8.1-M&quot;,&quot;link&quot;:&quot;eb-table-content-1&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;3 \u2014 Thumb-2 na pr\u00e1tica: pipeline, fetch de instru\u00e7\u00f5es e impacto em desempenho e energia&quot;,&quot;text&quot;:&quot;3 \u2014 Thumb-2 na pr\u00e1tica: pipeline, fetch de instru\u00e7\u00f5es e impacto em desempenho e energia&quot;,&quot;link&quot;:&quot;eb-table-content-2&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;4 \u2014 Exemplo pr\u00e1tico: \u201cHello World\u201d em assembly para Cortex-M3 com UART hipot\u00e9tica&quot;,&quot;text&quot;:&quot;4 \u2014 Exemplo pr\u00e1tico: \u201cHello World\u201d em assembly para Cortex-M3 com UART hipot\u00e9tica&quot;,&quot;link&quot;:&quot;eb-table-content-3&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Premissas do exemplo&quot;,&quot;text&quot;:&quot;Premissas do exemplo&quot;,&quot;link&quot;:&quot;premissas-do-exemplo&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Vetor de interrup\u00e7\u00f5es e ponto de entrada&quot;,&quot;text&quot;:&quot;Vetor de interrup\u00e7\u00f5es e ponto de entrada&quot;,&quot;link&quot;:&quot;eb-table-content-5&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Rotina de reset&quot;,&quot;text&quot;:&quot;Rotina de reset&quot;,&quot;link&quot;:&quot;rotina-de-reset&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Loop principal de transmiss\u00e3o&quot;,&quot;text&quot;:&quot;Loop principal de transmiss\u00e3o&quot;,&quot;link&quot;:&quot;eb-table-content-7&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Finaliza\u00e7\u00e3o&quot;,&quot;text&quot;:&quot;Finaliza\u00e7\u00e3o&quot;,&quot;link&quot;:&quot;eb-table-content-8&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;String em mem\u00f3ria&quot;,&quot;text&quot;:&quot;String em mem\u00f3ria&quot;,&quot;link&quot;:&quot;eb-table-content-9&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;O que esse exemplo ensina, de fato&quot;,&quot;text&quot;:&quot;O que esse exemplo ensina, de fato&quot;,&quot;link&quot;:&quot;o-que-esse-exemplo-ensina-de-fato&quot;}]" data-visible="[true,true,true,true,true,true]" data-delete-headers="[{&quot;label&quot;:&quot;1 \u2014 ARM Assembly \u201ccl\u00e1ssico\u201d vs Thumb: o que realmente muda&quot;,&quot;value&quot;:&quot;1-arm-assembly-cl\u00e1ssico-vs-thumb-o-que-realmente-muda&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;2 \u2014 Arquiteturas de instru\u00e7\u00f5es nos Cortex-M: ARMv6-M, ARMv7-M, ARMv8-M e ARMv8.1-M&quot;,&quot;value&quot;:&quot;2-arquiteturas-de-instru\u00e7\u00f5es-nos-cortex-m-armv6-m-armv7-m-armv8-m-e-armv81-m&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;3 \u2014 Thumb-2 na pr\u00e1tica: pipeline, fetch de instru\u00e7\u00f5es e impacto em desempenho e energia&quot;,&quot;value&quot;:&quot;3-thumb-2-na-pr\u00e1tica-pipeline-fetch-de-instru\u00e7\u00f5es-e-impacto-em-desempenho-e-energia&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;4 \u2014 Exemplo pr\u00e1tico: \u201cHello World\u201d em assembly para Cortex-M3 com UART hipot\u00e9tica&quot;,&quot;value&quot;:&quot;4-exemplo-pr\u00e1tico-hello-world-em-assembly-para-cortex-m3-com-uart-hipot\u00e9tica&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Premissas do exemplo&quot;,&quot;value&quot;:&quot;premissas-do-exemplo&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Vetor de interrup\u00e7\u00f5es e ponto de entrada&quot;,&quot;value&quot;:&quot;vetor-de-interrup\u00e7\u00f5es-e-ponto-de-entrada&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Rotina de reset&quot;,&quot;value&quot;:&quot;rotina-de-reset&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Loop principal de transmiss\u00e3o&quot;,&quot;value&quot;:&quot;loop-principal-de-transmiss\u00e3o&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Finaliza\u00e7\u00e3o&quot;,&quot;value&quot;:&quot;finaliza\u00e7\u00e3o&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;String em mem\u00f3ria&quot;,&quot;value&quot;:&quot;string-em-mem\u00f3ria&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;O que esse exemplo ensina, de fato&quot;,&quot;value&quot;:&quot;o-que-esse-exemplo-ensina-de-fato&quot;,&quot;isDelete&quot;:false}]" data-smooth="true" data-top-offset=""><div class="eb-toc__list-wrap"><ul class="eb-toc__list"><li><a href="#eb-table-content-0">1 — ARM Assembly “clássico” vs Thumb: o que realmente muda</a><li><a href="#eb-table-content-1">2 — Arquiteturas de instruções nos Cortex-M: ARMv6-M, ARMv7-M, ARMv8-M e ARMv8.1-M</a><li><a href="#eb-table-content-2">3 — Thumb-2 na prática: pipeline, fetch de instruções e impacto em desempenho e energia</a><li><a href="#eb-table-content-3">4 — Exemplo prático: “Hello World” em assembly para Cortex-M3 com UART hipotética</a><ul class="eb-toc__list"><li><a href="#premissas-do-exemplo">Premissas do exemplo</a><li><a href="#eb-table-content-5">Vetor de interrupções e ponto de entrada</a><li><a href="#rotina-de-reset">Rotina de reset</a><li><a href="#eb-table-content-7">Loop principal de transmissão</a><li><a href="#eb-table-content-8">Finalização</a><li><a href="#eb-table-content-9">String em memória</a><li><a href="#o-que-esse-exemplo-ensina-de-fato">O que esse exemplo ensina, de fato</a></li></ul></ul></div></div></div></div></div>


<h2 class="wp-block-heading">1 — ARM Assembly “clássico” vs Thumb: o que realmente muda</h2>



<p class="wp-block-paragraph">Quando falamos em <em>assembly ARM</em>, é comum misturar dois conceitos que, embora relacionados, têm impactos profundos no projeto de firmware: o <strong>conjunto de instruções ARM “clássico”</strong> (ARM state) e o <strong>conjunto de instruções Thumb</strong> (Thumb state). Historicamente, o ARM clássico utiliza instruções de <strong>32 bits de largura fixa</strong>, enquanto o Thumb surgiu como uma alternativa <strong>mais compacta</strong>, inicialmente com instruções de <strong>16 bits</strong>, visando reduzir o tamanho do código em memória — algo crítico em microcontroladores.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="651" src="https://mcu.tec.br/wp-content/uploads/2026/01/image-12-1024x651.png" alt="" class="wp-image-1188" srcset="https://mcu.tec.br/wp-content/uploads/2026/01/image-12-1024x651.png 1024w, https://mcu.tec.br/wp-content/uploads/2026/01/image-12-300x191.png 300w, https://mcu.tec.br/wp-content/uploads/2026/01/image-12-768x489.png 768w, https://mcu.tec.br/wp-content/uploads/2026/01/image-12.png 1080w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>





<p class="wp-block-paragraph">No ARM clássico, cada instrução de 32 bits carrega bastante informação: operação, registradores envolvidos, modos de endereçamento e, em muitas instruções, <em>condicionalidade embutida</em> (flags como EQ, NE, GT, LT diretamente no opcode). Isso resulta em código expressivo e eficiente em termos de ciclos por instrução, mas com custo direto em <strong>consumo de Flash</strong> e <strong>largura de banda de barramento</strong>. Esse modelo fez muito sentido em CPUs com cache e memória abundante, como aplicações embarcadas de maior porte ou sistemas operacionais completos.</p>



<p class="wp-block-paragraph">O Thumb, por outro lado, nasceu com uma proposta pragmática: <strong>densidade de código</strong>. Ao reduzir o tamanho das instruções, o processador consegue armazenar mais lógica no mesmo espaço de memória, além de melhorar o <em>fetch</em> em barramentos estreitos. A contrapartida inicial era um conjunto de instruções mais restrito, menos modos de endereçamento e menor flexibilidade em certas operações. Com o tempo, essa limitação foi sendo superada, culminando no <strong>Thumb-2</strong>, que combina instruções de <strong>16 e 32 bits de forma transparente</strong>, mantendo alta densidade de código sem sacrificar capacidade expressiva.</p>



<p class="wp-block-paragraph">É aqui que entra um ponto essencial para quem trabalha com microcontroladores da família <strong>ARM Cortex-M</strong>: <strong>não existe “ARM clássico” nesses núcleos</strong>. Todos os Cortex-M executam <strong>exclusivamente Thumb/Thumb-2</strong>. Isso não é um detalhe de implementação, mas uma decisão arquitetural profunda: simplifica o pipeline, reduz consumo de energia, elimina a necessidade de alternância de estado ARM/Thumb e torna o comportamento mais previsível — algo fundamental para sistemas de tempo real.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="787" height="551" src="https://mcu.tec.br/wp-content/uploads/2026/01/image-13.png" alt="" class="wp-image-1189" srcset="https://mcu.tec.br/wp-content/uploads/2026/01/image-13.png 787w, https://mcu.tec.br/wp-content/uploads/2026/01/image-13-300x210.png 300w, https://mcu.tec.br/wp-content/uploads/2026/01/image-13-768x538.png 768w" sizes="(max-width: 787px) 100vw, 787px" /></figure>



<p class="wp-block-paragraph">Portanto, ao escrever assembly para Cortex-M, falar em “assembly ARM” significa, na prática, <strong>assembly Thumb-2</strong>, ainda que a sintaxe seja parecida e muitos manuais usem o termo ARM de forma genérica. Entender essa diferença evita confusões comuns, como procurar instruções que simplesmente não existem nesse ambiente ou tentar aplicar modelos mentais válidos para Cortex-A/R em um núcleo projetado desde o início para microcontroladores determinísticos.</p><p>The post <a href="https://mcu.tec.br/linguagem/assembly-arm-vs-thumb-arquitetura-de-instrucoes-nos-cortex-m-e-exemplo-pratico-em-assembly/">Assembly ARM vs Thumb: Arquitetura de Instruções nos Cortex-M e Exemplo Prático em Assembly</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1186</post-id>	</item>
	</channel>
</rss>
