organização básica de computadores e linguagem de...
Post on 06-Jan-2019
212 Views
Preview:
TRANSCRIPT
Descritor de instruções na apostila
Capítulo 3
O processador Faíska
Neste capítulo iniciaremos o estudo mais detalhado do repertório de instruções do
processador Faíska, ilustrando com exemplos de trechos de programas o uso das
diversas instruções. As instruções serão apresentadas usando um descritor no for-
mato de uma tabela, como o mostrado na Figura 3, contendo o mnemônico da ins-
trução em destaque em uma aba (MNE na figura), o nome, a sintaxe do comando
correspondente em linguagem de montagem, a operação descrita de forma sucinta,
e a codificação. O descritor inclui também um campo Flags, cujo significado será
introduzido mais adiante, na Seção 3.2.1.
MNE
Nome da instrução
Sintaxe Operação Flags Codificação
31 0
Figura 3.1: Formato do descritor de instruções
As instruções serão apresentadas em grupos: transferência de dados, operações
aritméticas, instruções para controle de fluxo e operações lógicas.
3.1 Transferência de dados
Instruções de transferência de dados são as que permitem a transferência de dados
entre dois registradores do processador ou entre a memória e um registrador. Um
exemplo de instrução de transferência de dados é a instrução “carrega registrador
7
Tipos de Instruções
• Instruções para transferência de dados–Entre registradores e entre memória e registradores
• Instruções aritméticas• Instruções lógicas• Instruções de desvio• Entrada e Saída
Tranferência de dados entre registradores
8 CAPÍTULO 3. O PROCESSADOR FAÍSKA
com valor imediato”, que já foi introduzida no capítulo anterior. Nesta seção iremos
estudar as outras instruções para transferência de dados do repertório de instruções
do Faíska.
3.1.1 Transferência entre registradores
Os operandos para instruções de transferência entre registradores são sempre dois
registradores: o registrador destino (operando mais à esquerda) e o registrador fonte
(operando mais à direita). A operação executada é muito simples: o valor do regis-
trador fonte é copiado para o registrador destino.
MOV
Carrega registrador com registrador
Sintaxe Operação Flags Codificação
mov rdest, rfonte rdest ← rfonte –31 0
00 rdest rfonte
Qualquer dos registradores de propósito geral do Faíska (r0 a r15) pode ser
usado como registrador destino ou fonte.
Exemplo 1
1 ; exemplo de instrução que copia o valor de um2 ; registrador para outro34 mov r1, r5 ; essa instrução é codificada usando uma5 ; palavra: 00000105h6
Antes
00 00 01 05 00100h
000fch
00104h
ff ff ff ffr1Memória
11 11 11 11r5
00 00 01 00ip
Processador
Tranferência de dados entre registradores
• Exemplo
mov r1, r5 ; Em ling. de máquina: 00000105h
8 CAPÍTULO 3. O PROCESSADOR FAÍSKA
com valor imediato”, que já foi introduzida no capítulo anterior. Nesta seção iremos
estudar as outras instruções para transferência de dados do repertório de instruções
do Faíska.
3.1.1 Transferência entre registradores
Os operandos para instruções de transferência entre registradores são sempre dois
registradores: o registrador destino (operando mais à esquerda) e o registrador fonte
(operando mais à direita). A operação executada é muito simples: o valor do regis-
trador fonte é copiado para o registrador destino.
MOV
Carrega registrador com registrador
Sintaxe Operação Flags Codificação
mov rdest, rfonte rdest ← rfonte –31 0
00 rdest rfonte
Qualquer dos registradores de propósito geral do Faíska (r0 a r15) pode ser
usado como registrador destino ou fonte.
Exemplo 1
1 ; exemplo de instrução que copia o valor de um2 ; registrador para outro34 mov r1, r5 ; essa instrução é codificada usando uma5 ; palavra: 00000105h6
Antes
00 00 01 05 00100h
000fch
00104h
ff ff ff ffr1Memória
11 11 11 11r5
00 00 01 00ip
Processador
Tranferência de dados entre registradores
• Exemplo
mov r1, r5 ; Em ling. de máquina: 00000105h
8 CAPÍTULO 3. O PROCESSADOR FAÍSKA
com valor imediato”, que já foi introduzida no capítulo anterior. Nesta seção iremos
estudar as outras instruções para transferência de dados do repertório de instruções
do Faíska.
3.1.1 Transferência entre registradores
Os operandos para instruções de transferência entre registradores são sempre dois
registradores: o registrador destino (operando mais à esquerda) e o registrador fonte
(operando mais à direita). A operação executada é muito simples: o valor do regis-
trador fonte é copiado para o registrador destino.
MOV
Carrega registrador com registrador
Sintaxe Operação Flags Codificação
mov rdest, rfonte rdest ← rfonte –31 0
00 rdest rfonte
Qualquer dos registradores de propósito geral do Faíska (r0 a r15) pode ser
usado como registrador destino ou fonte.
Exemplo 1
1 ; exemplo de instrução que copia o valor de um2 ; registrador para outro34 mov r1, r5 ; essa instrução é codificada usando uma5 ; palavra: 00000105h6
Antes
00 00 01 05 00100h
000fch
00104h
ff ff ff ffr1Memória
11 11 11 11r5
00 00 01 00ip
Processador
3.1. TRANSFERÊNCIA DE DADOS 9
Depois
00 00 01 05 00100h
000fch
00104h
11 11 11 11r1Memória
11 11 11 11r5
00 00 01 04ip
Processador
No exemplo acima são mostrados o estado antes e após a execução do trecho
de programa em linguagem de montagem, tanto do processador como da memória.
Em todos os exemplos seguintes o mesmo esquema será utilizado. No processador
são mostrados apenas os registradores importantes para entender a execução do
trecho de programa; os registradores e posições de memória que tiveram seus valores
alterados são mostrados em tom cinza após a execução.
3.1.2 Transferência da Memória para um registrador
O Faíska possui diferentes instruções para transferência de valores da memória para
um registrador, cada uma com modos de endereçamento distintos. As instruções de
transferência da memória para registrador no Faíska utilizam três modos de endere-
çamento: endereçamento imediato, endereçamento direto e endereçamento indireto
por registrador.
Carrega registrador com endereçamento imediato
No endereçamento imediato, o valor do operando faz parte do próprio código da ins-
trução. Na instrução “carrega registrador com endereçamento imediato” o registra-
dor destino é carregado com o valor do operando. E como o valor do operando é
codificado na própria instrução, o valor carregado no registrador é sempre o mesmo.
Em outras palavras, sempre que uma particular instrução desse tipo for executada,
o registrador destino será carregado sempre com o mesmo valor. Dessa forma, essa
instrução é utilizada para carregar um valor constante no registrador destino. Com-
pare o efeito dessa instrução com a instrução “carrega registrador com endereça-
mento direto”, introduzida no capítulo anterior. No endereçamento direto, o valor
carregado no registrador é o valor corrente de uma posição de memória. Como esse
valor pode ser alterado pelo programa, uma mesma instrução “carrega registrador
com endereçamento direto” pode carregar diferentes valores no registrador destino
a cada vez que é executada.
O Faíska possui duas instruções de carga de registrador com endereçamento
imediato: uma em que a constante é codificada em apenas um byte e uma em que
Tranferência de dados entre Mem. e Reg.
• Leitura: copiar dados da memória para registradores. Instruções de carga, ou load
• Escrita: copiar dados de registradores para memória. Instruções de armazenamento, ou store
• A instrução de load ou store tem que especificicar o registrador e a posição de memória:–Registrador vai em rd ou rf.–E a posição de memória vai em...
Tranferência de dados entre Mem. e Reg.
• E a posição de memória vai em... –Depende do modo de endereçamento.
• Modo de endereçamento imediato• Modo de endereçamento direto• Modo de endereçamento indireto por
registrador–Modo de endereçamento indireto por registrador com deslocamento
Tranferência de dados entre Mem. e Reg.
• Endereçamento imediato
• O valor está codificado na própria instrução. –É uma constante
• Duas codificações distintas–Valor pode ser representado em uma palavra–Valor pode ser representado em um byte
Tranferência de dados entre Mem. e Reg.
• Endereçamento imediato: set10 CAPÍTULO 3. O PROCESSADOR FAÍSKA
SET
Carrega registrador com endereçamento imediato
Sintaxe Operação Flags Codificação
set rdest, expr8 rdest ← ext(imd8) –31 0
01 imd8 rdest
set rdest, expr32 rdest ← imd32 –
31 0
02 rdest
31 0
imd32
a constante é codificada em 32 bits. No caso em que a constante é codificada em 32
bits, a instrução ocupa duas palavras. Para constantes que podem ser representadas
em 8 bits, a instrução utiliza o campo imd8 para armazenar a constante como um
inteiro com sinal em complemento de dois. Assim, esta forma só permite carregar
constantes entre−128 e 127. Como veremos, na programação em linguagem de mon-
tagem muitas vezes utilizamos constantes dentro desse intervalo, o que nos permite
utilizar a forma mais econômica com bastante freqüência. É importante notar que
todos os 32 bits do registrador destino são carregados pela instrução set, mesmo na
sua forma mais curta. Nesse caso, quando um valor imd8 positivo é carregado em
um registrador, os 24 bits mais significativos do registrador são zerados. Quando o
campo imd8 tem um valor negativo, os 24 bits mais significativos do registrador des-
tino recebem o valor 1, de forma a fazer com que o registrador tenha o valor negativo
correto. Ou seja, o bit de sinal do operando imd8 é estendido para os bits mais signi-
ficativos do registrador destino. O fato de que o bit de sinal de imd8 é estendido para
compor o valor de 32 bits é mostrado no campo operação do descritor pela expressão
ext(imd8).
Note que na descrição da sintaxe do comando em linguagem de montagem apa-
rece o termo expr8, que representa uma expressão inteira, que quando avaliada deve
resultar em um inteiro de 8 bits com sinal.
Exemplo 2
1 ; exemplo de instrução de carga de registrador com valor2 ; constante (endereçamento imediato)34 set r3, -1 ; instrução é codificada em uma5 ; palavra: 01ff0300h6
Tranferência de dados entre Mem. e Reg.
• Endereçamento imediato: set • Exemplo
; Se a constante cabe em 1 byte, a ; instrução é codificada em uma palavraset r3, -1 ; Em ling. de máq.: 01ff0300h
3.1. TRANSFERÊNCIA DE DADOS 11
Antes
22 22 22 22r3
Memória
00 00 10 00ip01000h
01004h
01 ff 03 00
Processador
Depois
ff ff ff ffr3
Memória
00 00 10 04ip01000h
01004h
01 ff 03 00
Processador
Exemplo 3
1 ; outros exemplos de instrução de carga de registrador com2 ; endereçamento imediato, com uma constante que não pode ser3 ; representada em 8 bits.45 set r9, 400h ; um valor que não pode ser6 ; representado em 8 bits7 ; código da instrução ocupa8 ; duas palavras:9 ; primeira palavra 02000900h
10 ; segunda palavra 00000400h11 set r12, var1 ; carrega endereço de var112 ; código da instrução ocupa13 ; duas palavras:14 ; primeira palavra 02000c00h15 ; segunda palavra 00070000h16 ...1718 org 70000h1920 var1: ds 4 ; uma variável qualquer21 ; montada no endereço 70000h
Tranferência de dados entre Mem. e Reg.
• Endereçamento imediato: set • Exemplo
; Se a constante não cabe em 1 byte, a ; instrução é codificada em duas palavrasset r3, 400h ; Em ling. de máq.: 02000300h ; 00000400h
Memória
10ch
108h
00 00 04 00h
Processador
22 22 22 22
ip
r3 02 00 03 00h
00 00 01 08
Tranferência de dados entre Mem. e Reg.
• Endereçamento direto
• A instrução contém o endereço do operando. –A instrução sempre lê do mesmo endereço de memória.•O endereço é sempre o mesmo (constante)•O dado na memória pode ser modificado.
Tranferência de dados entre Mem. e Reg.
• Endereçamento direto: ld (leitura)
3.1. TRANSFERÊNCIA DE DADOS 13
representada na codificação como imd32. No entanto, na maioria dos casos expr32 é
na realidade apenas um rótulo, associado a uma variável. O montador monta na
segunda palavra da instrução o endereço associado ao rótulo.
LD
Carrega registrador com endereçamento direto
Sintaxe Operação Flags Codificação
ld rdest, expr32 rdest ← mem[imd32] –
31 0
03 rdest
31 0
imd32
Note que para executar uma instrução ld o processador faz três acessos à me-
mória: um acesso no endereço do ip corrente, para a busca da primeira palavra da
instrução; outro acesso no endereço do ip corrente mais quatro, para a busca do en-
dereço do operando (imd32, segunda palavra da instrução); e ainda outro acesso para
a busca do valor operando (no endereço retirado no segundo acesso).
Exemplo 4
1 ; exemplo de instrução carrega registrador com2 ; endereçamento direto34 ld r10, cont ; exemplo de instrução ld5 ; código da instrução ocupa6 ; duas palavras:7 ; primeira palavra 03000a00h8 ; segunda palavra 00002000h9 ...
1011 org 2000h12 cont: ds 4 ; uma variável qualquer13 ; montada no endereço 2000h
Tranferência de dados entre Mem. e Reg.
• Endereçamento direto: ld (leitura) • Exemplo
... ld r10, cont... org 2000hcont: ds 4
Memória
00 00 20 00h
Processador
55 55 55 55
ip
r10 03 00 0a 00h
00 00 01 00
2000h22 22 22 22
104h
100h
Tranferência de dados entre Mem. e Reg.
• Endereçamento indireto por registrador: ld
• A instrução indica um registrador que contém o endereço de memória a ser lido. –A instrução pode ler de posições distintas da memória.
–A posição é determinada pelo conteúdo do registrador.
Tranferência de dados entre Mem. e Reg.
• Endereçamento indireto por registrador: ld
3.1. TRANSFERÊNCIA DE DADOS 15
LD
Carrega registrador com endereçamento indireto por registrador
Sintaxe Operação Flags Codificação
ld rdest, (rfonte) rdest ← mem[rfonte] –31 0
04 rdest rfonte
1 ; instrução carrega registrador com endereçamento2 ; indireto por registrador34 ld r6, (r5) ; código da instrução ocupa uma5 ; uma palavra: 04000605h
Antes
00 00 00 01 0300ch
03008h
03010h
00 00 30 0cr5
Memória
ff ff ff f0r6
00 00 01 acip
001ach
001b0h
04 00 06 05
Processador
Depois
00 00 00 01 0300ch
03008h
03010h
00 00 30 0cr5
Memória
00 00 00 01r6
00 00 01 b0ip
001ach
001b0h
04 00 06 05
Processador
Tranferência de dados entre Mem. e Reg.
• Endereçamento indireto por registrador: ld• Exemplo
... ld r6, (r5)...
Memória
...
Processador
00 00 30 0c
ip
r5
04 00 06 05h
00 00 01 ac
300ch00 00 00 01
1b0h
1achff ff ff f0r6
Tranferência de dados entre Mem. e Reg.
• Endereçamento indireto por registrador mais constante: ld
• A instrução indica um registrador rfonte e um deslocamento imd8. O valor de rfonte é adicionado ao deslocamento imd8 (com sinal) para definir o endereço a ser acessado.
Tranferência de dados entre Mem. e Reg.
• Endereçamento indireto por registrador mais constante: ld
16 CAPÍTULO 3. O PROCESSADOR FAÍSKA
Carrega registrador com endereçamento indireto por registrador mais uma
constante
A instrução “carrega registrador com endereçamento indireto por registrador mais
uma constante” é na verdade a mesma instrução que “carrega registrador com en-
dereçamento indireto por registrador”. Apresentamos as duas instruções separa-
damente apenas como forma mais didática de introduzir o modo de endereçamento
“indireto por registrador mais constante”. Nesse novo modo de endereçamento o ope-
rando fonte é uma expressão de adição, entre parênteses, em que um termo é o nome
de um registrador e o outro termo é uma expressão constante com valor entre −128
e 127. O termo constante é codificado no campo imd8; o endereço efetivo é calculado
efetuando a adição do valor do registrador com o valor de imd8 com o sinal esten-
dido. O fato de que o bit de sinal de imd8 é estendido para compor o valor de 32 bits
é mostrado no campo Operação do descritor pela expressão ext(imd8).
LD
Carrega registrador com endereçamento indireto por registrador mais
uma constante
Sintaxe Operação Flags Codificação
ld rdest, (rfonte + expr8)rdest ←
mem[rfonte + ext(imd8)]–
31 0
04 imd8 rdest rfonte
Exemplo 6
1 ; instrução carrega registrador com endereçamento2 ; indireto por registrador mais uma constante34 ld r2, (r3+8) ; código da instrução ocupa uma5 ; uma palavra: 04080605h6 ld r6, (r5-4) ; código da instrução ocupa uma7 ; uma palavra: 04fc02h
Tranferência de dados entre Mem. e Reg.
• Endereçamento indireto por registrador mais constante: ld
• Exemplo
... ld r6, (r5+4)...
Memória
...
Processador
00 00 30 0c
ip
r5
04 04 06 05h
00 00 01 b0
300ch00 00 00 01
1b4h
1b0hff ff ff f0r6
00 00 00 02 304ch
Tranferência de dados entre Mem. e Reg.
• Todas as instruções de leitura da memória tem uma versão de 1 byte: ldb
18 CAPÍTULO 3. O PROCESSADOR FAÍSKA
Transferência de bytes entre a memória e um registrador
Como é muito comum a necessidade de manipular valores de 8 bits (especialmente
caracteres), o Faíska inclui também instruções para carregar um byte da memória
em um registrador. Na instrução “Carrega registrador com byte da memória”, ape-
nas um byte é carregado da memória para o registrador destino. O byte carregado
é colocado nos 8 bits menos significativos do registrador destino; os 24 bits mais
significativos do registrador são zerados.
O mnemônico utilizado pelo montador é ldb; como no caso da instrução ld, há
dois modos de endereçamento possíveis: direto e indireto por registrador mais uma
constante.
LDB
Carrega registrador com byte da memória
Sintaxe Operação Flags Codificação
ldb rdest, expr32 rdest ← mem8[imd32] –
31 0
07 rdest
31 0
imd32
ldb rdest, (rfonte + expr8)rdest ←
mem8[rfonte + ext(imd8)]–
31 0
08 imd8 rdest rfonte
LDB
Carrega registrador com byte da memória
Sintaxe Operação Flags Codificação
ldb rdest, expr32 rdest ← mem8[imd32] –
31 0
07 rdest
31 0
imd32
ldb rdest, (rfonte + expr8)rdest ←
mem8[rfonte + ext(imd8)]–
31 0
08 imd8 rdest rfonte
Novamente, é interessante notar que os modos de endereçamento “indireto por
registrador” e “indireto por registrador mais uma constante” são implementados
Tranferência de dados entre Mem. e Reg.
• Para cada instrução de leitura de palavras da memória ld há uma instrução para escrita de palavras na memória st.
3.1. TRANSFERÊNCIA DE DADOS 21
ST
Armazena de registrador na memória
Sintaxe Operação Flags Codificação
st (rdest + expr8), rfontemem[rdest+ext(imd8)]←
rfonte–
31 0
05 rdest rfonte
st (rdest), expr32 mem[imd32]← rfonte –
31 0
06 rfonte
31 0
imd32
Armazena registrador em memória
Exemplo 8
1 ; exemplo de instrução armazena registrador na memória23 st var, r7 ; carrega byte cujo endereço4 ; é var5 ; código da instrução ocupa6 ; duas palavras:7 ; primeira palavra 05000007h8 ; segunda palavra 00001000h9 st (r4), r3 ; r5 tem endereço do byte que
10 ; queremos armazenar; código da11 ; instrução ocupa uma12 ; palavra: 06000403h1314 ...1516 org 1000h1718 var: ds 4 ; uma variável qualquer montada no19 ; endereço 1000h
Tranferência de dados entre Mem. e Reg.
• Para cada instrução de leitura de byte da memória ldb há uma instrução para escrita de byte na memória stb.3.1. TRANSFERÊNCIA DE DADOS 23
STB
Armazena byte de registrador na memória
Sintaxe Operação Flags Codificação
stb (rdest), rfonte rdest ← mem8[rfonte] –31 0
0a rdest rfonte
stb (rdest), expr32 mem8[imd32]← rfonte –
31 0
0a rdest
31 0
imd32
1 stb carac+2, r4 ; carrega byte cujo endereço2 ; é carac+23 ; código da instrução ocupa4 ; duas palavras:5 ; primeira palavra 09000004h6 ; segunda palavra 00002002h7 stb (r5), r2 ; r5 tem endereço do byte que8 ; queremos armazenar; código9 ; da instrução ocupa uma
10 ; palavra: 0a000502h1112 ...1314 org 2000h1516 carac:17 ds 8 ; uma variável qualquer que18 ; representa uma sequência de19 ; 8 bytes montada a partir do20 ; endereço 2000h
Exemplo// Trecho de programa em C
#define TAMANHO 256
int a, b;char c;
a = TAMANHO;b = a;c = ‘a’;
; Tradução para linguagem de ; montagem
TAMANHO equ 256
; reserva espaço para as variáveis org 20ha: ds 4b: ds 4c: ds 1 org 100h set r0, TAMANHO st a, r0 st b, r0 set r1, ‘a’ stb c, r1
Instruções Aritméticas: Add
26 CAPÍTULO 3. O PROCESSADOR FAÍSKA
ADD
Soma
Sintaxe Operação Flags Codificação
add rdest, expr8 rdest ← rdest + ext(imd8) CSZO
31 0
10 imd8 rdest
add rdest, rfonte rdest ← rdest + rfonte CSZO
31 0
11 rdest rfonte
3.2.1 Soma
Bits de estado
Note que na instrução add pela primeira vez o campo Flag do descritor de instrução
não está vazio, e contém quatro letras. Essas letras representam bits de estado (em
inglês, flags). No Faíska os bits de estado são:
• C: carry (vai-um). Ligado se operação causou vai-um (carry-out) ou vem-um
(carry-in), desligado caso contrário.
• Z: zero. Ligado se o resultado foi zero, desligado caso contrário.
• S: sinal. Cópia do bit mais significativo do resultado; considerando aritmética
com sinal, se S igual a zero, o número é maior ou igual a zero. Se S igual a 1,
resultado é negativo.
• O: overflow. Ligado se ocorreu estouro de campo; calculado como o ou-exclusivo
entre o vem-um e o vai-um do bit mais significativo do resultado.
No descritor de instruções o campo Flag indica quais os bits de estado são afe-
tados pela instrução; no caso da instrução add, todos os bits são afetados. Um bit
de estado guarda a informação do resultado da última instrução executada que o
afetou. Isto é, se uma instrução não afeta um determinado bit de estado, este per-
manece com o mesmo valor anterior à execução da instrução. Bits de estado não são
alterados por operações de transferência de dados.
Os bits de estado são armazenados em um registrador especial no Faíska, que
não é acessível através de instruções de carga. Nas figuras dos exemplos, esse regis-
trador especial é mostrado com o nome flags. Veremos mais adiante como os bits de
estado são utilizados para controlar o fluxo de execução de um programa.
Instruções Aritméticas: Add
• FLAGS (bits de estado): CZSO–C: carry (vai-um). Ligado somente se a operação causou vai-um (carry-out) ou vem-um (carry-in).
–Z: zero. Ligado somente se o resultado da operação foi zero.
–S: sinal. Cópia do bit mais significativo do resultado. Indica o sinal do resultado em operações de números com sinal.
–O: overflow. Ligado se ocorreu estouro de campo (sobrecarga)
Instruções Aritméticas: Add
• Exemplo... add r4, 1 add r1, r2...
3.2. INSTRUÇÕES ARITMÉTICAS 27
Exemplo 11 soma com endereçamento imediato e entre registradores.
1 add r4, 1 ; soma com valor imediato2 ; código da instrução ocupa3 ; uma palavra: 10010400h4 add r1, r2 ; soma dois registradores5 ; código da instrução ocupa6 ; uma palavra: 11000102h
00 03 00 00ip
Antes
80 00 11 11r1 Memória
80 00 00 abr2
00 ff ff ffr4 30000h
30004h
10 01 04 00
11 00 01 02
Processador
30008h
... 0 0 0 0flags
C S Z O
00 03 00 08ip
Depois
00 00 11 bcr1 Memória
80 00 00 abr2
01 00 00 00r4 30000h
30004h
10 01 04 00
11 00 01 02
Processador
30008h
... 1 0 0 1flags
C S Z O
3.2.2 Subtração
Exemplo 12 subtração com endereçamento imediato e entre registradores.
3.2. INSTRUÇÕES ARITMÉTICAS 27
Exemplo 11 soma com endereçamento imediato e entre registradores.
1 add r4, 1 ; soma com valor imediato2 ; código da instrução ocupa3 ; uma palavra: 10010400h4 add r1, r2 ; soma dois registradores5 ; código da instrução ocupa6 ; uma palavra: 11000102h
00 03 00 00ip
Antes
80 00 11 11r1 Memória
80 00 00 abr2
00 ff ff ffr4 30000h
30004h
10 01 04 00
11 00 01 02
Processador
30008h
... 0 0 0 0flags
C S Z O
00 03 00 08ip
Depois
00 00 11 bcr1 Memória
80 00 00 abr2
01 00 00 00r4 30000h
30004h
10 01 04 00
11 00 01 02
Processador
30008h
... 1 0 0 1flags
C S Z O
3.2.2 Subtração
Exemplo 12 subtração com endereçamento imediato e entre registradores.
Instruções Aritméticas: Sub
28 CAPÍTULO 3. O PROCESSADOR FAÍSKA
SUB
Subtração
Sintaxe Operação Flags Codificação
sub rdest, expr8 rdest ← rdest − ext(imd8) CSZO
31 0
12 imd8 rdest
sub rdest, rfonte rdest ← rdest − rfonte CSZO
31 0
13 rdest rfonte
1 sub r6, 1 ; soma com valor imediato2 ; código da instrução ocupa3 ; uma palavra: 12010600h4 sub r8, r7 ; soma registrador com registrador5 ; código da instrução ocupa6 ; uma palavra: 13000807h
00 05 00 00ip
Antes
10 00 00 00r6 Memória
ff ff ff ffr7
ff ff ff ffr8 50000h
50004h
12 01 06 00
13 00 08 07
Processador
50008h
... 0 0 0 0flags
C S Z O
Instruções Aritméticas: Sub
• Exemplo... sub r6, 1 sub r8, r7...
28 CAPÍTULO 3. O PROCESSADOR FAÍSKA
SUB
Subtração
Sintaxe Operação Flags Codificação
sub rdest, expr8 rdest ← rdest − ext(imd8) CSZO
31 0
12 imd8 rdest
sub rdest, rfonte rdest ← rdest − rfonte CSZO
31 0
13 rdest rfonte
1 sub r6, 1 ; soma com valor imediato2 ; código da instrução ocupa3 ; uma palavra: 12010600h4 sub r8, r7 ; soma registrador com registrador5 ; código da instrução ocupa6 ; uma palavra: 13000807h
00 05 00 00ip
Antes
10 00 00 00r6 Memória
ff ff ff ffr7
ff ff ff ffr8 50000h
50004h
12 01 06 00
13 00 08 07
Processador
50008h
... 0 0 0 0flags
C S Z O
28 CAPÍTULO 3. O PROCESSADOR FAÍSKA
SUB
Subtração
Sintaxe Operação Flags Codificação
sub rdest, expr8 rdest ← rdest − ext(imd8) CSZO
31 0
12 imd8 rdest
sub rdest, rfonte rdest ← rdest − rfonte CSZO
31 0
13 rdest rfonte
1 sub r6, 1 ; soma com valor imediato2 ; código da instrução ocupa3 ; uma palavra: 12010600h4 sub r8, r7 ; soma registrador com registrador5 ; código da instrução ocupa6 ; uma palavra: 13000807h
00 05 00 00ip
Antes
10 00 00 00r6 Memória
ff ff ff ffr7
ff ff ff ffr8 50000h
50004h
12 01 06 00
13 00 08 07
Processador
50008h
... 0 0 0 0flags
C S Z O
top related