Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Linguagem de Máquina
 
SST
Ancelmo, Jose Roberto
Linguagem de Máquina / Jose Roberto Ancelmo 
Ano: 2020
nº de p. : 11
Copyright © 2020. Delinea Tecnologia Educacional. Todos os direitos reservados.
Linguagem de Máquina
3
Apresentação
Neste momento, vamos entender a linguagem de montagem, o formato e a 
codificação de instruções, bem como os tipos de instruções. Veremos, também, os 
tipos de endereçamento e as chamadas a funções.
Linguagem de montagem
Segundo Tanenbaum (2013, p. 300), a linguagem de montagem, de modo geral, 
pode ser dividida em dois grupos, dependendo da relação entre a linguagem-fonte 
e a linguagem-alvo. Para o autor, quando a linguagem-fonte é, em essência, uma 
representação simbólica para uma linguagem de máquina numérica, o tradutor é 
denominado assembler (montador) e a linguagem-fonte é denominada “linguagem 
de montagem” (assembly language). 
Quando a linguagem-fonte é uma linguagem de alto nível, como Java ou C, e a 
linguagem-alvo é uma linguagem de máquina numérica ou simbólica de uma 
linguagem de máquina numérica, o tradutor é chamado “compilador”.
Desde a origem dos computadores, os arquitetos e engenheiros da computação 
procuram facilitar a interação entre o homem e a máquina, para que as tarefas e 
execuções sejam mais eficientes, ou seja, tenham um menor tempo de execução e 
armazenamento, reduzindo os recursos e custos operacionais. 
Para a máquina compreender a linguagem natural (ou seja, o que desejamos que ela 
execute), é necessário entendermos a linguagem da máquina ou linguagem de baixo 
nível. No entanto, a linguagem da máquina é binária e há um esforço grandioso para 
realizarmos solicitações e execuções de operações ao nível da máquina. Com o tempo, 
foram criados os montadores (interpretadores) e compiladores, convertendo códigos de 
alto nível e de montagem em linguagem de máquina para códigos executáveis.
A linguagem de montagem é uma notação legível por humanos, constituída 
por símbolos ou mnemônicos para o entendimento do código de máquina que 
determinada arquitetura de computador utiliza. 
4
Uma linguagem de montagem é quando a linguagem-fonte for essencialmente uma 
representação simbólica para uma linguagem de máquina numérica. Ela também é 
chamada de Linguagem Assembly.
Já o montador é o tradutor entre a linguagem-fonte e a linguagem de máquina 
numérica (também chamado de Assembler).
No caso de uma linguagem de alto nível (C ou Pascal) e uma “linguagem 
alvo” forem uma linguagem de máquina numérica ou uma representação 
simbólica dessa linguagem (linguagem de montagem), o tradutor é 
chamado de compilador. (SOUZA FILHO; ALEXANDRE, 2014, p. 67) 
Na figura a seguir, veja um esquema sobre o processo de tradução (montagem ou 
compilação) e ligação de código-fonte, escrito em linguagens de programação, em um 
código binário executável. Perceba que a linguagem de baixo nível (linguagem de 
montagem ou linguagem Assembly) (1a), por meio do montador ou Assembler (2a), 
gera um código objeto (3a) que será executado pelo código binário executável (5a) 
(gerado pelo ligador [linkeditor] [4a]). 
Já a linguagem de alto nível (1b), por meio do compilador (2b), gera um código 
traduzido em forma de linguagem de montagem (2b') para o montador gerar o código-
objeto (3b), por meio do ligador, que, por sua vez, gera o código binário executável. 
A função do ligador é coletar procedimentos traduzidos separadamente e ligá-los 
uns aos outros para que eles possam executar como uma unidade chamada código 
executável (o programa) (SOUZA FILHO; ALEXANDRE, 2014, p. 69). É utilizada a 
técnica de geração de dois códigos-objeto (objetos separados do passo 3a), a fim de 
que o ligador execute o código binário executável. 
Isso ocorre porque o processo é mais rápido do que uma tradução, pois o único 
procedimento a ser executado novamente é se houvesse alterações no código-fonte. 
Os ligadores também são chamados de link-editores ou linkers.
Processo de tradução (montagem ou compilação).
Fonte: Adaptada de Souza Filho e Alexandre (2014, p. 67).
5
Segundo Patterson e Hennessy (2005, p.10):
Os primeiros programadores se comunicavam com os computadores 
em números binários, isso era tão maçante que rapidamente inventaram 
novas notações mais parecidas com a maneira como os homens pensam. 
[…] Usando a própria máquina para ajudá-los a programá-la, os pioneiros 
inventaram programas para traduzir a notação simbólica [linguagem de 
montagem] para binário. O primeiro desses programas foi chamado de 
montador (Assembler). Esse programa traduz a versão simbólica de uma 
instrução para uma versão binária. Por exemplo, o programador escreveria 
Add A, B. E o montador traduziria essa notação como: 1000110010100000. 
Essa instrução diz ao computador para somar números, A e B. O nome 
criado para essa linguagem simbólica, ainda em uso hoje, é linguagem 
Assembly.
Já para Weber (2012), um montador (ou Assembler) é uma ferramenta indispensável 
para o desenvolvimento de programas que devem acessar os recursos de arquitetura 
de um processador.
Outra questão que devemos entender: por que usar uma linguagem de montagem?
Souza Filho e Alexandre (2014) comentam que programar em uma linguagem 
de montagem é mais trabalhoso. Não é uma linguagem produtiva, pois consome 
tempo de desenvolvimento. Em contrapartida, pode produzir um código enxuto 
e mais eficiente do que uma codificação em linguagem de alto nível. Além 
disso, a linguagem de montagem pode ter acesso total ao hardware, realizando 
procedimento que, em uma linguagem de alto nível, não seria possível. Para Null e 
Lobur (2010, p. 273):
Os empregadores frequentemente preferem contratar pessoas com 
conhecimento de linguagens simbólicas, não porque precisam de alguém 
capaz de entender a arquitetura simbólica, mas porque eles precisam de 
alguém capaz de entender a arquitetura de computadores, para escrever 
programas mais eficientes e eficazes. 
A linguagem de montagem também permite a compreensão do funcionamento 
de uma CPU, da programação baseada em microcontroladores e de sistemas 
embarcados e para recursos não disponíveis em linguagens em alto nível. 
6
Codificação de instruções
Vimos que atualmente uma linguagem de montagem é compreendida para um 
melhor entendimento da arquitetura de um computador, fazendo com que as 
execuções das tarefas computacionais e automatizações tenham uma maior 
eficiência. Para Null e Lobur (2010), o método tradicional para descrever uma 
arquitetura de computador é especificar o número máximo de operandos ou 
endereços contidos em cada instrução. Portanto, devemos entender o que é uma 
instrução e seu formato em uma linguagem de montagem. 
A função básica desempenhada por um computador é executar um programa, 
constituído por um “conjunto de instruções” armazenadas na memória. O 
processador realiza o trabalho efetivo de executar as instruções específicas de um 
programa (STALLINGS, 2002). Internamente, cada instrução é representada como 
uma sequência de bits dividida em campos, correspondendo aos elementos de uma 
instrução, como você pode conferir na figura a seguir. Essa instrução significa “[…] 
some o número contido na posição de memória M ao número armazenado na posição 
de memória N e coloque o resultado de memória P” (AGUILAR, 2011, p. 20). A imagem 
ilustra o código binário da operação de soma e transferência de valores para um local 
de memória, sendo realizada a operação matemática de soma: P = M + N.
Instrução típica de soma em linguagem montadora e de máquina.
Fonte: Adaptada de Aguilar (2011, p. 20-21).
Stallings (2002) comenta que há dois passos para o processador de instruções: [(1)] 
o processador lê (busca) instruções na memória, uma de cada vez, e [(2)] executa 
uma a uma. Esse processo é repetitivo, envolvendo várias operações. A figura a 
seguir mostra o processamento necessário para a execução de uma instrução, 
chamado ciclo de instrução. O processador buscará as instruções sequencialmente 
nas posições de memória ou de maneiraalternada. 
7
Ciclo de instrução básico.
Fonte: Adaptada de Stallings (2002, p. 58).
Como vimos na figura acima, dados e instruções são armazenados na memória, e os 
números e as instruções devem ser representados em forma binária. O processador, 
especificamente a unidade de controle do processador, controla a operação da 
memória, efetuando buscas das instruções e realiza a execução delas, por meio do 
ciclo de instrução básico. Esse ciclo pode variar em sua complexidade, dependendo 
da arquitetura do computador. 
A figura a seguir ilustra o ciclo de execução de instrução e a movimentação de dados 
entre a CPU e a instrução de dados. Para Silberschatz, Galvin e Gagne (2008), um 
sistema computadorizado de uso geral consiste em uma CPU e vários controladores 
de dispositivos conectados por um barramento comum. As informações são 
transferidas do dispositivo para um buffer local pelo barramento por meio de 
interrupções do sistema operacional. Esse procedimento é válido para pequenas 
quantidades. Já o acesso direto à memória transfere uma quantidade maior de 
dados (DMA). Em seguida, a controladora realiza a transferência dos dados do 
buffer para a memória sem intervenção da CPU. Após os dados na memória, a CPU 
inicia o processo de busca das instruções pelo ciclo básico de instrução. Variantes 
mais complexas do ciclo de execução de instruções podem existir em arquiteturas 
variadas. 
Veja como funciona esse sistema computadorizado moderno.
da
8
Como funciona um sistema computadorizado moderno
Formatos de palavras
Os formatos de uma palavra na memória, baseada no modelo de computador 
projetado por Von Neumann, são chamados “IAS” e constituem um protótipo de 
todos os computadores de propósito geral. Cada número é representado por um bit 
de sinal e um valor de 39 bits (item [a] armazenamento de um número) (STALLINGS, 
2002). Já uma palavra pode conter duas instruções de 20 bits, cada uma consistindo 
em um código de operação (opcode) com 8 bits, que especifica a operação 
executada, e de um endereço com 12 bits, que designa uma palavra na memória 
(numerada de 0 a 999) (STALLINGS, 2002). Veja que cada instrução (esquerda e 
direita) é alocada nos 20 bits.
Formatos de uma palavra na memória no modelo “IAS” de Von Neumann.
Fonte: Adaptada de Stallings (2002, p. 22).
9
Portanto, as instruções são formadas basicamente por dois campos: 
Código de operação (Opcode): subgrupo de bits que identifica a operação a ser 
realizada pelo processador. “É o campo da instrução cujo valor binário identifica a 
operação a ser realizada […]” (MONTEIRO, 2007 apud FÁVERO, 2011, p. 75). A figura 
a seguir mostra o código de operação de uma instrução de adição ADD = 0110. 
Cada instrução tem um código único de identificação para a unidade de controle do 
processador. As instruções básicas podem ser adição, subtração e comparação e 
outras, conforme a orientação da arquitetura, atualmente RISC (Reduced Instruction 
Set Computer) ou CISC (Complex Instruction Set Computer).
Código de operação.
Fonte: Adaptada de Stallings (2002, p. 22).
Operando: subgrupo de bits que identifica o endereço de memória em que está 
contido o dado que será manipulado, ou pode conter o endereço no qual o resultado 
da operação será armazenado (MONTEIRO, 2007 apud FÁVERO, 2011). 
A que segue ilustra o operando de uma instrução, contendo o endereço de memória 
de manipulação dos dados. 
Operando de uma instrução.
Fonte: Elaborada pelo autor (2017).
10
Segundo Null e Lobur (2010, p. 278), as instruções em arquiteturas atuais podem ser 
formatadas de duas maneiras: 
Tamanho fixo: desperdiça espaço, mas é rápida e resulta em um melhor 
desempenho quando é usado pipeline em nível de instrução. 
Tamanho variável: mais complexa de decodificar, mas economiza espaço. 
Fechamento
Chegamos ao final do estudo e compreendemos o conceito da linguagem de 
máquina e como uma máquina compreende em forma de codificação uma 
linguagem natural a partir dos programa de computadores. Na sequência, vimos a 
codificação de instruções através do ciclo de instruções básicas, o funcionamento 
de um sistema computacional moderno e os formatos de palavras que os sistemas 
trabalham.
11
Referências
AGUILAR, L. J. Fundamentos de Programação: algoritmos, estruturas de dados e 
objetos. 3. ed. Porto Alegre: AMGH, 2011. 
FÁVERO, E. M. de B. Organização e arquitetura de computadores. Pato Branco: 
UTFPR, 2011. 
NULL, L.; LOBUR, J. Princípios Básicos de Arquitetura e Organização de 
Computadores. Porto Alegre: Bookman, 2010. 
PATTERSON, D. A.; HENNESSY, J. L. Organização e projeto de computadores. Rio de 
Janeiro: Elsevier, 2005. 
SILBERSCHATZ, A.; GALVIN, P. B.; GAGNE, G. Sistemas Operacionais com Java. Rio 
de Janeiro: Elsevier, 2008.
STALLINGS, W. Arquitetura e Organização de Computadores: projeto para o 
desempenho. São Paulo: Prentice Hall, 2002.
TANENBAUM, A. S. Organização estruturada de computadores. 6. ed. São Paulo: 
Pearson, 2013. 
WEBER, R. F. Fundamentos de arquitetura de computadores. 4. ed. Porto Alegre: 
Bookman, 2012.

Mais conteúdos dessa disciplina