Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Introdução ao Assembly: Memória e Endereçamento, Notas de estudo de Eletrônica

Aula 1 do curso de assembly por bruno diego da silva. Aprenda sobre a organização da memória em segmentos e o cálculo de endereços físicos.

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 09/02/2008

bruno-diego-10
bruno-diego-10 🇧🇷

5 documentos

1 / 5

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
ÕÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸
³ þ Curso de Assembly þ Aula N° 01 ³
ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ;
Por: Bruno Diego da Silva
ÕÍÍÍÍÍÍÍÍÍÍÍ͸
³ ASSEMBLY I ³
ÔÍÍÍÍÍÍÍÍÍÍÍ;
0 0
8 4
A linguagem ASSEMBLY (e n o assemblER!) d medo em muita gente!
0 0
8 4
0 0
8 4
S¢ n o sei porque! As liguagens ditas de "alto n¡vel" s o MUITO
mais complexas que o assembly! O programador assembly tem que
saber, antes de mais nada, como est organizada a mem¢ria da m quina
0 0
8 2
em que trabalha, a disponibilidade de rotinas pr -definidas na ROM
do micro (que facilita muito a vida de vez em quando!) e os demais
recursos que a m quina oferece.
0 0
8 7
0 0
8 4
Uma grande desvantagem do assembly com rela o as outras
0 0
8 2
0 0
8 4
linguagens que n o existe tipagem de dados como, por exemplo,
ponto-flutuante... O programador ter que desenvolver as suas
0 0
8 7
pr¢prias rotinas ou lan ar mao do co-processador matem tico (o TURBO
ASSEMBLER, da Borland, fornece uma maneira de emular o
0 0
8 4
0 0
8 7
0 0
9 4
co-processador). N o existem fun es de entrada-sa¡da como PRINT do
0 0
8 4
BASIC ou o Write() do PASCAL... N o existem rotinas que imprimam
0 0
8 2
0 0
8 4
dados num ricos ou strings na tela... Enfim... n o existe nada de
£til! (Ser ?! hehehe)
0 0
8 4
0 0
8 2
0 0
8 8
Pra que serve o assembly ent o? A resposta : Para que voc
possa desenvolver as suas pr¢prias rotinas, sem ter que topar com
0 0
8 7
0 0
9 4
bugs ou limita es de rotinas j existentes na ROM-BIOS ou no seu
compilador "C", "PASCAL" ou qualquer outro... Cabe aqui uma
0 0
8 7
0 0
8 4
0 0
9 0
considera o interessante: muito mais produtivo usarmos uma
liguagem de alto n¡vel juntamente com nossas rotinas em assembly...
0 0
8 7
0 0
8 4
0 0
8 4
Evita-se a "reinven o da roda" e n o temos que desenvolver TODAS as
rotinas necess rias para os nossos programas. Em particular, o
0 0
8 2
0 0
8 4
assembly muito £til quando queremos criar rotinas que n o existem
na liguagem de alto-n¡vel nativa! Uma rotina ASM bem desenvolvida
pode nos dar a vantagem da velocidade ou do tamanho mais reduzido em
nossos programas.
0 0
8 7
O primeiro passo para come ar a entender alguma coisa de
0 0
8 2
assembly entender como a CPU organiza a mem¢ria. Como no nosso
0 0
8 2
0 0
8 2
caso a id ia entender os microprocessadores da fam¡lia 80x86 da
Intel (presentes em qualquer PC-Compat¡vel), vamos dar uma olhadela
no modelamento de mem¢ria usado pelos PCs, funcionando sob o MS-DOS
(Windows, OS/2, UNIX, etc... usam outro tipo de modelamento...
MUITO MAIS COMPLICADO!).
ÕÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸
0 0
8 7
0 0
8 4
³ Modelamento REAL da mem¢ria - A segmenta o ³
ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ;
pf3
pf4
pf5

Pré-visualização parcial do texto

Baixe Introdução ao Assembly: Memória e Endereçamento e outras Notas de estudo em PDF para Eletrônica, somente na Docsity!

ÕÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸

³ þ Curso de Assembly þ Aula N° 01 ³ ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ;

Por: Bruno Diego da Silva

ÕÍÍÍÍÍÍÍÍÍÍÍ͸ ³ ASSEMBLY I ³ ÔÍÍÍÍÍÍÍÍÍÍÍ;

0 0 A linguagem ASSEMBLY (e n8 4 o assemblER!) d medo em muita gente! 0 0 8 4

0 0 S¢ n o sei porque! As liguagens ditas de "alto n¡vel" s8 4 o MUITO mais complexas que o assembly! O programador assembly tem que saber, antes de mais nada, como est organizada a mem¢ria da m quina 0 0 em que trabalha, a disponibilidade de rotinas pr8 2 -definidas na ROM do micro (que facilita muito a vida de vez em quando!) e os demais recursos que a m quina oferece.

0 0 8 7

0 0 Uma grande desvantagem do assembly com rela 0 0 (^) 8 4o as outras 8 2

0 0 linguagens que n8 4 o existe tipagem de dados como, por exemplo, ponto-flutuante... O programador ter que desenvolver as suas 0 0 pr¢prias rotinas ou lan8 7 ar mao do co-processador matem tico (o TURBO ASSEMBLER, da Borland, fornece uma maneira de emular o 0 0 8 4

0 0 8 7

0 0 co-processador). N o existem fun (^) 9 4es de entrada-sa¡da como PRINT do 0 0 BASIC ou o Write() do PASCAL... N 0 0 8 4 o existem rotinas que imprimam

8 2

0 0 dados num ricos ou strings na tela... Enfim... n8 4 o existe nada de £til! (Ser ?! hehehe)

0 0 8 4

0 0 8 2

0 0 Pra que serve o assembly ent o? A resposta : Para que voc8 8 possa desenvolver as suas pr¢prias rotinas, sem ter que topar com 0 0 8 7

0 0 bugs ou limita (^) 9 4es de rotinas j existentes na ROM-BIOS ou no seu compilador "C", "PASCAL" ou qualquer outro... Cabe aqui uma 0 0 8 7

0 0 8 4

0 0 considera o interessante: (^) 9 0 muito mais produtivo usarmos uma liguagem de alto n¡vel juntamente com nossas rotinas em assembly... 0 0 8 7

0 0 8 4

0 0 Evita-se a "reinven o da roda" e n8 4 o temos que desenvolver TODAS as rotinas necess rias para os nossos programas. Em particular, o 0 0 8 2

0 0 assembly muito £til quando queremos criar rotinas que n8 4 o existem na liguagem de alto-n¡vel nativa! Uma rotina ASM bem desenvolvida pode nos dar a vantagem da velocidade ou do tamanho mais reduzido em nossos programas.

0 0 O primeiro passo para come 0 0 8 7 ar a entender alguma coisa de assembly 0 0 (^) 8 2entender como a CPU organiza a mem¢ria. Como no nosso

8 2

0 0 caso a id ia (^) 8 2entender os microprocessadores da fam¡lia 80x86 da Intel (presentes em qualquer PC-Compat¡vel), vamos dar uma olhadela no modelamento de mem¢ria usado pelos PCs, funcionando sob o MS-DOS (Windows, OS/2, UNIX, etc... usam outro tipo de modelamento... MUITO MAIS COMPLICADO!).

ÕÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸

0 0 8 7

0 0 ³ Modelamento REAL da mem¢ria - A segmenta (^) 8 4o ³ ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ;

0 0 A mem¢ria de qualquer PC (^) 8 2dividida em segmentos. Cada segmento tem 64k bytes de tamanho (65536 bytes) e por mais estranho que 0 0 8 7

0 0 8 4

0 0 pare a os segmentos n o s8 4 o organizados de forma sequencial 0 0 8 4

0 0 (o segmento seguinte n 0 0 o come8 7 a logo ap¢s o anterior!). Existe uma sobreposi8 7 ao. De uma olhada:

64k

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

ÄÄ¿

ÚÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

ÄÄÂÄÄÄÄÄÄ¿

ÀÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

ÄÄÁÄÄÄÄÄÄÙ

0 1 2 <- Numero do segmento ÀÄÄÄÄÄÄÁÄÄÄÄÄÄÙ 16 16 bytes bytes

0 0 O segundo segmento come8 7 a exatamente 16 bytes depois do primeiro. Deu pra perceber que o inicio do segundo segmento est DENTRO do primeiro, j que os segmentos tem 64k de tamanho!

Este esquema biruta confunde bastante os programadores menos 0 0 experientes e, at8 2 hoje, ninguem sabe porque a Intel resolveu 0 0 8 8

0 0 utilizar essa coisa esquisita. Mas, paci ncia, (^) 8 2assim que a coisa funciona!

Para encontrarmos um determinado byte dentro de um segmento 0 0 precisamos fornecer o OFFSET (deslocamento, em ingl8 8 s) deste byte relativo ao inicio do segmento. Assim, se queremos localizar o 0 0 d8 2 cimo-quinto byte do segmento 0, basta especificar 0:15, ou seja, 0 0 8 7

0 0 8 4

0 0 segmento 0 e offset 15. Esta nota o (^) 8 2usada no restante deste e de outros artigos.

Na realidade a CPU faz o seguinte c lculo para encontrar o 0 0 8 7

0 0 "endere o f¡sico" ou "endere8 7 o efetivo" na mem¢ria:

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

ÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

0 0 ³ ENDERE8 0 O-EFETIVO = (SEGMENTO * 16) + OFFSET ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

0 0 8 2

0 0 8 4

0 0 þ Primeiro teriamos que obter mais digitos... 0 at 9 n o s8 4 o suficientes. Pegaremos mais 6 letras do alfabeto para suprir esta deficiencia.

0 0 8 7

0 0 8 4

0 0 þ Segundo, Tomemos como inspira o um od 0 0 9 3 metro (equipamento dispon¡vel em qualquer autom¢vel - (^) 8 2 o medidor de quilometragem!): Quando o algarismo mais a direita (o menos 0 0 significativo) chega a 9 e 0 0 (^) 8 2 incrementado, o que ocorre?... Retorna a 0 e o pr¢ximo (^) 8 2incrementado, formando o 10. No caso do sistema hexadecimal, isto s¢ acontece quando o £ltimo 0 0 8 7

0 0 algarismo alcan a F e (^) 8 2 incrementado! Depois do 9 vem o A, 0 0 depois o B, depois o C, e assim por diante... at8 2 chegar a vez do F e saltar para 0, incrementando o pr¢ximo algarismo, certo?

0 0 8 2

0 0 8 7

0 0 8 4

0 0 Como contar em base diferente de dez 0 0 uma situa o n8 4 o muito 8 4

0 0 intuitiva, vejamos a regra de convers o de bases. Come8 7 aremos pela base decimal para a hexadecimal. Tomemos o n£mero 1994 como 0 0 exemplo. A regra 0 0 (^) 8 2 simples: Divide-se 1994 por 16 (base hexadecimal) at8 2 que o quoeficiente seja zero... toma-se os restos e tem-se o n£mer convertido para hexadecimal:

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

ÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ 1994 / 16 -> Q=124, R=10 -> 10=A ³

³ 124 / 16 -> Q=7, R=12 -> 12=C ³

³ 7 / 16 -> Q=0, R=7 -> 7=7 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

ÄÄÄÄÄÄÄÄÄÄÄÄÙ

0 0 Toma-se ent8 4 o os restos de baixo para cima, formando o n£mero em hexadecimal. Neste caso, 1994=7CAh

Acrescente um 'h' no fim do n£mero para sabermos que se trata da base 16, do contr rio, se olharmos um n£mero "7CA" poderiamos 0 0 associa-lo a qualquer outra base num8 2 rica (base octadecimal por exemplo!)...

0 0 O processo inverso, hexa->decimal, (^) 8 2 mais simples... 0 0 basta escrever o n£mer, multiplicando cada digito pela pot8 8 ncia correta, levando-se em conta a equivalencia das letras com a base decimal:

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

ÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ 7CAh = (7 * 16^2) + (C * 16^1) + (A * 16^0) = ³ ³ (7 * 16^2) + (12 * 16^1) + (10 * 16^0) = ³ ³ 1792 + 192 + 10 = 1994 ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

As mesmas regras podem ser aplicadas para a base bin ria (que tem apenas dois digitos: 0 e 1). Por exemplo, o n£mero 12 em bin rio fica:

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

ÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

³ 12 / 2 -> Q=6, R=0 ³

³ 6 / 2 -> Q=3, R=0 ³

³ 3 / 2 -> Q=1, R=1 ³

³ 1 / 2 -> Q=0, R=1 ³

³ 12 = 1100b ³

ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

0 0 Cada digito na base bin ria 0 0 (^) 8 2conhecido como BIT (Binary digIT - ou digito bin rio, em ingl8 8 s)! Note o 'b' no fim do n£mero convertido...

0 0 Fa8 7 a o processo inverso... Converta 10100110b para decimal.

0 0 A vantagem de usarmos um n£mero em base hexadecimal (^) 8 2que cada digito hexadecimal equivale a exatamente quatro digitos bin rios! 0 0 Fa8 7 a as contas: Quatro bits podem conter apenas 16 n£meros (de 0 a 0 0 15), que (^) 8 2exatamente a quantidade de digitos na base hexadecimal. ?