assemblyparte1 140320111308-phpapp02

81
ASSEMBLY Prof.ª Ms. Elaine Cecília Gatto Disciplina: Arquitetura de Computadores Curso: Engenharia de Computação

Upload: bruno-santos-ferreira

Post on 13-Apr-2017

298 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Assemblyparte1 140320111308-phpapp02

ASSEMBLYProf.ª Ms. Elaine Cecília GattoDisciplina: Arquitetura de ComputadoresCurso: Engenharia de Computação

Page 2: Assemblyparte1 140320111308-phpapp02

Introdução● É linguagem de montagem;● É utilizada para programar um computador de

baixo nível;● O programa é montado dentro do processador;● Não é uma linguagem de máquina

● Linguagem de máquina:● Utilizada por um MICROPROCESSADOR para

controlar funções de um computador digital.

Page 3: Assemblyparte1 140320111308-phpapp02

Introdução● MICROPROCESSADOR:

● É um circuito que possui a capacidade de executar diversos tipos de funções distintas;

● É usado em um computador.

Page 4: Assemblyparte1 140320111308-phpapp02

Introdução ● Linguagem de máquina:

● Só aceita e manipula informações numéricas expressas em notação de códigos binários;

● Assembly: ● Linguagem de programação que surgiu entre a

década de 40 e 50;● Objetivo: facilitar o trabalho de codificação de um

programa de computador;● É composta por códigos alfabéticos muito mais fáceis

de se utilizar que códigos binários ou hexadecimais;

Page 5: Assemblyparte1 140320111308-phpapp02

Introdução ● Mnemônicos:

● São as instruções da linguagem Assembly;● ASSEMBLER:

● É o nome dado ao programa montador;● É o programa utilizado para compilar um programa

escrito em linguagem de montagem, tornando-o executável;

● É o ambiente de programação;● É responsável por traduzir o programa-fonte para o

programa-objeto;● PORTANTO: assembler é diferente de assembly!

Page 6: Assemblyparte1 140320111308-phpapp02

Introdução ● Compiladores disponíveis para a linguagem

Assembly:● MASM (microsoft)● MASM (ibm)● TASM (borland)● EMU8086 (http://www.emu8086.com/)

Page 7: Assemblyparte1 140320111308-phpapp02

Introdução ● Saber programar em linguagem Assembly significa conhecer e

saber usar melhor os requisitos mais íntimos de um microprocessador, e por conseguinte, saber controlar melhor as funções de um computador digital.

● É usada na criação e desenvolvimento de rotinas escritas nas formas de DLLs, drivers, programas embutidos (computadores de bordo), etc.

● Algumas linguagens de alto nível possuem algum tipo de interação com rotinas de programas escritos em Assembly.

● Códigos Assembly são rápidos e pequenos (compilado) mas o código-fonte é extenso

Page 8: Assemblyparte1 140320111308-phpapp02

Introdução ● Assembly é totalmente dependente de hardware● Um código Assembly para INTEL não é o mesmo que

um para a AMD.● Portanto, não é portável.

● EMU8086:● Ambiente de programação;● Programa de simulação do modo de operação

interna de um microprocessador padrão 8086;● Modo gráfico;

Page 9: Assemblyparte1 140320111308-phpapp02

NIBBLE● É um conjunto numérico de 4 bits;● Representa-se até 16 valores diferentes;● É a menor estrutura numérica manipulada

internamente em um computador digital;● Usa-se nibble para facilitar a representação

de valores binários em formato hexadecimal;

Page 10: Assemblyparte1 140320111308-phpapp02

BYTE● É um conjunto de oito bits;● Representa-se numericamente até 256

valores diferentes;● Um byte é formado pelo conjunto de dois

nibbles;

7 6 5 4 3 2 1 0Bits mais significativos Bits menos significativos

Nibble 1 Nibble 2

Page 11: Assemblyparte1 140320111308-phpapp02

WORD● Representa um conjunto de 16 bits;● Representa-se numericamente até 65.356 valores diferentes

(de 0 a 65.356);● É formado por dois bytes;● É formado por quatro nibbles;● Também pode ser representado valores numéricos entre -

32.766 até 32.767;● Representação de numeros inteiros;● Representação de deslocamento de segmento;

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0Bits mais significativos

Nibble 3 (mais significativo) Nibble 2 Nibble 1 Nibble 0 (menos

significativo)

Page 12: Assemblyparte1 140320111308-phpapp02

Double Word● É um conjunto de dois words;● Um conjunto de 32 bits;● Formada por um conjunto de quatro bytes ou oito nibbles;● Representa-se 4.294.967.296 valores numéricos diferentes;● Representa-se também numeros entre -2.147.483.648 e

2.147.483.647;● Utilizado para representar:● Valores inteiros de 32 bits● Valores de ponto flutuante de 32 bits;● Endereços segmentados;

Page 13: Assemblyparte1 140320111308-phpapp02

Quad Word● É um conjunto de dois double words;● É um conjunto de 64 bits;● É formado por dois double words, ou quatro words, ou oito

bytes ou ainda dezesseis nibbles;● Representa-se 18.446.744.073.709.551.616 valores

numéricos diferentes;● Representa-se -9.223.372.036.854.7756.808 à -

9.223.372.036.854.7756.808● Usado em microprocessadores de 64 bits;

Page 14: Assemblyparte1 140320111308-phpapp02

Registradores Utilizados para armazenar os valores que serão manipulados

por um programa; A arquitetura X86 da Intel é formada por 14 registradores Cada um manipula 16 bits São divididos em quatro grupos funcionais: Registradores gerais: AX, BX, CX, DX; Registradores de segmento: CS, DS, ES, SS Registradores de ponteiros: SI, DI, SP, BP, IP Registradores de estado: F

Page 15: Assemblyparte1 140320111308-phpapp02

Registradores● AX: accumulator extended● BX: base extended● CX: counter extended● DC: data extended● Cada registrador tem 16 bits de dados● Cada registrador pode ser dividido em 2 duas

partes com 8 bits cada um

Page 16: Assemblyparte1 140320111308-phpapp02

RegistradoresREGISTRADORES DE USO

GERALAX AH AL

BX BH BL

CX CH CL

DX DH DL

Registradores de SegmentoCS (Code Segment)

DS (Data Segment)

ES (Extra Data Segment)

SS (Stack Segment)

Registradores PonteirosSI (Source Index)

DI (Destination Index)

SP (Stack Pointer)

BP (Base Pointer)

IP (Instruction Pointer)

Page 17: Assemblyparte1 140320111308-phpapp02

Registradores

REGISTRADORES DE ESTADOF O D I T S Z A P C flag

s

1 1 1 1 15 4 3 2 1 0 9 8 7 6 5 4 3 2 1

Page 18: Assemblyparte1 140320111308-phpapp02

Registradores● Esquema da estrutura interna de cada registrador geral

Page 19: Assemblyparte1 140320111308-phpapp02

AX● AX (AH – AL) pode ser utilizado em:● operações aritméticas● Acessos de portas de entrada e saída;● Chamadas de interrupções● Transferência de dados● Etc

Page 20: Assemblyparte1 140320111308-phpapp02

BX● BX: BH-BL● Pode ser utilizado como ponteiro para

acessar a memória no sentido de obter algum valor de retorno ou mesmo definir valores que serão usados para auxiliar operações aritméticas efetuadas com o registrador ah

Page 21: Assemblyparte1 140320111308-phpapp02

CX● CX (CH-CL):● Usado para receber alguns valores de

interrupções● Principal finalidade:

● servir como contador de laços de repetição e operações de deslocamento registradas em CL

Page 22: Assemblyparte1 140320111308-phpapp02

DX● DX (DH-DL): ● Operações aritméticas● Acessos de portas de entrada e saída● Algumas chamadas de interrupções

Page 23: Assemblyparte1 140320111308-phpapp02

Registradores de Segmento● Tem 16 bits● Usados para acessar uma determinada área

de memória (OFFSET)● São utilizados para auxiliar o

microprocessador a encontrar o caminho pela memória do computador

● Não podem ser divididos em grupos de 8 bits

Page 24: Assemblyparte1 140320111308-phpapp02

CS● Usado para apontar para uma área de

memória que contém o segmento de código de programa que se encontra em execução

● Obs.: a mudança do valor existente nesse registrador pode resultar em travamento do computador

Page 25: Assemblyparte1 140320111308-phpapp02

DS● usado para apontar para a área de memória

que estiver sendo utilizada no armazenamento dos dados do programa em execução

● A mudança no valor existente nesse registrador de segmento pode ocasionar a obtenção de dados incorretos

Page 26: Assemblyparte1 140320111308-phpapp02

ES● Usado para determinar um segmento extra

de endereço de dados distante da área em que se está operando

● Por exemplo: necessário quando é preciso acessar a memória do vídeo

Page 27: Assemblyparte1 140320111308-phpapp02

SS● Usado para identificar a área de memória

que será usada como pilha, com o objetivo de armazenar dados temporários para a execução de um determinado programa

● Algumas vezes pode conter o mesmo valor encontrado no registrador de segmento DS

● A mudança do valor pode trazer resultados imprevisíveis relacionados aos dados

Page 28: Assemblyparte1 140320111308-phpapp02

Registradores de Deslocamento● Registradores de apontamento● Registradores de deslocamento● Registradores de índice● Associados ao acesso de uma determinada

posição de memória previamente conhecida● Não podem ser divididos em grupos de 8 bits● Quatro registradores são manipuláveis,

apenas o IP não é

Page 29: Assemblyparte1 140320111308-phpapp02

IP● Apontador da próxima instrução● Possui o valor de deslocamento do código da

próxima instrução a ser executada● É de uso interno do microprocessador● Guarda o deslocamento da próxima

instrução de um programa ● O valor só pode ser lido

Page 30: Assemblyparte1 140320111308-phpapp02

SI e DI● Utilizados para manipular índices de uma tabela● SI:

● usado para a leitura dos dados de tipo string de uma tabela

● DI:● usado para a escrita de dados do tipo string em

uma tabela● Usado na definição de endereçamento distante

associado ao registrador de segmento ES

Page 31: Assemblyparte1 140320111308-phpapp02

SP e BP● Permitem acesso à pilha de programa● Pilha de programa:

● memória para armazenamento de dados● Possibilita armazenar dados em memória,

sem utilizar registradores gerais● É um mecanismo que armazena dados de

cima para baixo● BP: armazena o endereço da base da pilha● SP: armazena o endereço do topo da pilha

Page 32: Assemblyparte1 140320111308-phpapp02

Registrador de Estado● Meio para sinalização de efetivação de

operações lógicas, aritméticas, manipulação de blocos e interrupções

● Indicam o estado de comportamento do microprocessador quando da execução de alguma instrução Assembly

● Tem 16 bits● Cada flag define ou sinaliza um estado de

comportamento particular

Page 33: Assemblyparte1 140320111308-phpapp02

Registrador de Estado● O flag está vinculado ao fato de uma ação ser

ou não executada● 1: indica que o flag está setado (habilitado).

Quando uma ação é executada, indica que a ação ocorreu

● 0: indica que o flag não está setado (desabilitado). A ação em questão não sofreu nenhum tipo de alteração.

Page 34: Assemblyparte1 140320111308-phpapp02

Registrador de Estado● C = Carry (vai um / empresta um)● P = Parity● A = Auxiliary Carry● Z = Zero● S = Sign● T = Trap● I = Interrupt Enable● D = Direction● O = Overflow

Page 35: Assemblyparte1 140320111308-phpapp02

Registrador de Estado● Flags utilizadas para indicar os resultados obtidos em

operações aritméticas ou lógicas:

● CF = Carry Flag● PF = Paity Flag● AF = Auxiliar Flag● ZF = Zero Flag● SF = Signal Flag● OF = Overflow Flag

Page 36: Assemblyparte1 140320111308-phpapp02

Registrador de Estado● Flags utilizados para as tarefas de controle:

● TF = Trap Flag● IF = Interrput Flag● DF = Direction Flag

Page 37: Assemblyparte1 140320111308-phpapp02

CF (bit 0)● Passa para o valor 1 quando a operação

aritmética ultrapassar a capacidade de armazenamento daquele valor (quando precisar do VAI UM ou EMPRESTA UM)

● Se não ocorrer nenhuma movimentação de VAI UM ou EMPRESTA UM, então o valor será 0.

● Exemplo: 255 + 1 = 256. Se a faixa de valores é de 0 a 255, então o resultado está fora, e o flag CF sofre a mudança para 1.

Page 38: Assemblyparte1 140320111308-phpapp02

PF (bit 2)● Indica se a paridade do byte inferior do

resultado é par ou ímpar após a execução de uma operação aritmética ou lógica resultar ou não um par de bits 1

● 1: paridade par● 0: paridade ímpar

Page 39: Assemblyparte1 140320111308-phpapp02

AF (bit 4)● Indica a sinalização de carry do bit 3 para o bit 4

de uma adição com valores decimais (vai um)● Indica a sinalização de carry do bit 4 para o bit 3

de uma subtração com valores decimais (empresta um)

● Ambos são representados por sequencias numericas escritas em formato BINARY CODE DECIMAL (BCD)

● 1: ocorreu a operação de vai um● 0: não ocorreu a operação de vai um

Page 40: Assemblyparte1 140320111308-phpapp02

ZF (bit 6)● 1: indica se o resultado após uma operação

aritmética ou lógica é igual a zero ● 0: indica se o resultado após uma operação

aritmética ou lógica é diferente de zero ● Usado também para obtenção de resultado

de comparação após uma ação lógica● Se os valores comparados forem iguais é

sinalizado com o valor 1

Page 41: Assemblyparte1 140320111308-phpapp02

SF (bit 7)● Mostra a obtenção de um resultado negativo

ou positivo após uma operação aritmética de complemento 2, não ocorrendo o estouro (overflow)

● 0: resultado positivo● 1: resultado negativo

Page 42: Assemblyparte1 140320111308-phpapp02

TF (bit 8)● Possibilita uma interrupção especial após

executar uma única instrução, com a finalidade de acompanhar passo a passo a execução individual das instruções de um determinado programa em operações de debug

● 1: indica a execução da ação passo a passo da própria instrução em foco. Após essa ação ocorre uma interrupção e seu valor torna-se zero.

● 0: se estiver em zero ocorre o contrário

Page 43: Assemblyparte1 140320111308-phpapp02

IF (bit 9)● Habilita ou desabilita o reconhecimento à

chamada de interrupções por meio da instrução INT.

● 1: se estiver uma ocorrência de interrupção habilitada

● 0: se não estiver uma ocorrência de interrupção habilitada

Page 44: Assemblyparte1 140320111308-phpapp02

DF (bit 10)● Aponta a direção das operações de

manipulação de blocos da direita para a esquerda ou vice-versa em string.

● 0: indica que os registradores de índice serão incrementados

● 1: indica que os registradores de índice serão decrementados

Page 45: Assemblyparte1 140320111308-phpapp02

OF (bit 11)● Indica a obtenção de um valor muito grande após uma

operação aritmética ou lógica● Estouro de capacidade quando um número positivo

for muito grande ou um número negativo for muito pequeno para ser processado

● Estouro da capacidade quando os valores estão fora da faixa de valores permitida para a operação do microprocessador

● 0: quando ocorrer o estouro● 1: quando não ocorrer

Page 46: Assemblyparte1 140320111308-phpapp02

INTERRUPÇÕES● Ação do computador executar suas tarefas e

ter a capacidade de interrompê-las a quaisquer momento, para realizar outras tarefas solicitadas, retornando ao que estava fazendo anteriormente

● Extremamente importante para o fucionamento ADEQUADO de um COMPUTADOR

Page 47: Assemblyparte1 140320111308-phpapp02

INTERRUPÇÕES● Interrupções tornam possível controlar

vários dispositivos associados ao computador

● O funcionamento da interrupção ocorre pela comunicação entre dispositivos externos e o microprocessador

● INT: ● instrução utilizada para interrupções

Page 48: Assemblyparte1 140320111308-phpapp02

INTERRUPÇÕES● Faixa de valores de INT:

● 00h – FFh (número hexadecimal)● Total de 256 interrupções possíveis● Tabela de interrupções:

● Fica armazenada nos primeiros 1024 bytes da memória (endereço físico de 0 a 1023)

● É um conjunto de vetores indexados aos registradores CS e IP

● Cada vetor ocupa 4 bytes (2 bytes para cada registrador)

Page 49: Assemblyparte1 140320111308-phpapp02

INTERRUPÇÕES● ISR:

● Interrupt Service Routine – outro nome para a tabela de interrupções

● Possui o endereço das funções de cada uma das interrupções existentes

● Três categorias:● Interrupção por hardware● Interrupção por exceção● Interrupção por software

Page 50: Assemblyparte1 140320111308-phpapp02

INTERRUPÇÃO POR HARDWARE● Possibilita acionar periféricos externos● Faixa de valores:

● 08h a 0Fh● IRQ:

● Interrupt request● Linha pela qual a interrupção se conecta com

o microprocessador● São controladas por rotinas do S.O. ou da

ROM-BIOS

Page 51: Assemblyparte1 140320111308-phpapp02

INTERRUPÇÃO POR HARDWARE● Máximo de dispositivos externos: oito (se for

um microprocessador intel 8086. processadores mais atuais manipulam mais dispositivos)

● Este tipo de interrupção é gerenciada pelo próprio comptuador

● Não é possível mudar seu estado de comportamento

Page 52: Assemblyparte1 140320111308-phpapp02

INTERRUPÇÕES POR HARDWARE● 08h: IRQ0. Opera o chip temporizador do

sistema. ● 09h: IRQ1. Opera o teclado.● 0Ah: IRQ2. Interrupção reservada.● 0Bh: IRQ3. Opera as portas de comunicação

COM2.● 0Ch: IRQ4. Opera as portas de comunicação

COM1

Page 53: Assemblyparte1 140320111308-phpapp02

INTERRUPÇÕES POR HARDWARE● 0Dh: IRQ5. Opera uma unidade de disco.● 0Eh: IRQ6. Opera unidade de discos flexíveis.● 0Fh: IRQ7. Opera porta LPT1 para impressora

do tipo paralela

Page 54: Assemblyparte1 140320111308-phpapp02

INTERRUPÇÃO POR EXCEÇÃO● Possibilita fazer o controle condicional interno

do microprocessador, retornando algum tipo de erro

● Exemplo: divisão por zero● Faixa de valores: 0 a 7● Oito tipos de interrupções

Page 55: Assemblyparte1 140320111308-phpapp02

INTERRUPÇÃO POR EXCEÇÃO● 00h: falha de divisão quando o divisor é igual a zero● 01h: execução passo a passo num processo de debug

quando FLAG TF é setado● 02h: interrupção reservada para a condição de

operação para NMI (Non Maskable Interrupt)● 03h: ocorre na definição da execução de um ponto de

parada (Breakpoint) sobre a execução da instrução INT3

● 04h: ocorre quando há estouro registrado no FLAG OF quando da execução da instrução INTO

Page 56: Assemblyparte1 140320111308-phpapp02

INTERRUPÇÃO POR SOFTWARE

● Efetua o acionamento de determinadas interrupções desejas por intermédio de um programa em execução, podendo interferir na ação de algum periférico conectado ao microcomputador

● As interrupções mais utilizadas são as da ROM-BIOS

Page 57: Assemblyparte1 140320111308-phpapp02

INTERRUPÇÃO POR SOFTWARE

● 10h: escrita de caractere no monitor de vídeo

● 13h: operações de leitura e escrita em disco● 14h: comunicação com porta serial● 16h: leitura de caractere no teclado● 17h: operações com impressora● 19h: ação de reset

Page 58: Assemblyparte1 140320111308-phpapp02

INTERRUPÇÃO POR SOFTWARE

● 1Ah: retorna a hora do sistema● 20h: finaliza a operação do sistema● 21h: operações de leitura e escrita nos

periféricos padrão conectados ao sistema● 33h: utilização do mouse

Page 59: Assemblyparte1 140320111308-phpapp02

SEGMENTOS E DESLOCAMENTOS● Memória: tabela de dados● Linhas: segmentos● Colunas: deslocamentos (OFFSET)● Capacidade de endereçar uma memória de

até 1MB dividida em 16 blocos com 64KB● Cada bloco de memória é denominado

segmento de memória● São numerados de 0 a F em hexadecimal

Page 60: Assemblyparte1 140320111308-phpapp02

SEGMENTOS E DESLOCAMENTOS● Os segmentos de memória são endereçados

de 00000h (1º) a FFFFFh (último)● O endereço físico é formado por cinco digitos● 0xxxh referencia o segmento 0h● 1xxxxh referencia o segmento 1h● Os segmentos são divididos por

deslocamentos● Deslocamentos variam de 0yyyyh a Fyyyyh

Page 61: Assemblyparte1 140320111308-phpapp02

SEGMENTOS E DESLOCAMENTOS● Cada posição de deslocamento tem um total

de 16 bits que são manipulados pelos registradores de segmentos

● O segmento de memória é dividido em duas partes:

● 1ª parte: um segmento de 16 bits● 2ª parte: um deslocamento de 4 bits● Total do endereço de memória: 20 bits

Page 62: Assemblyparte1 140320111308-phpapp02

SEGMENTOS E DESLOCAMENTOS● A posição de memória a ser especificada é

definida pelo valor do segmento e pelo seu deslocamento em relação ao início do segmento

● REPRESENTAÇÃO:● xxxzh:yyyyh● segmento:deslocamento● Xxxxh: endereço do segmento● Yyyyyh: posição do deslocamento desejado

Page 63: Assemblyparte1 140320111308-phpapp02

SEGMENTOS E DESLOCAMENTOS

Page 64: Assemblyparte1 140320111308-phpapp02

SEGMENTOS E DESLOCAMENTOS

A Figura apresenta uma memória que está armazenando o seguinte texto:“Aprender assembly requer atenção e dedicação”“editora érica ltda”“Quem descobriu o Brasil foi Pedro Álvares Cabral”“D. Pedro I proclamou a independencia”

Page 65: Assemblyparte1 140320111308-phpapp02

SEGMENTOS E DESLOCAMENTOS

O armazenamento de dados na memória ocorre de forma contígua (um dado após o outro)Cada dado ocupa UMA posição de DESLOCAMENTO em relação à UM posição de SEGMENTOO que está no endereço 2h:Eh? Até onde se estende?

Page 66: Assemblyparte1 140320111308-phpapp02

SEGMENTOS E DESLOCAMENTOS

O endereço final será 2Eh. Este é o valor efeitvo. Para se obtê-lo faça 16d (decimal) ou 10h vezes o valor do segmento e some o valor do deslocamento. Portanto: 2h * 10h + Eh = 2Eh

Page 67: Assemblyparte1 140320111308-phpapp02

SEGMENTOS E DESLOCAMENTOS

EXEMPLO DE MEMÓRIA: TABELA DE DADOS

 

DESLOCAMENTOS00000

h00001

h00002

h00003

h00004

h00005

h00006

h00007

h00008

h00009

h0000A

h0000B

h0000C

h0000D

h0000E

h0000F

h0h 1h 2h 3h 4h 5h 6h 7h 8h 9h Ah Bh Ch Dh Eh Fh0 1 2 3 4 5 6 7 8 9 A B C D E F

4 bits 4 bits 4 bits 4 bits 4 bits 4 bits 4 bits 4 bits 4 bits 4 bits 4 bits 4 bits 4 bits 4 bits 4 bits 4 bits

TOTAL

DE 64KB

SEG

MENTOS

00000h 0h 0 16 bits                                

00001h 1h 1 16 bits                                

00002h 2h 2 16 bits                                

00003h 3h 3 16 bits                                

00004h 4h 4 16 bits                                

00005h 5h 5 16 bits                                

00006h 6h 6 16 bits                                

00007h 7h 7 16 bits                                

00008h 8h 8 16 bits                                

00009h 9h 9 16 bits                                

0000Ah Ah A 16 bits                                

0000Bh Bh B 16 bits                                

0000Ch Ch C 16 bits                                

0000Dh Dh D 16 bits                                

0000Eh Eh E 16 bits                                

0000Fh Fh F 16 bits                                

Page 68: Assemblyparte1 140320111308-phpapp02

Endereçamento de Memória● Função primária: armazenar dados● Formada por um grande conjunto de células

de armazenamento● Cada célula é formada por um conjunto de 8

bits● Pode assumir 256 significados● Cada célula tem um endereço absoluto de

posição

Page 69: Assemblyparte1 140320111308-phpapp02

Endereçamento de Memória● Cada posição é individual, tem um valor

numérico que representa seu endereço● Em um processador intel 8086 seu

endereçamento máximo está na casa dos 640KB

● A região de memória vai de 0KB a 640KB● Essa região toda está dividida em várias

partes reservadas

Page 70: Assemblyparte1 140320111308-phpapp02

Endereçamento de Memória

Page 71: Assemblyparte1 140320111308-phpapp02

Endereçamento de Memória● A área de memória livre para trabalho é

menor que 640KB● 1,5KB dos 640KB é reservado ● O espaço também é utilizado pelos arquivos

de controle do sistema● Informações temporárias dos programas

BIOS e vídeo devem ser armazenadas em memória RAM (mesmo que eles estejam gravados em memória ROM)

Page 72: Assemblyparte1 140320111308-phpapp02

ASSEMBLY● Denominações semelhantes:

● ASM86● X86● ASM8086

● Todos os microprocessadores da família INTEL possuem basicamente o mesmo conjunto de instruções existentes no padrão do microprocessador 8086 e 8088

Page 73: Assemblyparte1 140320111308-phpapp02

ASSEMBLY● Assembly 8086 possui 116 instruções

(mnemonicos) diferentes destinadas ao controle do microprocessadores

● Os outros microprocessadores INTEL possuem novas, e mais, instruções a cada novo lançamento

Page 74: Assemblyparte1 140320111308-phpapp02

ASSEMBLY● Seis grupos funcionais:

● Transferência de dados● Aritméticas● Manipulação de bits● Manipulação de strings● Controle de programa● Controle do microprocessadores

Page 75: Assemblyparte1 140320111308-phpapp02

TRANSFERENCIA DE DADOS● Instruções destinadas à movimentação de

dados● Podem ser movimentados:

● Entre registradores● Entre registradores e posições de

memória● Entre registradores e unidades de entrada

e saída

Page 76: Assemblyparte1 140320111308-phpapp02

ARITMÉTICAS● Instruções destinadas aos cálculos

matemáticos básicos:● Adição● Subtração● Multiplicação ● Divisão

Page 77: Assemblyparte1 140320111308-phpapp02

MANIPULAÇÃO DE BITS● Instruções que fazem o deslocamento de bits

em um registrador ou posição de memória● As funções de operações lógicas de

conjunção (ou), disjunção (e) e negação são incluídas neste grupo

Page 78: Assemblyparte1 140320111308-phpapp02

MANIPULAÇÃO DE STRINGS● Fazem o controle de grupos de sequencias

de caracteres● Comparação● Análise● Movimentação

Page 79: Assemblyparte1 140320111308-phpapp02

CONTROLE DE PROGRAMA● Instruções que controlam a execução do

código de programa● Pode ser:

● Execução sequencial● Com laços● Sub-rotinas● Subprogramas

Page 80: Assemblyparte1 140320111308-phpapp02

CONTROLE DE PROGRAMA● Podem manipular as interrupções de um

programa em execução● A interrupção ocorre por vários motivos.

Exemplo: ● Aceitar uma entrada de dados via teclado. ● É necessário fazer uma interrupção no

programa, para que o dado possa ser digitado, e após aceitar o dado continua sua execução

Page 81: Assemblyparte1 140320111308-phpapp02

CONTROLE DE MICROPROCESSADOR● Instruções que possibilitam o acesso dos

registradores de controle do microprocessador com o objetivo de mudar seu estado de comportamento