Apostila Assembly UFRN
88 pág.

Apostila Assembly UFRN


DisciplinaTecnologias Web4.039 materiais12.560 seguidores
Pré-visualização26 páginas
de Endereçamento por Base 
 Arquitetura de Software de um Microprocessador 
© Anna Catharina/CEFET-RN/2000 38 
Regras para Especificação de Índices: 
 
 As seguintes regras devem ser observadas para endereçamento de dados: 
\uf077 os índices podem estar em qualquer ordem; 
\uf077 nomes de registradores devem estar sempre entre colchetes [ ]; 
\uf077 podem ser combinados nomes de registradores e números (endereços constantes) em 
um único par de colchetes [ ], desde que separados pelo sinal +; e 
\uf077 se o número vier antes do registrador, não é necessário usar o sinal +. 
 
 Notação mais recomendada: variável [registrador de base] [registrador de índice] + constante 
 Exemplos: A[BX][SI]+8 \uf0ba A[BX][SI+8] \uf0ba A[8+SI+BX] \uf0ba [A+SI+BX+8] 
 Matriz: A[BX][SI] \uf0ba [A+BX+SI] 
 Vetor: A[BX] ou A[SI] \uf0ba [BX+A] ou [A+SI] \uf0ba [BX+SI] (BX contém o endereço de A) 
 
4.4.6 Modo de Endereçamento Direto Indexado 
 
 Esse modo de endereçamento também é usado para manipulação de vetores e é feito 
utilizando-se os registradores SI ou DI como indexadores. Um deslocamento é somado a um 
desses registradores. 
 
Outro operando: deslocamento dado por um número (base) + um registrador de ponteiro 
de índice (deslocamento adicional). 
 
Exemplo (Figura 34): MOV DX, [0100h+SI] 
 DX \uf0ac (DS : 0100h+SI) 
[0100h+SI] = base (v) + deslocamento adicional (índice do elemento \uf0b4 número de bytes) 
 
 
E ndereço O pcode
(linguagem
de m áquina)
M neum ônico
(linguagem assem bly)
Segm ento de C ódigo
0101Eh X X Instrução anterior
0101Fh 8B M O V D X , [0100h+ SI]
01020h 94
01021h 00
01022h 01
01023h X X Próxim a instrução
Segm ento de D ados
13120h 45h LSB
13121h 1Fh M SB
0 0 1 FIP
0 1 0 0C S
1 3 0 0D S
x x x xD X
Situação anterior à
execução da instrução
0 0 2 3IP
0 1 0 0C S
1 3 0 0D S
0 0 2 0SI
Situação após a
execução da instrução
C S : IP
C S : IP
0 0 2 0SI
1 F 4 5D X
D S : (0100+ SI)
 
Figura 34 Modo de Endereçamento Indexado 
 Arquitetura de Software de um Microprocessador 
© Anna Catharina/CEFET-RN/2000 39 
4.4.7 Modo de Endereçamento por Base Indexada 
 
 Utilizado para a manipulação de matrizes na forma Amxn. Usa BX ou BP (quando estiver 
usando a pilha) para indicar o número da linha, e SI ou DI para o número da coluna. 
 
Outro operando: deslocamento dado por um número (base) + um registrador (número da 
linha) + um registador de ponteiro de índice (número da coluna), ou, alternativamente, um 
registrador (base) + um número (número da linha) + um registador de ponteiro de índice 
(número da coluna). 
 
 As matrizes, apesar de serem entendidas como dados bidimensionais, são armazenadas no 
segmento de dados de forma linear, linha a linha. Uma matriz A formada por m\uf0b4n elementos, 
possui representação matemática dada por 
 
A = 
nmmnmmm
n
aaaa
aaaa
\uf0b4
\uf0fa
\uf0fa
\uf0fa
\uf0fb
\uf0f9
\uf0ea
\uf0ea
\uf0ea
\uf0eb
\uf0e9
 
 
 
321
1131211
\uf04c
\uf04c\uf04c\uf04c\uf04c
\uf04c
 \uf0ba 
nm
]n][m[a ]3][m[a ]2][m[a ]1][m[a
 
]n][1[a ]3][1[a ]2][1[a ]1][1[a
\uf0b4
\uf0fa
\uf0fa
\uf0fa
\uf0fb
\uf0f9
\uf0ea
\uf0ea
\uf0ea
\uf0eb
\uf0e9
\uf04c
\uf04c\uf04c\uf04c\uf04c
\uf04c
 
 
e representação computacional equivalente dada por 
 
A =
nm
nmmmm
n
aaaa
aaaa
\uf0b4
\uf02d\uf02d\uf02d\uf02d\uf02d
\uf02d
\uf0fa
\uf0fa
\uf0fa
\uf0fb
\uf0f9
\uf0ea
\uf0ea
\uf0ea
\uf0eb
\uf0e9
)1(),1(2),1(1),1(0),1(
)1(0,0,20,10,0
 
 
 
\uf04c
\uf04c\uf04c\uf04c\uf04c
\uf04c 
 
ou, alternativamente, 
 
A = 
nm
nmamamama
naaaa
\uf0b4
\uf0fa
\uf0fa
\uf0fa
\uf0fb
\uf0f9
\uf0ea
\uf0ea
\uf0ea
\uf0eb
\uf0e9
\uf02d\uf02d\uf02d\uf02d\uf02d
\uf02d
]1][1[ ]2][1[ ]1][1[ ]0][1[
 
]1][0[ ]2][0[ ]1][0[ ]0][0[ 
\uf04c
\uf04c\uf04c\uf04c\uf04c
\uf04c 
 
podendo ser representada por um vetor correspondente, composto por m sub-vetores na forma 
 
A =
\uf0fa
\uf0fa
\uf0fa
\uf0fa
\uf0fb
\uf0f9
\uf0ea
\uf0ea
\uf0ea
\uf0ea
\uf0eb
\uf0e9
\uf02d ]1[
 
]1[ 
]0[ 
mA
A
A
\uf04c
 
no qual cada sub-vetor A[i] possui n elementos. 
 
 Para referenciar um elemento Aij \uf0ba A[i][j] de uma matriz A formada por m\uf0b4n elementos o 
processador utiliza, da mesma forma que para vetores, a noção de deslocamento. No caso de 
vetores, apenas um deslocamento adicional é suficiente para caracterizar um elemento. Para 
matrizes, no entanto, dois deslocamento são necessários: um para indicar o número da linha e 
outro para o número da coluna às quais o elemento pertence. Dessa forma, cada elemento da 
matriz é representado a partir do elemento inicial a[0][0] \uf0ba A+0+0 =A, adicionado de dois 
deslocamentos (linha+coluna). A Figura 35 ilustra o armazenamento e a representação de 
matrizes com elementos de 1 byte na memória, bem como o vetor linear correspondente a esta 
representação. 
 Arquitetura de Software de um Microprocessador 
© Anna Catharina/CEFET-RN/2000 40 
 De forma geral, para uma matriz cujos elementos são de b bytes, o elemento (i, j) será dado 
por: a[i][j] = A + i \uf0b4 n \uf0b4 b + j \uf0b4 b. 
 
Segm ento de D ados
m linhas R epresentação V etor C orrespondente
A [0] \uf0ae a[0][0] A + 0\uf0b4n+ 0 = Base v[0]
a[0][1] A + 0\uf0b4n+ 1 v[1]
. . . . . . . . .
a[0][n -1] A + 0\uf0b4n + (n-1) v[n-1]
A [1] \uf0ae a[1][0] A + 1\uf0b4n+ 0 v[(n-1)+ 1] = v[n ]
a[1][1] A + 1\uf0b4n + 1 v[(n-1)+ 2] = v[n+ 1]
. . . . . . . . .
a[1][n -1] A + 1\uf0b4n + (n-1) v[n+ (n-1)] = v[2n+ 1]
. . . . . . . . . . . .
A [m ] \uf0ae a[m -1][0] A + (m -1)\uf0b4 n+ 0 v[(m -1)\uf0b4n ]
a[m -1][1] A + (m -1)\uf0b4 n+ 1 v[(m -1)\uf0b4n+ 1]
. . . . . . . . .
a[m -1][n -1] A + (m -1)\uf0b4 n+ (n-1) v[(m -1)\uf0b4n+ (n-1)] = v[m\uf0b4n-1]
n colunas
n colunas
n colunas
 
Figura 35 Forma de armazenamento e representação de matrizes na memória 
 
Exemplo (Figura 36): MOV AH, [BX+0100h+SI] 
 AH \uf0ac (DS : (BX+0100h+SI)) 
[BX+0100h+SI] = linha \uf0b4 bytes + base (A) + coluna \uf0b4 bytes \uf0ba base (A) + linha \uf0b4 bytes + coluna \uf0b4 bytes 
 
 
0 1 0 0CS
1 3 0 0D S
5 1 2 0BX
Situação anterior à
execução da instrução
0 0 2 7IP
0 1 0 0CS
1 3 0 0D S
0 0 2 0SI
Situação após a
execução da instrução
CS : IP
CS : IP
0 0 3 1A X
5 1 2 0BX
D S : (0100+ BX + SI)
Endereço O pcode
(lingu agem
de m áqu ina)
M neu m ônico
(lingu agem assem bly)
Segm ento de C ódigo
01022h X X Instrução anterior
01023h 8B M O V A H , [BX + 0100h + SI]
01024h 80
01025h 00
01026h 01
01027h X X Próxim a instrução
Segm ento de D ados
18240h 11h
18241h A 3h
0 0 2 3IP
1 1 3 1A X
0 0 2 0SI
 
Figura 36 Modo de Endereçamento por Base Indexada 
 Programação em Linguagem Assembly 
© Anna Catharina/CEFET-RN/2000 41 
5 Programação em Linguagem Assembly 
5.1 Segmentação e Estrutura de Programação (Programa Básico) 
 
 As declarações de um programa fonte escrito em assembly (o que corresponde a cada 
linha de entrada) podem ser: 
\uf077 Comentários; 
\uf077 Instruções assembly (linguagem); ou 
\uf077 Diretivas do assembler (montador). 
 
 Os comentários permitem que explicações sobre determinadas linhas de programa sejam 
realizadas sem ocasionar erro de compilação. As instruções assembly indicam as ordens que 
devem ser executadas pela CPU e são transcrições (ou notações) simplificadas, que 
correspondem aos códigos binários das instruções de máquina. As diretivas do assembler 
(pseudo-operações) são comandos especiais com o objetivo de facilitar a escrita de um programa 
sob forma simbólica. Não são incorporadas ao programa objeto (extensão .obj) e servem 
simplesmente como orientação para o montador. Tanto as instruções assembly quanto as 
diretivas do assembler podem incluir operadores. Os operadores dão ao assembler informações 
adicionais acerca dos