> For the complete documentation index, see [llms.txt](https://bit-by-bit.gitbook.io/embedded-systems/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bit-by-bit.gitbook.io/embedded-systems/programacao/programacao-em-linguagem-de-montagem.md).

# Programação em Linguagem de Montagem

De acordo com Patterson e Hennessy \[1], a linguagem que um computador entende é chamada de instruções e seu vocabulário é denominado conjunto de instruções.&#x20;

Instruções indicam as operações que são executadas e os operandos utilizados. Além disso, as instruções são codificadas como números binários e são armazenadas na memória principal. Assim, o formato armazenado na memória é chamado de linguagem de máquina, já sua representação simbólica é chamada de linguagem de montagem ou Assembly \[2].

## Programa: Instruções e dados

Um programa é essencialmente uma série de instruções gravadas em memória. O desenvolvimento dos programas em Assembly consiste na declaração dessas instruções e da utilização de um montador para convertê-las para linguagem de máquina. Para tal, o programa em Assembly contém diretivas que especificam parâmetros ao montador (Assembler), isto é, são comandos passados para o montador e que não são convertidos em linguagem de máquina.

Cabe ressaltar que  o desenvolvimento de um programa depende da ferramenta utilizada, isto é, do Assembler.

## Estrutura básica de um programa em Assembly

Geralmente, uma linha de um programa em Assembly possui:

* Label: Pode ser utilizado para nomear a linha do código de contém a instrução indicada;
* Mnemônico: É o nome da instrução;
* Operandos: São informações utilizadas na execução de uma instrução. Cabe ressaltar que algumas instruções não possuem operandos;
* Comentários: São opcionais.

A seguir é mostrado um exemplo do e programa para o 8051 compatível com a ferramenta C51ASM.

```
        ORG 0 ; endereço inicial do programa
        SJMP INICIO ; salta para INICIO
        ORG 13H ; endereço reservado (interrupção externa 1)
        SJMP ROTINA ; salta para ROTINA
INICIO:
        MOV TCON, #04H ; configura a interrupção externa 1 (borda de descida no pino INT1)
        MOV IE, #84H ; habilita interrupção externa 1
        SJMP $ ; espera (LOOP)

ROTINA: ; Rotina de interrupção
        ; Código da rotina de interrupção
        RETI ; retorno da rotina interrupção

        END ; fim do programa
```

## Referências

\[1]  PATTERSON. D. A.; HENNESSY. J. L. **Computer Organization and Design: The Hardware/Software Interface 5th Edition**. Morgan Kaufmann-Elsevier. 2013.

\[2]  HARRIS. D. M; HARRIS. S. L. **Digital Design and Computer Architecture**. Elsevier. 2012.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bit-by-bit.gitbook.io/embedded-systems/programacao/programacao-em-linguagem-de-montagem.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
