Apostila Assembly UFRN
88 pág.

Apostila Assembly UFRN


DisciplinaOrganização de Computadores6.342 materiais119.301 seguidores
Pré-visualização26 páginas
por um deslocamento), geração do endereço físico correspondente 
ao deslocamento do dado no segmento correspondente (DS, ES ou SS), através da 
composição registrador de segmento : deslocamento. 
\uf077 Execução da instrução: Verificação das modificações em registradores e segmentos de 
memória. 
 
Algumas observações quanto à modificação em registradores devem ser feitas: 
\uf077 Os registradores de segmento (CS, DS, ES, SS) não modificam seu valor durante a 
execução de um programa a menos que seja feito algum redirecionamento. 
\uf077 O ponteiro de instrução (IP), aponta sempre para a instrução corrente, sendo 
incrementado automaticamente após a execução de uma instrução. O IP, portanto, 
não deve receber atribuições num programa. 
\uf077 O registrador SP aponta sempre para o topo da pilha e seu valor é alterado 
(incrementado ou decrementado) automaticamente após a execução de instruções 
para manipulação de pilha. 
\uf077 Os registradores AX, BX, CX, DX, SI, DI e BP podem receber atribuições e, dessa 
forma, ter seus valores alterados. 
\uf077 O registrador de flags (F) pode ser alterado a partir de atribuições (através das 
instruções para manipulação de flags) ou depois da execução de alguma instrução (flags 
de estado). 
 
 Uma observação importante deve ser feita quanto à utilização de variáveis. As variáveis, 
largamente utilizadas por linguagens de alto nível, nada mais são que simples representação de um 
deslocamento de memória. Dessa forma, todas as observações feitas para os modos de 
endereçamento que manipulam deslocamentos são válidas para utilização com variáveis. 
 Arquitetura de Software de um Microprocessador 
© Anna Catharina/CEFET-RN/2000 33 
4.4.1 Modo de Endereçamento por Registro 
 
No modo de endereçamento por registro, os dois operandos são registradores. 
 
Outro operando: registrador. 
 
Exemplo (Figura 28): MOV AX, BX 
 AX \uf0ac BX 
 
E ndereço O pcode
(linguagem
de m áquina)
M neum ônico
(linguagem assem bly)
Segm ento de C ódigo
01010h X X Instrução anterior
01011h 8B M O V AX , B X
01012h C 3
01013h X X Próxim a instrução
Situação anterior à
execução da instrução
0 0 1 3IP
0 1 0 0C S
1 2 3 4AX
1 2 3 4B X
Situação após a
execução da instrução
C S : IP
0 0 1 1IP
0 1 0 0C S
x x x xAX
1 2 3 4B X
C S : IP
0100\uf0b416+0011
 
Figura 28 Modo de Endereçamento por Registro 
 
 Arquitetura de Software de um Microprocessador 
© Anna Catharina/CEFET-RN/2000 34 
4.4.2 Modo de Endereçamento Imediato 
 
No modo de endereçamento imediato, um dos operandos está presente no byte seguinte 
ao código da instrução (opcode). Se bytes de endereçamento seguem o opcode, então o dado a ser 
transferido de maneira imediata virá logo após os bytes de endereçamento. 
 
Outro operando: número (dado imediato). 
 
Exemplo (Figura 29): MOV AL, 17h 
 AL \uf0ac 17h 
 
 
Endereço O pcode
(lingu agem
de m áqu ina)
M neu m ônico
(lingu agem assem bly)
Segm ento de C ódigo
01012h X X Instrução anterior
01013h B0 M O V A L, 17h
01014h 17
01015h X X Próxim a instrução
0 0 1 3IP
0 1 0 0CS
1 2 3 4A X
Situação anterior à
execução da instrução
0 0 1 5IP
0 1 0 0CS
1 2 1 7A X
Situação após a
execução da instrução
CS : IP
CS : IP
 
Figura 29 Modo de Endereçamento Imediato 
 
 Arquitetura de Software de um Microprocessador 
© Anna Catharina/CEFET-RN/2000 35 
4.4.3 Modo de Endereçamento Direto 
 
O modo de endereçamento direto é feito somando-se os dois bytes seguintes ao opcode ao 
DS, para compor um novo endereço absoluto. 
 
Outro operando: deslocamento dado por um número. 
 
O deslocamento pode ser o nome de uma variável, uma vez que uma variável é um rótulo 
de uma posição de memória de dados. 
 
Exemplo (Figura 30): MOV BX, [1102h] 
 BX \uf0ac (DS : 1102h) 
 
[ ] indica um deslocamento no segmento de dados (DS). 
Para fazer o endereçamento através de ES ou SS, o segmento deve ser especificado explicitamente. Por exemplo, 
MOV BX, (ES:1102h) 
 
 
Endereço O pcode
(lingu agem
de m áqu ina)
M neu m ônico
(lingu agem assem bly)
Segm ento de C ódigo
01014h X X Instrução anterior
01015h 8B M O V BX , [1102h ]
01016h 1E
01017h 02
01018h 11
01019h X X Próxim a instrução
Segm ento de D ados
14102h 20h LSB
14103h 51h M SB
0 0 1 5IP
0 1 0 0CS
1 3 0 0D S
1 2 3 4BX
Situação anterior à
execução da instrução
0 0 1 9IP
0 1 0 0CS
1 3 0 0D S
5 1 2 0BX
Situação após a
execução da instrução
CS : IP
CS : IP
D S : 1102
 
Figura 30 Modo de Endereçamento Direto 
 Arquitetura de Software de um Microprocessador 
© Anna Catharina/CEFET-RN/2000 36 
4.4.4 Modo de Endereçamento Indireto por Registro 
 
 Nesse modo de endereçamento, qualquer registrador pode ser utilizado. 
 
Outro operando: deslocamento dado por um registrador. 
 
Exemplo (Figura 31): MOV AX, [BX] 
 AX \uf0ac (DS : BX) 
 
BX aponta (ponteiro) para um dado no segmento de dados (DS). 
[BX] \u2013 conteúdo do endereço apontado por BX no segmento de dados. 
 
 
Endereço O pcode
(lingu agem
de m áqu ina)
M neu m ônico
(lingu agem assem bly)
Segm ento de C ódigo
01018h X X Instrução anterior
01019h 8B M O V A X , [BX ]
0101A h 07
0101Bh X X Próxim a instrução
Segm ento de D ados
18120h 31h LSB
18121h 00h M SB
0 0 1 BIP
0 1 0 0CS
1 3 0 0D S
5 1 2 0BX
Situação após a
execução da instrução
0 0 3 1A X
CS : IP
D S : BX
0 0 1 9IP
0 1 0 0CS
1 3 0 0D S
1 2 1 7A X
Situação anterior à
execução da instrução
CS : IP
5 1 2 0BX
 
Figura 31 Modo de Endereçamento Indireto por Registro 
 Arquitetura de Software de um Microprocessador 
© Anna Catharina/CEFET-RN/2000 37 
4.4.5 Modo de Endereçamento por Base 
 
Utilizado no tratamento de vetores. Apenas os registradores BX ou BP (quando estiver 
usando a pilha) podem ser utilizados como base. 
 
Os vetores são armazenados no segmento de dados de forma linear, de acordo com a 
ordem imposta pelos índices correspondentes. Para referenciar um elemento vi \uf0ba v[i] de um vetor 
v formado por n elementos 
v = {v0, v1, v2, ... , vn-1} \uf0ba {v[0], v[1], v[2], ... , v[n-1]} 
o processador utiliza a noção de deslocamento, que depende não somente do índice, mas 
também da quantidade de bytes de cada elemento. Dessa forma, cada elemento do vetor é 
representado a partir do elemento inicial v[0] \uf0ba v+0 = v, adicionado de um deslocamento. A 
Figura 32 ilustra a o armazenamento e a representação de vetores com elementos de 1 byte na 
memória. De forma geral, para um vetor cujos elementos são de b bytes, o elemento i será dado 
por: v[i] = v + i \uf0b4 b. 
 
Segm ento de D ados
v[0] v+ 0
v[1] v+ 1
v[2] v+ 2
. . .
v[n-1] v+ n-1
 
Figura 32 Forma de armazenamento e representação de vetores na memória 
 
Outro operando: deslocamento dado por um registrador (base) + número (deslocamento). 
 
Exemplo (Figura 33): MOV CX, [BX+0102h] CX \uf0ac (DS : (BX+0102h)) 
[BX+0102h] = base (v) + deslocamento adicional deslocamento adicional = índice \uf0b4 quantidade de bytes 
 
E ndereço O pcode
(linguagem
de m áquina)
M neum ônico
(linguagem assem bly)
Segm ento de C ódigo
0101A h X X Instrução anterior
0101B h 8B M O V C X , [B X + 0102h]
0101C h 8F
0101D h 02
0101E h 01
0101Fh X X Próxim a instrução
Segm ento de D ados
18222h FFh LSB
18223h 01h M SB
0 0 1 BIP
0 1 0 0C S
1 3 0 0D S
x x x xC X
Situação anterior à
execução da instrução
0 0 1 FIP
0 1 0 0C S
1 3 0 0D S
5 1 2 0B X
Situação após a
execução da instrução
C S : IP
C S : IP
5 1 2 0B X
0 1 F FC X
D S : (B X + 0102)
 
Figura 33 Modo