1 Istruzioni Riferimento alla memoria Codice 0XXX 1XXX 2XXX 3XXX 4XXX 5XXX 6XXX Descrizione AC ...

7
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

Transcript of 1 Istruzioni Riferimento alla memoria Codice 0XXX 1XXX 2XXX 3XXX 4XXX 5XXX 6XXX Descrizione AC ...

Page 1: 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]

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

Page 2: 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]

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

Page 3: 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]

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

Page 4: 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]

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

Page 5: 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]

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!

Page 6: 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]

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

Page 7: 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]

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