LC-3

**LC-3**, breviazion de **Little Computer-3**, a l'è 'n microprocessor teòrich pensaa per l'istruzion. El sò assembly a l'è pussee semplificaa di assembly di ver processor, ma a l'è bon de fà di programma complett e de vess doperaa 'me bersaj de 'n compilator per el C. L'è staa desviluppaa de Yale N. Patt de l'Università del Texas a Austin e Sanjay J. Patel a l'Università de l'Illinois a Urbana–Champaign.

## Teoria
El processor LC-3 el dopera di word de 16 bit, che l'è la misura de tucc i sò register. 

El gh'ha 8 register de us comun, el program counter, on instruction register, on memory address register, on memory data register, di condition code, che segnalen el segn del resultaa de la darrera operazion e 'na Processor Status Word.

I numer a hinn doperaa in complement a du: A l'è donca possibil reppresenta numer de −32'768 a 32'767. I istruzion, inveci, a hinn partii in quatter bit per l'opcode e dodes per i operand.

### Memoria
La memoria del sistema a l'è fàda de 64K cell de memoria: Degià che sett bit a hinn occupaa di istruzion in la memoria, domà noeuv a hinn reservaa per la locazion de memoria, e donca i primm sett a hinn tolt del program counter.

I cell a hinn spartii inscì

## Comand
### Sintassi generala
El lenguagg assembly el mett, in la soa sintassi, el register de destinazion prima de quej che hinn i register de partenza. El supporta trè maner de addressament: Quèlla immediada, quèlla diretta e quèlla  indiretta.
### Operazion logich
#### AND
**AND** el implementa l'AND logich e l'è possibil doperàll sia in manera diretta, ossia cont el fà l'AND in tra du register, sia in manera immediada, cont el fà l'AND in tra on register e ona costanda a 5 bit.


```
AND RD,RS,RS ;Manera diretta
AND RD,RS,#N ;Manera immediada
```

#### ADD
L'ADD l'implementa la somma e l'è possibil doperàll per sommà sia du register sia on register e ona costanta a cinch bit.


```
ADD RD,RS,RS ;Manera diretta
ADD RD,RS,#N ;Manera immediada
```

#### NOT
L'istruzion NOT la implementa la porta NOT e la gh'ha dònca domà du operand: El register de destinazion e quell de negà.


```
NOT RD,RS
```


### Operazion de trasferiment
#### LEA
L'operazion LEA (Load Effective Address) la permett de salvà in d'on register daa on'adressa de memoria, dent de la pagina de memoria, cont on offset de 9 bit, per permettegh de lavorà sora dopo.


```
.orig x3000
LEA R0,x00A; el mett x300B in R0
```

#### Dirett
L'adressament dirett, ciamaa anca "PC-relative",  el dopera 'me adressa per caregà i primm sett bit del program counter e i darree noeuv che hinn mittuu del programmator.

```
.orig x3000
LD R2,x9 ;carega in R2 de 0011 0000 0000 1010 (x300A)
ST R3,x8 ;carega R3 in x300A
```

#### Indirett
L'adressament indirett el dopera per formà l'adressa el midemm sistema de l'adressament dirett, ma inveci de caregà direttament quella cella el troeuva in la cella on'adressa de memoria e 'l carega de quella. A l'è donca possibil, inscì, caregà de tutta la memoria intrega.

```
LDI R0,LABEL ;carega in R0 la cella de memoria contegnuda in LABEL
STI R0,x001 ;salva R0 in la cella de memoria indicada
LABEL .fill x1000
```

#### De register
L'adressament de register el permett de caregà l'adressa de doperà de on register e l'è possibil anca sommàgh on numer a noeuv bit.

```
LDR R0,R5,#0 ;carega in R0 el contegnuu de la cella de memoria in R5 senza offset
STR R1,R2,#3 ;salva in la cella de memoria in R2+3 el valor de R1
```


### Operazion de controll
#### Branch
Branch (BR) el permett de implementà i salt, condizionaa e incondizionaa. A nivell interno a hinn doperaa trii bit per permett la scerna in tra la condizion NZP (negativ, zero, positiv) e 'l lassa i 9 bit per l'adressa de memoria de rivà, ma l'assembler el permett anca de scernì direttament la condizion (per esempi BRN el salta domà in negativ, BRNZP el salta semper) e de mett ona label 'me adressa de salt.

#### JSR
JSR el permètt de saltà dent de on sottaprogramma, indicaa per adressa o per label. El scriv, per permètt el rienter, el program counter corrent in del register R7.

A l'è doperabil anca 'me istruzion de jump *JMP*, ossia de salt incondizionaa, che la salva no el PC in del register R7.

#### JSSR
JSSR el permètt de saltà per on sottaprogramma foeura de la pagina, cont on register daa 'me operand e che 'l gh'ha dent l'adressa a che saltà.


```
JSSR BR,#N a 6 bit
```

#### RET
RET el mett in del program counter el valor de R7, salvaa prima del salt in del sottaprogramma.
#### RTI
RTI a l'è el el retorn de on interrupt, che 'l ripristina anca i CC prima de l'interrupt, salvaa in del Processor Status Word.
#### TRAP
I TRAP permetten de ciamà di fonzion del sistema operativ che permetten de fà vari ròbb, 'me legg di caratter, fermà el programma e inscì via.

### Pseudo-operand
L'assembler LC-3 el supporta di pseudo-operand che permetten al programmator de fà di robb mej o in manera pussee svelta e hinn:
*.orig: El segna el principi del programma, el gh'ha 'me argoment 'n adressa de memoria
*.end: El segna la fin del programma
*.fill: El riemp la cella de memoria cont on'adressa e 'l permett de mett 'na lable che l'è poeu doperada per riferìss a quell numer
*.blkw: El reserva on numer daa de cell de memoria
*.stringz: El reserva i cell de memoria che hinn assee per contegnì 'na stringa dada.

## Riferiment
* :: Architettura degli elaboratori - LC2 ::
*The LC-2: University of Texas
*L'architettura LC-3 - Università di Verona
*LC-3 simulator manual