PALERMO 2013 - UniPa Bollettino M. Burgio... o < Xxx fìmmini caiòrdi,
1 Istruzioni Riferimento alla memoria Codice 0XXX 1XXX 2XXX 3XXX 4XXX 5XXX 6XXX Descrizione AC ...
-
Upload
assunta-cappelletti -
Category
Documents
-
view
226 -
download
0
Transcript of 1 Istruzioni Riferimento alla memoria Codice 0XXX 1XXX 2XXX 3XXX 4XXX 5XXX 6XXX Descrizione AC ...
1
Istruzioni Riferimento alla memoria
Codice
0XXX
1XXX
2XXX
3XXX
4XXX
5XXX
6XXX
Descrizione
AC M[XXX]
M[XXX] AC
AC AC+ M[XXX]
AC AC AND M[XXX]
PC XXX
If M[XXX] =0 then PC PC+1
If M[XXX] >0 then PC PC+1
Mnemonico
LD XXX
ST XXX
ADD XXX
AND XXX
JMP XXX
SKZ XXX
SKP XXX
2
IstruzioniRiferimento ai registri
Codice8xxx 9xxxAxxx Bxxx Cxxx
Descrizione
AC AC’
AC 0
ACAC+1
V0
If V=1 then PCPC+1
Mnemonico
CMP
CLA
INC
CLV
SKV
dove V è un flag che vale 1 se vi è un overflow in ADD
3
BUS E DATA FLOW
INC
CLR
INC
CLR
INC
CLR
INC
CLR
INC
CLR
LD
LD
LD
LD
LD
AC
IR(16 bit)
Data Reg (MBR) (16 bit)
PC (12 bit)
Mem Addr Reg (MAR) (12 bit)
ADD bus (12 bit)
DATA bus (16 bit) CS R/W
Memoria
ALU
Realizzazione di macro istruzioni per una AC based CPU
Utilizzando una CPU con un limitato set di istruzioni è possibile realizzare delle istruzioni più complesse scomponendole in istruzioni elementari eseguibili dalla CPU.
Es.1: Realizzare una macro che esegue il salto condizionale a una certa locazione di memoria (XXX) se un dato contenuto in una locazione (YYY) è diverso da zero.Il mnemonico della macro è : JNZ XXX,YYY.La CPU esegue le istruzioni elementari di salto (JMP XXX) e di skip condizionale (SKZ YYY)
JMPZ XXX,YYY:SKZ YYYJMP XXXSe YYY è zero non
eseguo l’operazione di JMP
Se YYY è diverso da zero eseguo l’operazione di JMP
Es.2: Realizzare una macro che esegue l’OR bit a bit tra una locazione di memoria XXX e il contenuto dell’accumulatore. Il mnemonico della macro è : OR XXX.La CPU esegue le istruzioni elementari di complemento dell’accumulatore(CMP) e di AND bit a bit tra l’accumulatore e una locazione di memoria (AND XXX).Utilizzando De Morgan l’operazione di OR può essere scritta come:
A+B = A·B
OR XXX:CMPST TEMPLD XXXCMPAND TEMPCMP
Complemento ACMemorizzo AC
Carico XXX sull’accumulatore
Complemento il valore che era contenuto in XXXEseguo l’AND tra
AC e XXX Complemento il risultato dell’operazione di AND
N.B.: La realizzazione della macro utilizza una locazione di memoria aggiuntiva (TEMP), che dopo l’esecuzione della macro contiene un valore diverso dall’inizio.Si deve tenere conto di tale effetto collaterale (Side Effect) evitando di utilizzare la locazione TEMP per contenere dei dati!
Es.3: La CPU esegue le addizioni tra operandi a 16 bit utilizzando l’operazione ADD(XXX).Tale operazione esegue: AC AC + M[XXX]Per eseguire somme tra operandi con lunghezza multipla di 16 bit si può utilizzare una istruzione di somma con riporto (ADC XXX) che esegue: AC AC + M[XXX] +VDove V è il flag di carry. Definiamo due operandi A e B a 32 bits memorizzate nelle locazioni XXX e XXX+1 e YYY e YYY+1.
ALAH BLBHAXXX+1 XXX YYY+1 YYY
B
La somma a 32 bits può essere eseguita nel seguente modo:
LD XXXADD YYYLD (XXX+1)ADC (YYY+1)
ALAH
BLBH+ +
CLCH=
Carico i 16 bits meno significativi di A (AL)Eseguo la somma
tra AL e BLCarico i 16 bits più significativi di A (AH)Eseguo la
somma tra AH e BH tenendo conto del riporto
carry
Es.3: Nel caso la CPU non abbia a disposizione un’istruzione di ADC(XXX) essa si può realizzare con una macro:
ADC XXX:SKVJMP L1INC
L1:ADD XXX
Controlla il flag di carry:Se è 0 eseguiAC AC+M[XXX]
Se il flag di carry è 1 eseguiAC AC+1