• Nenhum resultado encontrado

Sumário. Instruções assembly do C31

N/A
N/A
Protected

Academic year: 2021

Share "Sumário. Instruções assembly do C31"

Copied!
17
0
0

Texto

(1)

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

3ª aula teórica FEUP, 11 de M arço de 2005 1

Sumário

• O processador de sinal TMS320C31

– grupos de instruções assembly do C31

– grupos especiais de instruções assembly: “interlocked” e paralelas

– algumas simplificações permitidas na escrita do código assembly

• A Operação da “Pipeline” do C31

– conceito e estrutura

– conflitos de salto de registo e de memória

• Controlo do fluxo de programa no C31

– por software

• repetição de instruções

• saltos no programa

• chamadas a subrotinas (CALL, TRAP, RETURN)

– por hardware

• operações “interlocked”

• “reset” e interrupções

• Antevisão do 3º trabalho de laboratório

aula teórica

Instruções assembly do C31

• Vocacionadas para aplicações de processamento digital

de sinal e de cálculo intensivo

• Há 113 instruções que se podem estruturar em diversos

grupos funcionais:

– leitura e escrita (13),

– lógicas/aritméticas com dois operandos (35),

– lógicas/aritméticas com três operandos (17),

(2)

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

aula teórica

FEUP, 11 de M

arço de 2005

3

• Há ainda variantes de instruções base

– certas instruções admitem variantes em função da condição

especificada para o sufixo “cond” (e.g. LDIcond) e que se

relacionam com o estado de certos bits do registo de estado

(ST) que são, por sua vez, determinados pelo resultado de

operações aritméticas e lógicas anteriormente ocorridas. As

diferentes condições, seu significado e respectivas flags do

registo ST testadas indicam-se nas cinco tabelas seguintes.

Tabelas 1 e 2

NOTA: o “U” de

unconditional

pode ser omitido na instrução !

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

3ª aula teórica FEUP, 11 de M arço de 2005 4 Tabela 3 Tabelas 4 e 5

(3)

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

aula teórica

FEUP, 11 de M

arço de 2005

5

• Instruções de leitura e escrita

– permitem ler uma palavra de memória para registo

– permitem escrever uma palavra de registo para memória

– manipulam dados na “stack”

NOTA: as instruções LDFcond e LDIcond são adequadas para localizar um máximo ou mínimo num vector.

aula teórica

• Instruções lógicas/aritméticas com dois operandos

– os dois operandos traduzem um local fonte (

registo, valor imediato

(4)

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

aula teórica

FEUP, 11 de M

arço de 2005

7

• Instruções lógicas/aritméticas com 3 operandos

– os três operandos são representados por dois locais fonte e um

local destino que deverá ser sempre um registo

NOTA: esta tabela representa um sub-conjunto de instruções da tabela anterior, que admitem variantes de 2 e 3 operandos. Neste sentido, o caracter “3” pode ser omitido nas respectivas mnemónicas já que se destina sobretudo a melhorar a legibilidade.

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

aula teórica

FEUP, 11 de M

arço de 2005

8

• Instruções de controlo de programa

– afectam o fluxo de programa, por exemplo através de saltos

(“branch”) ou chamadas a rotinas (CALL), e permitem a

repetição de uma única linha de código (RPTS) ou um bloco de

linhas de código (RPTB)

NOTA: os modos “delayed” e “standard” nas instruções de salto do tipo “branch” prendem-se com a execução útil ou não de instruções na “pipeline” após a execução de um salto na sequência do código assembly. (ver § 7.2 do manual do C3x)

(5)

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

aula teórica

FEUP, 11 de M

arço de 2005

9

• Instruções de operação “interlocked”

– suportam o multiprocessamento através de comunicação e

sincronização entre vários processadores, com base no uso de

linhas externas dedicadas: XFØ e XF1

• Instruções de operações paralelas

– permitem executar concorrentemente duas instruções. As

instruções do par são escritas explicitamente no código fonte

em assembly como duas instruções separadas mas a segunda

é precedida por duas barras verticais ( || ), como se detalha

nas quatro tabelas seguintes:

aula teórica

Tabela 1

NOTA 1: Ao usarem-se instruções paralelas, deverá atender-se ao facto de uma instrução de par não poder utilizar o resultado da outra instrução do par. Este facto obriga normalmente a uma inicialização e conclusão adequadas de (ciclos de) operações paralelas.

NOTA 2: Como decorre da nota anterior, a ordem da sequência de instruções no par poderá ser irrelevante !

(6)

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

3ª aula teórica FEUP, 11 de M arço de 2005 11 Tabela 2 Tabela 3 Tabela 4 NOTA 1 : Sugere-se que os alunos disponham de cópias dos resumos detalhados de todas as instruções assembly que constam dos §13.2 (Instruction Set Summary) e §13.3 (Parallel Instruction Set Summary) do manual do C3x.

NOTA 2 : A descrição exaustiva de cada instrução individual deve ser procurada na seccção

“Individual Instruction

Description” do manual do C3x.

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

aula teórica

FEUP, 11 de M

arço de 2005

12

• Algumas simplificações na escrita do código assembly

ABSI

RØ, RØ

ABSI

ADDI3

RØ, R1, R2

ADDI

RØ, R1, R2

ADDI3 *ARØ(Ø), R1, R2

ADDI3 *ARØ, R1, R2

LDI *ARØ++(1), RØ

LDI

*ARØ++, RØ

BU

etiqueta

B

etiqueta

LDP @endereco, DP

LDP

@endereco

LDP @endereco

LDP

endereco

ADDI

STI

|| STI

|| ADDI

ADDI *ARØ , R2, R2

ADDI *ARØ , R2

|| MPYI *AR1 , RØ, RØ

|| MPYI *AR1 , RØ

(7)

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

3ª aula teórica FEUP, 11 de M arço de 2005 13

A Operação da “Pipeline” do C31

• Conceito

– Designa a cascata de quatro fases de processamento conducentes à

execução de uma instrução: o carregamento (fetch), a descodificação

(decode), a leitura de operandos (read) e, finalmente, a execução

(execute). Mais detalhadamente:

• FETCH: carrega a palavra de instrução a partir de memória,

• DECODE: descodifica a palavra de instrução e gera os endereços

necessários (e.g. controlando a modificação dos registos ARn ou

do apontador da “stack”),

• READ: se necessário, lê operandos a partir da memória,

• EXECUTE: se necessário, lê operandos a partir dos registos,

executa a operação pretendida e escreve o resultado num registo

ou em memória.

• Estrutura

– Para um dado instante, estas quatro fases são executadas em

paralelo para instruções diferentes

aula teórica

• Estrutura

(cont.)

– O controlador da operação da pipeline gere conflitos de pipeline de

forma automática (que são transparentes para o programador) e permite

viabilizar, havendo cuidado na programação de código assembly, um

rendimento computacional de uma instrução por ciclo de execução.

– Se W, X, Y e Z representarem instruções consecutivas e diferentes, o

(8)

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

3ª aula teórica FEUP, 11 de M arço de 2005 15

• Conflitos

Os conflitos da pipeline consistem em quebras na continuidade e

sequencialidade das instruções na pipeline através da inserção

(automática) de instruções NOP, o que evita conflitos mas também

penaliza a eficiência computacional. Os conflitos podem podem ser

categorizados da seguinte forma:

– Conflitos de salto (branch conflicts)

• ocorrem para a maior parte das

instruções que têm que modificar o conteúdo do registo PC como sejam: BR, Bcond, DBcond, CALL, IDLE, RPTB, RPTS, RETIcond e RETScond. De facto, uma instrução de salto, ao percorrer todas as fases da pipeline até à fase de execução, conduz a que as instruções imediatamente

seguintes no código assembly, ao serem carregadas, sejam

descartadas e substituídas por NOPs (esvaziamento da pipeline).

EXEMPLO

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

aula teórica

FEUP, 11 de M

arço de 2005

16

Note-se que as instruções de salto atrasado (e.g. BRD, BcondD,

DBcondD) são usadas precisamente para assegurar o carregamento

e execução das três instruções subsequentes a um salto, evitando o

esvaziamento da pipeline e aumentando a eficiência computacional.

Isto requer naturalmente um cuidado especial na estruturação do

código assembly de modo a beneficiar destas oportunidades de

acelerar a execução do código programado. Usando o exemplo

anterior, a implicação prática do uso da instrução BRD será:

(9)

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

aula teórica

FEUP, 11 de M

arço de 2005

17

– Conflitos de registo (register conflicts)

• ocorrem devido a atrasos na leitura ou escrita de registos usados para a geração de endereços (possivelmente porque os registos não estão

disponíveis ou prontos a serem usados quando se pretende). No exemplo do lado, a fase de

descodificação da segunda instrução é atrasada de dois ciclos porque a geração de endereços com o registo AR2 só pode efectuar-se quando este tiver sido actualizado na execução da instrução anterior.

Para evitar estes conflitos, deve-se procurar assegurar, na escrita do

código, que há uma distância mínima entre as instruções que fazem

uso dos mesmos registos (preenchendo-a, por exemplo, com outras

instruções úteis mas que não usem os registos em causa).

aula teórica

– Conflitos de memória

• ocorrem quando as unidades internas do C3x competem (disputam) pelos mesmos recursos de memória.

No exemplo ao lado, os registos ARØ e AR1 apontam para o bloco RAMØ e o código de programa correspondente à instrução MPYF também se situa na RAMØ. Há aqui conflito de memória quando ADDF3 se encontra na fase READ da pipeline (há leitura de dois argumentos), que coincide com o momento em que a instrução MPYF seria carregada a partir da RAMØ. Como não pode haver mais do que dois acessos à RAMØ (ou à RAM1 ou à ROM) no mesmo ciclo, esta última instrução é atrasada e é inserido automaticamente um NOP na

pipeline.

(10)

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

aula teórica

FEUP, 11 de M

arço de 2005

19 No exemplo ao lado, o conflito ocorre

quando uma instrução paralela de duas escritas é seguida de uma instrução de leitura, o que implica o atraso desta através da inserção de um NOP (note-se que não pode haver mais do que dois acessos a uma RAM interna, por ciclo).

– Outros casos de conflito de memória ocorrem, por exemplo, quando o

CPU pretende aceder a memória externa mas esta está ainda

ocupada com uma operação de acesso anterior (eventualmente devido

à inserção deliberada de “wait states” pelo facto de se tratar de memória lenta).

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

aula teórica

FEUP, 11 de M

arço de 2005

20

– Para minimizar os conflitos de memória, deve-se ter presente na

escrita do código, que os dois blocos de memória RAM interna ao

C31 são de duplo acesso (dual-access) e que, quando muito,

conseguem-se num só ciclo, dois acessos ao mesmo bloco de RAM e

um acesso ao outro bloco de RAM, acessos estes que podem ser

partilhados entre carregamento de código e acesso a dados. Para

uma caracterização de todas as situações relevantes e de outros

tipos de conflito de pipeline, para além dos aqui aflorados, deverá

consultar-se o 8º capítulo “Pipeline Operations” do manual do C3x.

– Em síntese, a inserção de instruções NOPs entre instruções devido a

conflitos de pipeline, é regida por um critério de prioridades de acesso

a código de programa e dados, consoante a fase da pipeline, que é,

por ordem decrescente:

• Execute (maior prioridade)

• Read

• Fetch

(11)

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

aula teórica

FEUP, 11 de M

arço de 2005

21

Controlo do Fluxo de Programa no C31

O C31 dispõe de oportunidades de controlo do fluxo de programa

por software (

REPEAT

,

BRANCH

,

CALL

,

TRAP

e

RETURN

) e

também por hardware (“interlocked operations”,

RESET

e

“interrupts”).

Operação em modo de repetição (

REPEAT

)

– Através de uma instrução (RPTB ou RPTS) que consome 4 ciclos na

inicialização do ciclo mas executa “sem overhead” na sua iteração

(“zero-overhead looping”). Há três registos implicados no modo de

repetição: RC, RS e RE.

• RC: é o contador de iteração, deve ser prévia e explicitamente inicializado (só para RPTB) para o número pretendido de iterações menos um:

– Valor máximo: RC=8000000h (8000001h iterações) – Valor mínimo: RC=0 (uma repetição)

• RS: registo de endereço inicial das instruções a repetir, é automaticamente inicializado.

• RE: registo de endereço final das instruções a repetir, é automaticamente inicializado.

aula teórica

– RPTB

• Repete um bloco de instruções por um número especificado de vezes. A sua execução pode ser interrompida no atendimento a um pedido de “interrupt”. Um ciclo RPTB pode encapsular outro ciclo RPTB (“nested RPTB”). Neste caso deve-se prevenir o armazenamento dos registos críticos: RC, RE, RS e ST, por esta ordem, assim como o seu restauro pela ordem inversa.

– NOTA 1: Pode-se confirmar que existe um ciclo em curso testando o bit RM do registo ST.

– NOTA 2: É possível a conclusão prematura dos ciclos escrevendo um zero no registo RC ou no bit RM do registo ST.

– RPTS

• Repete a instrução seguinte a RPTS por um número especificado de vezes. Não pode ser interrompida na sequência do surgimento de um pedido de “interrupt” (mas caso isto seja desejável, há só que mudar de RPTS para RPTB).

– NOTA 1: a última instrução de um bloco de instruções a repetir não poderá ser Bcond, DBcond, CALL, CALLcond, TRAPcond, RETIcond, RETScond, IDLE, RPTB nem RPTS.

(12)

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

3ª aula teórica FEUP, 11 de M arço de 2005 23

– Exemplo 1

• Ilustra a troca dos elementos (N=64) de um vector equidistantes do seus extremos.

– Exemplo 2

• Ilustra a pesquisa do valor máximo dos elementos de um vector (N=148).

LDI @orig, ARØ ; início do vector

LDI ARØ, AR1 ; aqui não há conflito ! ADDI 63, AR1 ; fim do vector

LDI 31, RC ; itera 32 vezes RPTB CICLO

LDI *ARØ, RØ || LDI *AR1, R1

CICLO STI R1, *ARØ++(1) ; efectua troca || STI R0, *AR1--(1) ; efectua troca

LDI @orig, ARØ ; início do vector LDF *ARØ++(1), RØ ; inicializa MAX LDI 146, RC ; itera 147 vezes RPTB CICLO

CMPF *ARØ++(1), RØ ; testa se há novo MAX CICLO LDFLT *-ARØ(1), RØ ; actualiza novo MAX ...

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

3ª aula teórica FEUP, 11 de M arço de 2005 24

– Exemplo 3

• Acumula o produto, termo a termo, entre dois vectores de comprimento 512

– Exemplo 4

• Endereçamento indirecto em bit-reversed: permite criar uma sequência de acesso aos dados correspondente à ordem de “bit reversed”, o que evita operações explícitas de troca de dados. Exemplifica-se a cópia de um “buffer” de dados reais, de comprimento N, incluindo já a correcção de “bit-reversed”.

Real (0) Real (1) Real (2) Real (3)

. . .

Real (0) Real ( ) Real ( ) Real ( )

. . .

AR1 ARØ sequencial bit reversed

LDI @orig, ARØ LDI @dest, AR1 LDI N/2, IRØ LDF *ARØ++, RØ RPTS N-2 LDF *ARØ++(1), RØ || STF RØ, *AR1++(IRØ)B STF RØ, *AR1

LDI @vecA, ARØ ; aponta vector A LDI @vecB, AR1 ; aponta vector B

LDF Ø.Ø, RØ ; inicializa acumulador MPYF3 *ARØ++(1), *AR1++(1), R1 ; primeiro produto RPTS 51Ø ; itera 511 vezes MPYF3 *ARØ++(1), *AR1++(1), R1 ; nova multiplicação

|| ADDF3 R1, RØ, RØ ; acumula produto anterior ADDF R1, RØ ; acumula último produto

(13)

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

3ª aula teórica FEUP, 11 de M arço de 2005 25 Real (0) Imag (0) Real (1) Imag (1)

. . .

Real (0) Imag (0) Real ( ) Imag ( )

. . .

AR1 ARØ

sequencial bit revers

ed

• Exemplifica-se a cópia em “bit reversed” de um “buffer” de dados complexos, de comprimento N, em que as partes real e imaginária surgem em posições alternadas.

LDI @orig, ARØ LDI @dest, AR1 LDI N, IRØ LDI 2, IR1 LDI N-2, RC LDF *+ARØ(1), R1 RPTB CICLO LDF *ARØ++(IR1), RØ || STF R1, *+AR1(1) CICLO LDF *+ARØ(1), R1 ; || STF RØ, *AR1++(IRØ)B ; LDF *ARØ, RØ ; || STF R1, *+AR1(1) ; STF RØ, *AR1

LDI @orig, ARØ LDI @dest, AR1 LDI 2, IR1 LDI N, IRØ LDI N-1, RC RPTB CICLO LDF *+ARØ(1), R1 || LDF *ARØ++(IR1), RØ CICLO STF R1, *+AR1(1) || STF RØ, *AR1++(IRØ)B

Outra solução, mais simples mas problemática, porquê ?

RØ R1 Re Im 3ª aula teórica

Operação em modo de salto (

BRANCH

)

– Há três tipos de saltos: normais, atrasados e atrasados condicionados.

• Normais (standard branches): esvaziam a cascata de operações associadas

à execução de uma instrução (pipelining), antes de efectuar o salto do programa, de modo a facilitar a gestão da sua sequência. Este tipo de salto consome quatro ciclos de instrução, isto é, implica assim o desperdício de três ciclos de relógio de instrução.

– NOTA: como já visto, há sempre quatro fases de operações em cascata associadas à execução de uma instrução: o seu carregamento (fetch), a sua descodificação (decode), a leitura dos operandos (read) e finalmente a sua execução.

• Atrasados (delayed branches): em vez de esvaziar a cascata de operações (pipelining), executam as três instruções seguintes à instrução de BRANCH, antes de efectuar o salto. Esta solução evita o desperdício associado ao tipo anterior de salto. As instruções de salto atrasado são: BcondD, BRD,

(14)

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

3ª aula teórica FEUP, 11 de M arço de 2005 27

– Exemplo:

• Nota 1: Nenhuma das seguintes instruções poderá figurar no grupo das 3 instruções após a instrução do “delayed branch”: Bcond DBcondD BcondD IDLE BR IDLE2 BRD RETIcond CALL RETScond RPTS RPTB

DBcond CALLcond TRAPcond

• Nota 2 : os “delayed branches” inibem o atendimento a interrupções até se completarem as 3 instruções subsequentes aos “delayed branches”,

independentemente do salto condicional se concretizar ou não.

• Nota 3 : sempre que possível, deve-se procurar tirar partido de um “delayed

branch”, mesmo que para tal haja necessidade de incluir NOPS no grupo

das três instruções subsequentes a esse “delayed branch”. aqui há gralha !

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

aula teórica

FEUP, 11 de M

arço de 2005

28

Chamadas a subrotinas (

CALL, TRAP e RETURN

)

– As instruções do tipo CALL e TRAP permitem a chamada a uma

subrotina, sendo o regresso ao ponto inicial do código assegurado

através de uma instrução RETS (retorno normal a partir de subrotina) ou

RETI (retorno a partir de subrotina que foi invocada na sequência de uma

interrupção, o que tem como efeito repor a permissão de interrupção [1→ST(GIE)], no final da sua execução).

– As instruções CALLcond e TRAPcond permitem condicionar a

execução de uma subrotina à verificação de uma condição e devem ter

por argumento:

• no caso de CALLcond: um deslocamento (expresso em 16 bits) em relação ao conteúdo do registo PC, ou a identificação de um registo contendo o endereço do início da subrotina.

• No caso de TRAPcond: o número (0 ≤ N ≤ 27) do vector de interrupção contendo o endereço da subrotina a executar.

tabela do vector de interrupções TRAP para o C31 quando este se encontra configurado no modo “Microcomputer / Boot-Loader”.

(15)

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

aula teórica

FEUP, 11 de M

arço de 2005

29

– Funcionalmente, as instruções CALL e TRAP são idênticas, excepto no

aspecto em que esta última, ao ser executada, inibe automaticamente

qualquer interrupção (até encontrar, por exemplo, uma instrução RETI).

Operações “Interlocked”

– Permitem comunicação directa entre dois processadores através de

dois pinos externos do C31: XFØ (configurado como pino de saída) e

XF1 (configurado como pino de entrada), o que viabiliza a

sincronização entre processadores e a decorrente possibilidade de

multiprocessamento.

Exemplo da forma mais simples de interligação:

– Há cinco instruções “interlocked”:

aula teórica

A execução de cada uma destas instruções é conjugada com a activação

do sinal em XFØ (indicando um pedido ou interrogação) e com a leitura do

sinal em XF1 (indicando uma autorização ou reconhecimento).

– Em aplicações envolvendo multiprocessamento, é comum a partilha de

memória global. Ilustra-se a seguir um exemplo da interligação entre

dois C3x com este objectivo:

(16)

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

3ª aula teórica FEUP, 11 de M arço de 2005 31

A operação de RESET

– É uma forma de interrupção por hardware, não mascarável, destinada a

repôr o processador num estado conhecido, através da colocação e alta

impedância da maior parte dos seus pinos, da inicialização dos

periféricos e de alguns registos internos do C3x.

– A activação do pino RESET juntamente com o pino MCBL/MP

determina se o arranque do DSP (C31) é em modo Microprocessador,

situação em que o vector de RESET se situa em ØØh, ou em modo

Microcomputador (Boot Loader), situação em que é automaticamente

carregado código a partir de uma de três possíveis endereços (1ØØØh,

4ØØØØØh, ou FFFØØØh) ou da porta série, para posterior execução

no C31.

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

3ª aula teórica FEUP, 11 de M arço de 2005 32

Interrupções

– Já foi visto na 4ª aula teórica (a partir do slide 8) que o C31 suporta várias

formas de interrupção (além do RESET):

• interrupções geradas externamente através de quatro linhas mascaráveis (INTØ, INT1, INT2, INT3),

• interrupções geradas internamente por:

timers

– porto série

– instruções do tipo TRAPn, n=0, 1, 2, …, 27

e cuja prioridade é automaticamente estipulada, no caso de ocorrerem

diversas interrupções simultaneamente, de acordo com uma tabela.

Associadas a estas formas de interrupção existe um vector de

interrupções que contém os endereços das rotinas (ou uma instrução do

tipo BR remetendo para o endereço da rotina de atendimento no caso do C31 estar configurado no modo de Microcomputador/Boot-Loader) que servem os

pedidos de interrupção.

• NOTA 1: Como o registo IF pode ser lido e escrito, todas as interrupções podem ser activadas por software.

(17)

© AJF/FJR

Processamento Digital de Sinal em Tempo Real,

aula teórica

FEUP, 11 de M

arço de 2005

33 • NOTA 2: No processo de atendimento a uma interrupção, a “flag”

correspondente a essa interrupção no registo IF é apagada e todas as interrupções são inibidas porque o bit GIE do registo ST é automaticamente colocado a zero. O que significa que se se pretender que uma rotina de atendimento seja, ela própria, interruptível, então deverá colocar-se o bit GIE a “1” na entrada da rotina de atendimento. Se isto não acontecer, então no final da rotina, a instrução RETI ou RETIcond coloca automaticamente o bit ST(GIE)=1.

• NOTA 3: Dado que o C31 conclui a execução das instruções que se

encontram na fase de “decode” e “read” da pipeline quando uma interrupção é reconhecida (o que tem como corolário a colocação do bit ST(GIE)=0) e antes da a atender, poderá resultar algo inesperado como haver permissão de

interrupção mesmo após a entrada numa rotina de atendimento de interrupção (se uma das duas instruções na fase de “decode” ou “read” colocar explicitamente o bit GIE a “um”). Isto obriga a precauções especiais, por exemplo, quando se altera o estado do registo ST quando o bit GIE está activado (ver manual do C3x, secção 7.7.4, “Interrupt Considerations”). De uma maneira geral, deve-se atentar a que, por causa da operação da pipeline:

– as três instruções imediatamente seguintes a uma instrução que desactiva o bit ST(GIE) ou que apagam o registo IE, podem, ainda assim, ser interrompidas. – As três instruções imediatamente seguintes a uma instrução que activa o bit

ST(GIE) ou que activam o registo IE, podem não ser interrompidas, ainda que haja um pedido pendente.

exemplo

aula teórica

– Um TRAP pode ser encarado como um caso particular de interrupção

que é despoletada por software através de uma instrução TRAPcond e

com uma particularidade: a execução da rotina de atendimento a um

TRAP não depende da “flag” ST(GIE) nem dos bits de máscara de

interrupção no registo IE. Porém, altera o estado do bit ST(GIE) tal

como numa interrupção convencional. O diagrama seguinte ilustra este

aspecto:

Referências

Documentos relacionados

O TBC surge como uma das muitas alternativas pensadas para as populações locais, se constituindo como uma atividade econômica solidária que concatena a comunidade com os

Considerando a formação da equipe de trabalho, o tempo de realização previsto no projeto de extensão e a especificidade das necessidades dos catadores, algumas

Local de realização da avaliação: Centro de Aperfeiçoamento dos Profissionais da Educação - EAPE , endereço : SGAS 907 - Brasília/DF. Estamos à disposição

•   O  material  a  seguir  consiste  de  adaptações  e  extensões  dos  originais  gentilmente  cedidos  pelo 

Os candidatos reclassificados deverão cumprir os mesmos procedimentos estabelecidos nos subitens 5.1.1, 5.1.1.1, e 5.1.2 deste Edital, no período de 15 e 16 de junho de 2021,

No final, os EUA viram a maioria das questões que tinham de ser resolvidas no sentido da criação de um tribunal que lhe fosse aceitável serem estabelecidas em sentido oposto, pelo

O processo de gerenciamento da capacidade foi desenhado para assegurar que a capacidade da infraestrutura de TI esteja alinhada com as necessidades do negócio. O

Estudar o efeito da plastificação do ATp com glicerol nas características físico-químicas da blenda PLA/ATp; Analisar a mudança na cristalinidade dos laminados submetidos a