Il processore PD32 - PowerPoint PPT Presentation

About This Presentation
Title:

Il processore PD32

Description:

Il processore PD32 Set Istruzioni Set Istruzioni L istruzione (almeno 32 bit) divisa in pi campi codice operativo specifica operazione (classe e tipo) parte ... – PowerPoint PPT presentation

Number of Views:61
Avg rating:3.0/5.0
Slides: 77
Provided by: consip
Category:
Tags: pd32 | processore

less

Transcript and Presenter's Notes

Title: Il processore PD32


1
Il processore PD32
  • Set Istruzioni

2
Set Istruzioni
  • Listruzione (almeno 32 bit) è divisa in più
    campi
  • codice operativo specifica operazione (classe e
    tipo)
  • parte indirizzo specifica modalità di uso deidati
  • registri interni
  • registri di memoria (più modalità)
  • dati immediati (ad es. costanti) memorizzati nei
    byte successivi
  • nome simbolico

3
Set Istruzioni
  • Sono organizzate in 8 classi (3 bit codice
    operativo specificano la classe)
  • Movimento dati
  • Aritmetiche (somma e sottrazione)
  • Tipo Logico
  • Rotazione e shift
  • Operazioni sui bit di stato
  • controllo del programma
  • controllo della macchina
  • ingresso/uscita

4
Formato istruzioni
int i,j i i j
Programma compilatore
Codice mnemonico
ADDW R2 , R1
Linguaggio Assembly (R2R1 gt R1)
Destinazione
Tipo di dato
Sorgente
L (longword) W (word) B (byte)
Programma assemblatore (Assembler)
31
29
28
24
23
16
15
14
13
12
11
9
8
6
5
3
2
0
Classe
I/O
L-W-B
Modo Sg
Sorg.
Modo Ds
Tipo
K pos.
Dest
Linguaggio Macchina (PD 32 ogni istruzione è
rappresentata con 32 bit)
5
Formato istruzioni
  • Ogni istruzione (che non utilizza
    lindirizzamento immediato) è lunga 32 bit (4
    byte) ed è composta da 9 campi
  • Alcune istruzioni ignorano alcuni campi

CLASSE
TIPO
DATO K
I/O
S
MODO S
SORG
MODO D
DEST
Operandi
Codice Operativo
Specifica i dati su cui operare
Specifica il tipo distruzione
6
(No Transcript)
7
Alcune istruzioni Assembler
  • MOVB R1,R2
  • - copia il contenuto del primo byte di R1 in R2
  • MOVW R1,(R2)
  • - copia il contenuto dei primi 2 byte di R1 nei
    due byte di memoria il cui indirizzo iniziale
    memorizzato in R2
  • MOVL (R1),R2
  • - copia in R2 il contenuto dei 4 bytes di
    memoria il cui indirizzo è specificato in R1
  • nel seguito s indica una lettera tra B (byte), W
    (word, 2 byte) L (long word, 4 byte)
  • SUBs R1,R2
  • - sottrai il contenuto del primo, dei primi 2 o
    i 4 bytes del registro R1 con il corrispondente
    in R2, il risultato memorizzalo in R2
  • ADDs d,R2
  • - addiziona al contenuto del registro R2 la
    quantità d di dimensione s

8
Esempi di traduzione istruzioni assembler in
linguaggio macchina
  • MOVB R4,R3

operandi e modo indiriz. operandi
formato dato campo s
Codice mnemonico
diretto con registro
CLASSE
TIPO
byte
4
3
001
0000
..

00
000
100
000
011
31 29 28 24 23 16 15
14 13 12 11 9 8 6 5
3 2 0
Modo dest
Modo sorg
9
Esempi di traduzione istruzioni assembler in
linguaggio macchina (cont.)
  • ADD B 20,R3

operandi e modo indiriz. operandi
formato dato campo s
Codice mnemonico
Indirizzamento Immediato (vedi byte successivo)
Indirizzamento diretto con registro
CLASSE
TIPO
byte
3
010
0000
..

00
001

000
011
31 29 28 24 23 16 15
14 13 12 11 9 8 6 5
3 2 0
00010100
7
0
10
Ciclo Istruzione Execute
Nel PD32 la fase di esecuzione di un ciclo
istruzione consiste in un numero variabile di
cicli macchina dipendente dal numero di accessi
in memoria necessari (oltre al fetch)
Uno degli operandi (0x20) è definito
nellistruzione- Lassembler lo memorizza nella
locazione di memoria esterna immediatamente
successiva a quella contenente listruzione
(indirizzamento immediato)
Entrambi gli operandi sono contenuti in registri
interni del PD32 (indirizzamento a registro)
  • ADDW R1, R2
  • R1 -gt Temp1
  • R2 -gt Temp2
  • ALU-OUT (Temp1Temp2) -gt R2
  • (nessun accesso a memoria esterna)
  • ADDW 20h, R2
  • PC -gt MAR
  • (MAR) -gt MDR , R2 -gt Temp1
  • MDR -gt Temp2, PC 2 -gt PC
  • ALU-OUT (Temp1Temp2) -gt R2
  • (1 accesso a memoria esterna)

11
Un esempio di programma assembler
  • Saldo (S) nelle 2 celle puntate da R5 (dato di
    una parola)
  • Tre versamenti (V1,V2,V3) immagazzinati nelle tre
    coppie di celle consecutive puntate da R4
  • Due prelievi (P1,P2) immagazzinati nelle due
    coppie di celle puntate da R3

SSV1V2V3-P1-P2
12
Un esempio di programma assembler
13
Altre istruzioni
JMP SALTO INCONDIZIONATO JZ SALTO
CONDIZIONATO HALT FINE PROGRAMMA MOVB
dato,R1
ESTENSIONE SEGNO dato sui rimanenti bits di R1
00h
00h
00h
00000100
MOVB 3,R4 R4
FFh
FFh
FFh
11111111
MOVB -1,R5 R5
14
Un programma per laggiornamento del saldo di un
conto bancario
15
Ipotesi
Tutti i dati sono a 16 bit (word) Il saldo
iniziale è memorizzato nella coppia di celle di
indirizzo 00001B00 I movimenti (versamenti e
prelievi) sono memorizzati in posizioni
consecutive di memoria, a partire da quella di
indirizzo 00001F00 I movimenti non hanno un
ordine particolare i versamenti sono positivi e
i prelievi negativi Non è noto il numero dei
movimenti effettuati Lultimo movimento è seguito
da una posizione di memoria contente il numero 0
16
Una prima soluzione
17
START
R5 punta al Saldo
R51B00
R4 punta al I vers.
R41F00
R0 memorizza il Saldo
R0(R5)
R1 mem. il versamento
R1(R4)
R1R10
R10 ?
JZ
no
Somma al saldo il vers.
R0R1R0
si
R4 punta al vers. succ.
R42R4
ora in memoria cè il saldo aggiornato
(R5)R0
HALT
18
Il codice ASSEMBLER
19
Una soluzione equivalente
20
START
R5 punta al Saldo
R51B00
R4 punta al I vers.
R41F00
R0 memorizza il Saldo
R0(R5)
Somma al saldo il vers.
R0R0(R4)
scrivi il saldo in memoria
(R5)R0
R4 punta al vers. succ.
R42R4
Somma al saldo il vers.
R0(R4)R0
R1R0-(R5)
confronta il saldo attuale con il saldo in mem.
si
JNZ
no
HALT
21
Assemblatore
  • Traduce il codice scritto in assembler in codice
    macchina
  • Ad ogni istruzione macchina è associato un codice
    mnemonico
  • E possibile usare riferimenti simbolici
  • E possibile inserire delle direttive che
    indicano allassemblatore come procedere nella
    traduzione
  • Ad esempio, ORG specifica dove sarà caricato il
    programma una volta tradotto. Questo serve a
    tradurre i riferimenti simbolici assoluti nel
    codice sorgente.
  • Ad esempio, CODE .. END indicano linizio e la
    fine della sezione codice.

22
Esempio MOVB 0,R1
  • Significato Poni a 0 il byte meno signif. di
    R1
  • Codice assembly
  • MOVB 0, R1

Destinazione
Tipo (byte)
Sorgente
ORG 400H CODE movb 0,R1 HALT END
01H 02H 00H 20H 00H
400
istruzione
operando
23
Contenuto memoria
3 2 1 0
400
Prima istruzione
20
00
02
01
Operando
404
?
?
?
00
Seconda istruzione
??
??
??
?
408
0x20 00 02 01
400 0010 0000 0000 0000 0000 0010 0000
0001 404 0000 .
24
Esempio MOVB 0,R1
Indirizzo Iniziale
25
Altro esempio
Il codice sarà caricato in posizione 0x600
ORG 600HCODE movw r2, r1 movb -2, r0HALTEND
2000101081
2000000200
FE
1111 1110
Rappresentazione compl. a 2
26
Modi di indirizzamento
  • Stabiliscono la posizione degli operandi
  • Possono trovarsi nei registri (R0..R7)
  • In memoria di lavoro (la posizione è stabilita
    dallindirizzo di memoria in cui è memorizzato il
    valore)
  • Effective Address (EA) la posizione di un
    operando in memoria
  • EA può essere un registro o una locazione di
    memoria
  • Il valore di EA deve essere noto al tempo di
    esecuzione del programma (run-time) in generale
    non è noto al momento della sua scrittura
    (compile-time). Ciò consente di ottenere una
    grande flessibilità (rilocazione del codice)

27
Modi di indirizzamento
  • Modi diretti
  • Diretto con registro
  • Immediato
  • Assoluto
  • Modi indiretti
  • Indiretto con registro
  • Indiretto con spiazzamento
  • Relativo
  • Indiretto con predecremento
  • Indiretto con postdecremento

28
Indirizzamento a registro
  • EARi
  • Esempio MOVL R1,R5 (significato R1-gtR5)

29
Indirizzamento immediato
  • Il dato si trova in memoria immediatamente dopo
    listruzione
  • Esempio MOVL 0,R5 (significato poni 0 in R5)

il dato è memorizzato nei 4 byte successivi al
codice dellistruzione
30
Indirizzamento assoluto
  • MOVL R1,1280H (assegna il valore di R1 alla cella
    di memoria di indirizzo 1280H)
  • 1280H, è memorizzato dopo listruzione ed è
    riferito da PC dopo che è stato incrementato)
  • Effective address 1280H

31
Indirizzamento relativo
  • Usato nei salti, permette di aggiornare il PC con
    valori differenti di semplici incrementi.
  • JMP LABEL(PC) (metti nel PC quanto ottenuto dalla
    somma del contenuto della locazione il cui
    indirizzo è dato da LABEL con il valore corrente
    del PC)

32
Indirizzamento relativo
  • JMP LABEL(PC) (metti nel PC quanto ottenuto dalla
    somma del contenuto della locazione il cui
    indirizzo è dato da LABEL con il valore corrente
    del PC)
  • Label indica lo scostamento rispetto al valore
    corrente di PC
  • se il programma viene spostato in una diversa
    zona di memoria cambia il valore di PC in due
    diverse esecuzioni MA lo spostamento relativo non
    cambia
  • aritmetica in complemento a due (per permettere
    salti in avanti e indietro)

33
Indirizzamento indiretto con registro
  • Il registro contiene lindirizzo delloperando
    (corrisponde alla nozione di puntatore nei
    linguaggi di programmazione)
  • MOVL (R5),R1 (sposta in R1 in contenuto della
    locazione di mem. il cui indirizzo è contenuto in
    R5)

34
Indirizzamento indiretto con registro
  • se si aggiorna il registro cambia lindirizzo di
    memoria
  • esempio inserendo in un ciclo il frammento di
    istruzioni
  • ADDL (R2),R1
  • ADDB 4, R2
  • somma a R1 il contenuto della locazione di mem.
    il cui indirizzo è contenuto in R2)
  • somma 4 a R2
  • permette di sommare a R1 i contenuti di locazine
    di memoria successive
  • domanda perché somma 4 e non 1 o 2?

35
Indirizzamento indiretto con registro e con
predecremento
  • Il registro, opportunamente decrementato,
    contiene lindirizzo delloperando
  • Esempio MOVL R1,-(R7) (sposta nella locazione il
    cui indirizzo è pari al contenuto in R7 meno 4
    ciò che è memorizzato in R1)

36
Indirizzamento indiretto con registro e con
postincremento
  • Il registro contiene lindirizzo delloperando,
    una volta acceduto la memoria il registro viene
    opportunamente incrementato
  • Esempio MOVL (R7),R1 (sposta in R1 quanto
    memorizzato nella locazione il cui indirizzo è
    pari al contenuto in R7, dopodiché incrementare
    di 4 ciò che è memorizzato in R7)

37
Indirizzamento con spiazzamento
  • Lindirizzo effettivo delloperando è la somma di
    un valore base (mem. in un reg.) con il valore di
    spiazzamento
  • Esempio MOVL D(R0),R1 (significato sposta in R1
    il contenuto della cella con indirizzo DR0)

38
Indirizzamento Riepilogo
org 400h code movl 20, r1 r120, ind.
immediato addl r1,r1 r140, ind. a
registro movb 0FFh, 800h mem0x8000xFF, ind.
assoluto movl 800h,r2 r20x800 movb 0EEh,
(r2) memr20xEE, ind. con registro movb
0FFh, -(r2) r20x800-0x10x7FF,
mem0x7FF0xFF ind. con predecremento movb
0AAh, (r2) mem0x7FF0xAA, r20x800 ind.
con postincremento movb 0FFh, 8(r2) mem0x8080
xFF, r20x800 ind. con spiazzamento end
39
Tipi di istruzioni
  • Set Istruzioni
  • Sono organizzate in 8 classi
  • Movimento dati
  • Aritmetiche (somma e sottrazione)
  • Tipo Logico
  • Rotazione e shift
  • Operazioni sui bit di stato
  • controllo del programma
  • controllo della macchina
  • ingresso/uscita

40
Istruzioni Movimento dati
41
Istruzioni MOVs
  • Sono usate per copiare dati da
  • Registro-registro
  • movl r1,r2
  • Registro-memoria
  • movl r1,(r2)
  • Memoria-registro
  • movl (r1),r2
  • Memoria-memoria
  • movl (r1),(r2)

42
Istruzioni aritmetiche
43
Registri di stato
  • il registro di stato contiene informazioni
    sullultima operazione eseguita
  • Carry, C 1 se ce stato riporto
  • Negative, N 1 se risultato ultima oper. è neg.
  • Zero, Z 1 se ultima oper. ha 0 come risultato
  • oVerflow, V 1 se ultima oper. da overflow
  • Parity, P 1 se risultato ult. oper. ha numero
    pari di 1
  • Interrupt enable se la CPU può accettare
    interruzioni esterne (es. per operazioni di I/O)

44
Istruzione CMP
CMPs effettua la sottrazione SENZA modificare la
destinazione es. CMPL R1,R2 sottrai R1 a R2
aggiorna registro stato ma NON modificare
R2 registri di stato di interesse aritmetico Z
risultato è zero C segnala segno (ricorda la
rappresentazione circuito per la sottrazione in
compl. a 2)
45
Istruzione CMP
CMPs effettua la sottrazione SENZA modificare la
destinazione es. CMPL R1,R2
46
Confronto fra registri Aritmetica non segnata
  • CMPL R1,R2 (ipotesi R1,R2gt0)
  • Equivale ad eseguire R2-R1 senza aggiornare R2

C1 ?R1gtR2 Z1 ? R1R2 C0 and Z0 ? R1ltR2
CMPL R1,R2
Z0
C1
Z1
C0
R2-R1lt0 (R1gtR2)
not
R1R2
R1ltgtR2
R2-R1gt0 (R1ltR2)
C0 ?R1ltR2 Z0 ? R1ltgtR2 Z1 or C1 ? R1gtR2
Z0
R1ltR2
47
Confronto fra registri Aritmetica segnata R1,R2
rappresentati in complemento a 2
  • CMPB R1,R2
  • Equivale ad eseguire R2-R1 senza aggiornare R2

NV ?R1gtR2 NltgtV ? R1ltR2 Z1 ? R1R2 Z0 ?
R1ltgtR2
CMPB R1,R2
Z0
Z1
NltgtV
NV
R2-R10 (R1R2)
R1ltR2
R1ltgtR2
R2-R1gt0 (R2gtR1)
Z0
Z0
R1ltR2
R1gtR2
48
Esempio
movl 100,r1 movl 99,r2 a questo punto r1
ed r2 contengono valori positivi cmpl
r1,r2 c1, n1, z0 movl 100,r2 cmpl
r1,r2 c0, n0, z1 movl 101,r2 cmpl
r1,r2 c0, n0, z0
49
Istruzioni controllo di programma
50
Istruzioni di controllo esecuzione
  • Istruzioni di salto incondizionato
  • JMP, JSR, RET, RTI
  • JMP serve a modificare il contenuto del PC
  • JSR modifica il contenuto del PC ma SALVA il
    valore corrente del PC in una pila (utile nelle
    chiamate di sottoprogramma)
  • RET modifica il valore del PC con il valore
    salvato precedentemente in cima alla pila
  • RTI come RET ma quando il salto è causato da una
    interruzione

51
Istruzioni di controllo esecuzione
  • Istruzioni di salto condizionato J, JN
  • Jc Label, (salta a Label se c1), JNc (salta a
    Label se cltgt1) (c qualunque flag C (Carry), N
    (Negative) , Z (Zero) V (oVerflow), P (Parity), I
    (Interrupt Enable)
  • I flag sono modificati dopo unistruzione. Si usa
    solitamente listruzione compare, CMPs , che
    equivale ad eseguire una sottrazione ma senza
    modificare il registro di destinazione
  • Ex CMPL R1,R2 (esegue R2-R1, non modifica R2)

52
Esempio
R1gtR2
R1gtR2
si R1gtR2
si R1gtR2
no R1ltR2
no R1ltR2
I1
I1
I2
I2
cmpl R1 R2 JNC L2 se R1ltR2
salta ad I2 Istruzione I1 L2 Istruzione I2
cmpl R1 R2 JC L2 se
R1gtR2 salta ad I2 Istruzione
I1 L2 Istruzione I2
53
Esempio
if R1gtR2 then ltI1gt else ltI2gt ltI3gt
R1gtR2
si R1gtR2
no R1ltR2
cmpl R1 R2 R2-R1 JNC L2 se
R2ltR1 esegui I2 L1 I1 ramo then jmp L3
L2 I2 ramo else L3 I3 continua
I1
I2
I3
54
Istruzioni controllo macchina CLASSE 0
55
Istruzioni di tipo logico Classe 3
56
Istruzioni di rotazione e shift Classe 4
57
Istruzioni di rotazione e shift
58
Istruzioni (sottoinsieme) di Ingresso
Uscita Classe 7
59
Esempio programma assembly
  • Problema
  • Trovare il massimo in un insieme di 15 interi
    positivi
  • Ipotesi
  • Assumiamo che i valori siano compresi
    nellintervallo 0..255

Programma
15 interi fra 0 e 255
Valore massimo
60
Esempio programma assembly (cont)
  • Decidere tipo e numero variabili da usare
  • Dove memorizzare i valori in ingresso
  • -gt Vettore V di 15 elementi
  • Quali variabili ausiliare sono necessarie
  • Dove memorizzare il valore di uscita
  • registro
  • Algoritmo che risolve il problema
  • ipotizzare come valore massimo 0 e confrontarlo
    con tutti i 15 valori, aggiornandolo ogni volta
    che se ne trova uno maggiore

61
Algoritmo e dati
Inizio
V
i0 max0
i
0 1 14
no
ilt15
Fine
max
si
Vigtmax
no
maxVi
ii1
62
Uso dei registri..
Inizio
Memoria (mem)
R10,R20 R30X1300
R3
R1 (i)
0x1300
0 1 14
R1lt15
no
Fine
si
memR3gtR2
no
R2memR3
R2(max)
R1R11
R3R31
63
Soluzione prima versione
Inizio
Memoria (mem)
XORL R1,R1 XORL R2,R2 MOVL 1300h,R3 loop C
MPB 15,R1 JNC fine CMPB (R3),R2 JNC
skip MVLB (R3),R2 skip ADDL 1,R3 ADDB
1,R1 jmp loop fine halt
R10,R20 R30X1300
R3
R1 (i)
0x1300
0 1 14
R1gt15
si
Fine
no
memR3gtR2
no
si
R2memR3
R2(max)
R1R11
R3R31
64
Osservazioni
  • Parametri nel codice
  • Lindirizzo dellinizio del vettore
  • Numero di elementi
  • Uso di due registri
  • Contare il numero di iterazioni
  • Individuare lelemento nel vettore in memoria

65
Direttiva di definizione costanti
label EQU n costante1 EQU 4 il simbolo
costante14 costante2 EQU -0101b il simbolo
costante2-5 costante EQU 0fffh il simbolo
costante4095 Il simbolo label è un numero puro
che può essere utilizzato come un dato o un
indirizzo. . MOVB costante, R0 il byte
allindirizzo 4095 è spostato in R0 MOVB
costante,R1 R14095
66
Soluzione seconda versione
org 1400h base equ 1300h numel equ 15 code XORL
R1,R1 XORL R2,R2 loop CMPL numel,R1 JNC
fine CMPB base(R1),R2 JNC skip MVLB
base(R1),R2 skip ADDB 1,R1 jmp
loop fine halt end
org 1400h code XORL R1,R1 XORL R2,R2 MOVL
1300h,R3 loop CMPB 15,R1 JNC fine CMPB
(R3),R2 JNC skip MVLB (R3),R2 skip ADDL
1,R3 ADDB 1,R1 jmp loop fine halt end
67
Soluzione terza versione
Un accesso in meno alla memoria
org 1400h base equ 1300h numel equ 15 code XORL
R1,R1 XORL R2,R2 loop CMPL numel,R1 JNC
fine movl base(R1),R3 CMPB R3,R2 JNC
skip MVLB R3,R2 skip ADDB 1,R1 jmp
loop fine halt end
org 1400h base equ 1300h numel equ 15 code XORL
R1,R1 XORL R2,R2 loop CMPL numel,R1 JNC
fine CMPB base(R1),R2 JNC skip MVLB
Base(R1),R2 skip ADDB 1,R1 jmp
loop fine halt end
68
Scrittura ed assemblaggio
69
Confronto modi indirizzamento
  • Problema
  • dato un array di 10 longword allocato a partire
    dalla locazione 2500h costruirne linverso a
    partire dalla locazione 3000h
  • Soluzione 1 indirizzamento indiretto con
    registro
  • Soluzione 2 indirizzamento con post- e
    pre-incremento
  • Soluzione 3 indirizzamento con spiazzamento

70
Il problema
Array1
Array2
3000h
V1
2500h
V9
2504h
3004h
V2
V8
V3

. . . .
2508h

Vi
. . .
Vi


V3
V8
V2
2536h
V9
V1
3036h
71
Soluzione 1 indirizzamento indiretto con
registro
72
ORG 400H Dichiarazione
Costanti DIM EQU 10 ARRAY1
EQU 2500H ARRAY2 EQU 3000H Cor
po del Programma CODE XORL
R0,R0 resetta R0 XORL R1,R1 resetta
R1 XORL R2,R2 resetta R2 MOVL
ARRAY1,R1 carica in R1 l'indirizzo base
dell'array originale MOVL ARRAY2,R2 carica in
R2 l'indirizzo base dell'array invertito MOVL
DIM,R0 carica in R0 la dimensione (numero di
elementi) dell'array da invertire SUBL 1,R0
decrementa il contatore R0, R0DIM-1 ASLL
2,R0 R0R04, calcola l'offset da sommare
all'ind.base del'array per ottenere l'ind.
dell'ultimo elemento ADDL R0,R2 pone in R2
l'ind. dell'ultimo elemento dell'array MOVL
DIM,R0 ricarica la dimensione dell'array in R0
per usarlo come contatore REPEAT MOVL
(R1),(R2) copia memoria memoria di ARRAY1i in
ARRAY2DIM-1-i i0...DIM-1 AD
DL 4,R1 R1 ora punta all'elemento succ. di
ARRAY1 SUBL 4,R2 R2 ora punta
all'elemento prec. di ARRAY2 SUBL 1,R0
decrementa il contatore R0 di 1 JNZ REPEAT
salta a REPEAT se R0 diverso da 0 HALT
fine programma END
73
Soluzione 2 indirizzamento con post- e
pre-incremento
74
ORG 400H Dichiarazione
Costanti DIM EQU ? ARRAY1
EQU 2500H ARRAY2 EQU 3000H Cor
po del Programma CODE XORL
R0,R0 resetta R0 XORL R1,R1 resetta
R1 XORL R2,R2 resetta R2 MOVL ARRAY1,R1
carica in R1 l'indirizzo base dell'array
originale MOVL ARRAY2,R2 carica in R2
l'indirizzo base dell'array invertito MOVL
DIM,R0 carica in R0 la dimensione (numero di
elementi) dell'array da invertire ASLL 2,R0
calcola l'offset da sommare ad ARRAY2 per
puntare locazione corrispondente a
ARRAY2DIM NB se ARRAY2 è di dimensione
DIM allora ARRAY20..DIM-1 ADDL R0,R2
R2 ora punta a ARRAYDIM MOVL DIM,R0
Inizializza R0 a DIM REPEAT MOVL (R1),-(R2)
Copia memoria memoria dalla cella puntata da
R1 in quella puntata da R2-4 (MOVL!). Alla
fine del com. R1R14, R2R2-4 SUBL 1,R0
Decrementa il contatore R0 JNZ REPEAT Se R0!0
salta a REPEAT HALT Fine
programma END
75
Soluzione 3 indirizzamento con spiazzamento
76
ORG 400H Dichiarazione
Costanti DIM EQU ? ARRAY1
EQU 250H ARRAY2 EQU 278H Corpo
del Programma CODE XORL
R0,R0 resetta R0 XORL R1,R1 resetta R1
XORL R2,R2 resetta R2 MOVL DIM,R0
carica in R0 la dimensione (numero di elementi)
dell'array da invertire SUBL 1,R0 decrementa
il contatore R0, R0DIM-1 ASLL 2,R0 R0R04,
calcola l'offset da sommare all'ind.base
del'array per ottenere l'ind. dell'ultimo
elemento (ARRAYDIM-1) MOVL R0,R2 Copia il
contenuto di R0 in R2 MOVL DIM,R0 ed
inizializza R0 a DIM REPEAT MOVL
ARRAY1(R1),ARRAY2(R2) Copia memoria memoria
dall'indirizzo ARRAY1i in
ARRAY2DIM-1-i, i0..DIM-1 ADDL 4,R1
Incrementa di 4 byte R1 (gli elementi dell'array
sono longwords!) SUBL 4,R2 Decrementa di 4
byte R2 R1i4, R2(DIM-1-i)4 SUBL
1,R0 Decrementa il contatore R0 JNZ REPEAT
HALT END
Write a Comment
User Comments (0)
About PowerShow.com