Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
Operazioni su stack
X:=-M SXM:=X TAPCCR:=d --- ------ --- --- TPAd:=CCR TXSs:=SP --- --- --- --- ---TSXSP:=s --- --- --- --- --- BISPSWSR:=im LDSSR:=M LPSW --- --- --- ---STSM:=SR --- LPS --- --- LDPS ---SR:=G LRS:=M --- --- --- MTPRSRM:=S LDRS:=G1.3Le istruzioni specifiche di push e pop di cui alla tab. 6.3 sono:
Istruzione | 370d | 1100d | G20d | 6800d | Z8000d | VAXd |
---|---|---|---|---|---|---|
--- | --- | --- | PSH* | --- | --- | --- |
pushm (SP,a) | --- | --- | --- | --- | PUSH | --- |
pushm(SP,G) | --- | --- | --- | PUSH | --- | --- |
pushm (R,G) | --- | --- | --- | --- | --- | PUSH |
popm (R,G) | --- | --- | --- | --- | --- | POP |
Nelle architetture mostrate di precedenti generazioni, i soli 6800d e VAXd prevedono l'uso di stack a livello linguaggio macchina. Infatti, il push e il pop venivano effettuati nel passato soltanto usando normali registri puntatori allo stack realizzato in memoria via software.
1.4 Miscellanea
Si noti in generale che:
- Il 370d, possedendo registri generali e non modi espliciti, distingue le operazioni in "Load" e "Load Register", per il trasferimento
Verso registri e "Store" per il trasferimento in memoria. Analogamente opererà nelle tabelle successive.
Il 1100d, possedendo più banchi di registri ed una struttura costante delle istruzioni nella quale il modo esplicito è riservato all'indirizzamento dell'altro operando, distingue le istruzioni in "Load(o Store) Accumulator", "Load (o Store) Index", "Load (o Store) Register".
Il G20d carica l'unico accumulatore con il codice CLA, i registri-indice indirizzabili con LXP, un registro d'indirizzamento ausiliario con OCA; i trasferimenti inversi si ottengono con lo Store.
Istruzioni di trasferimento dati per architetture storiche.
Il 6800d ha struttura analoga al G20d (LDA*, LDX, STA*, STX), ma il registro-indice x è unico e quindi implicito.
Il VAXd, ortogonale, usa il solo codice MOVE per tutti.
i trasferimenti, con la sola eccezione di· quelli che coinvolgono i registri speciali.· Lo Z8000d è simile al 68000, con il codice LDK che si applica a registri generali.In tab.6.4 sono riportati i principali acronimi dei codici operativiTab.6.4 Principali acronimi dei codici operativi1100d 6800dSA, SR, SX, Store Accum., Register, indeX LDAA,LDAB LoaD Accumulator A, BLA, Load Accumulator (di un banco) LDS, LoaD program Status;LDR, LoaD special Register; LDX, LoaD indeX;LMA, Load Magnitude; PSH*, push accumulatorLNA, LoaD Negate; STA*, STX, STS, Store Accum.; indeX; SPLPS, Load Program Status; TAP, Transfer A in P; TXS, X in S;LR, LR, Load Register G20dLX, Load indeX; CCL, Clear & Complement Logical;LX, Load indeX; CLA, CLS CLear & Add, SubtractLXP, LXM Load indeX Plus, Minus;370dLCR, Load Complement Register OCA, OCS : OA Clear & Add, SubtractLPR, Load Positive Register STI, STS, STD, Store Integer, Single, Double;LPSW, Load Program Status Word; VAXdLR,Istruzioni aritmetiche e logiche
Qui sono presentate le architetture esemplificate
Qui la legenda dei simboli per indicare la natura di un operando
Qui i simboli generali e specifici per individuare i registri di macchina
1 Istruzioni aritmetiche e logiche
1.1 Addizione, sottrazione e operazioni logiche
In tab.7.1 sono riportate alcune fra le principali istruzioni di addizione, sottrazione, con riferimento ai tipi di dati già trattati per le operazioni di trasferimento (virgola fissa di 8, 16 o 32 bit; ovviamente, per tutte le tre architetture si prevedono estensioni a tipi più evoluti, che qui non si illustrano.
Tabella 7.1 Istruzioni di addizione, sottrazione e logiche
8086d
68000d
RISCd
Istruzione Unarie
NEG
NEG
---
G:=-G
NOT
NOT
---
Addizione,
sottrazione. And, Or, etc.
R:=R+G ADDG:=G+R --- ---ANDR:=RÙGG:=GÙRD:=D+G ADDG:=G+D --- ---ANDD:=DÙGG:=GÙD ADDIG:=G+im --- ---ANDIG:=GÙim ADDR1:=R2+R3 --- --- ANDR1:=R2ÙR3 ADDIR1:=R2+im --- --- ANDIR1:=R2Ùim
Moltiplicazione e divisione
MUL --- ---d:=d*G --- MULU ---D:=D*G --- --- MULTUs:=R1*R2
Simili per struttura alle operazioni aritmetiche sono quelle "logiche" (not, and, or, etc.), che operano su tipi "array di bit" delle medesime lunghezze dei dati aritmetici.
Le uniche operazioni unarie oggi diffuse sono la costruzione dell'opposto e analogamente il not logico: NEG G presente sia nell'8086 (formato di fig.3.1b) sia nel 68000d (formato di fig.3.2c), ma non nel RISCd;d'altro canto, l'opposto si può ottenere da una sottrazione (a:=0-a) e quindi non è essenziale. La NEG è aggiunta nel RISCd come pseudoistruzione, cioè come istruzione riconosciuta dall'assembler e
daquesto tradotta in linguaggio macchina. Altre operazioni unarie, come il calcolo del valore assoluto,diffuse in architetture delle precedenti generazioni, si possono trovare come pseudoistruzioni nellearchitetture moderne.
Per le operazioni binarie, la tabella si limita a mostrare le istruzioni di addizione, and emoltiplicazione; peraltro, ovunque ci sia l'addizione s'intende che esiste anche la sottrazione (codicioperativi SUB etc.), ove ci sia l'and esiste anche la or (OR) e la or esclusivo (XOR) e ove ci sia lamoltiplicazione anche la divisione (DIV).
Si noti in particolare:
- la quasi completa ortogonalità del 68000d a livello macchina
- ADD G,D (D:=D+G)
- ADD D,G (G:=G+D)(formato di fig.3.2e) che quindi prevede l'accumulo anche in memoria;
- l'analoga ortogonalità a livello assembler dell'8086d, come per le istruzioni di move (formato di1 of 3 25/01/2007 20.04Istruzioni aritmetiche e logiche
file:///C:/Documents%20and%20Settings/BaRoN%20SaMeDi/Docum...fig.3.1b,d,e,f):ADD R,G (R:=R+G)ADD G,R (G:=G+R)· l'uso dei tre registri espliciti per il RISCd:ADD R1,R2,R3 (R1:=R2+R3)
1.2 Moltiplicazione e divisione
Per la moltiplicazione e divisione, si ricorda che il risultato ha un numero di bit doppio di quello[1] ; nelle tre architetture considerate si adottano tre soluzioni diverse. Con riferimentodegli operandialle operazioni per dati "unsigned" (numeri naturali) si ha:
8086d: l'istruzione opera implicitamente sull'accumulatore AX di 16 bit (formato di fig.3.1b):· MUL Ged il risultato è nei due registri AX e DX.
68000d: l'istruzione è a due operandi espliciti a 16 bit (formato di fig.3.2e):MULU D, Ged il risultato (a 32 bit) è in D.
RISCd: l'istruzione è a due registri espliciti di 32 bit (formato di fig.3.3???):· MULU R1, R2ed il risultato (a 64 bit) è nella coppia di registri
68000d, RISCd) che incrementa il valore di un registro di controllo o di indirizzamento (INC). Questa istruzione non è presente nell'8086d. Nella tabella 7.2 sono presenti anche altre istruzioni per l'aritmetica per l'indirizzamento e il controllo, ma non vengono specificate ulteriori informazioni a riguardo.formato di fig.3.1b):INC G (G:=G+1) che è sostituita, nelle altre architetture da normali istruzioni di addizione o dalle tecniche diautoincremento.
1.4 Istruzioni di Shift
Nella tab.7.4 sono mostrate le operazioni di shift semplice (SHR, Shift Right; LSR, Logical ShiftRight, SRLV, Shift Right Logical Variable), le operazioni di shift aritmetici e quelle di shift circolari,dette anche di rotazione; esistono le analoghe a sinistra (SHL, LSL, SLL, etc.). Si tratta in ogni caso dishift multipli:
Istruzione | 8086d | 68000d | RISCd |
---|---|---|---|
LSR | mshr(D1,0,count) | ||
SRLV | mshr(R1,0,count) | SRL (risultato in R3) | |
ASR | mashr(D1,count) | SRAV (risultato in R3) | |
SHR | mashr(R1,count) | SRA (risultato in R3) | |
ROR | mcir(D1,count) | ||
ROR | mcir(R1,count) | ROR |
count= count= count=
Note s o im D o im R o immsh(r/l) (a,b,count): shift (destra/sinistra) a di count bit,
con inserimento di cmash(r/l) (a,count) : shift (destra/sinistra) aritmetico a di count bit
mci(r/l) (a,count) : shift (destra/sinistra) circolare a di count bit
per tutti il numero di shift (count) può essere un immediato, ma inoltre può essere pet l'8086d il registro riferito implicitamente CL, per il 68000 un secondo registro-dati D2 e per il RISCd un secondo registro generale R2.
Sia per il 68000d sia per il RISCd le istruzioni hanno codici diversi a seconda che il numero di shift richiesti sia contenuto in un registro o sia un immediato, ma il 68000d presenta il medesimo codice al livello assembler; mentre il RISCd, in accordo con la sua struttura a 3 registri, pone il risultato dello shift (definito da R1 ed R2 oppure im) in R3..
Lo shift circolare è realizzato come pseudoistruzione nel RISCd.
Per le architetture storiche qui sono illustrate le istruzioni aritmetiche e logiche.[1]
La questione è trattata approfonditamente nel capitolo dell'aritmetica;
intuitivamente basta considerare che il prodotto di dnumeri di n cifre è in genere di 2n cifre.3 of 3 25/01/2007 20.04Istruzioni aritmetiche e logiche per architetture storiche file:///C:/Documents%20and%20Settings/BaRoN%20SaMeDi/Docum...Architetture storichePer le architetture "storiche":Qui sono presentate le architetture storiche esemplificateQui la legenda dei simboli per indicare la natura di un operando1 Istruzioni aritmetiche e logiche1.1 Addizione, sottrazione e operazioni logicheLe istruzioni so