Esplora E-book
Categorie
Esplora Audiolibri
Categorie
Esplora Riviste
Categorie
Esplora Documenti
Categorie
Architettura
e Programmazione Assembly
Alberto BROGGI
Dipartimento di Ingegneria dell’Informazione
Università di Parma
La CPU Intel 8086:
Architettura
e Programmazione Assembly
Alberto BROGGI
Dipartimento di Ingegneria dell’Informazione
Università di Parma
Seconda edizione
Per eventuali aggiunte e/o correzioni:
"!#!#!$
%&%'("%)&*"
oppure
Prefazione alla prima edizione
I LINGUAGGI ASSEMBLY 2
Caratteristiche dei Linguaggi Assembly 3
Statements 4
Istruzioni 5
Pseudo-Istruzioni 9
Macro 10
Commenti 11
Vantaggi dei Programmi Assembly 12
APPENDICI 114
A: Programma di Esempio 114
B: Esempio di Documentazione dell’Istruzione AND 120
C: Instruction Set della CPU 8086 121
D: Funzioni DOS (INT 21h) 124
E: Funzioni BIOS 127
F: Pseudo Istruzioni del MACRO ASSEMBLER 128
G: Tracce per la Risoluzione di Alcune Prove Scritte 132
La CPU Intel 8086: Architettura e Programmazione Assembly 1
+
I Linguaggi Assembly
+
Architettura logica della CPU Intel 8086
+
Il linguaggio Assembly 8086
+
Le funzioni MS-DOS
+
La famiglia di processori 80X86
+
Procedura di creazione di un programma Assembly
2 A.Broggi
I LINGUAGGI ASSEMBLY
+
Caratteristiche dei Linguaggi Assembly
+
Statements
+
Istruzioni
+
Pseudo-Istruzioni
+
Macro
+
Commenti
+
Vantaggi dei Programmi Assembly
La CPU Intel 8086: Architettura e Programmazione Assembly 3
+
Sono linguaggi di basso livello
+
Vi è corrispondenza uno a uno con le istruzioni del linguaggio
macchina
+
I simboli mnemonici utilizzati sono associati a
– istruzioni
– sequenze di istruzioni
– indirizzi di memoria
– aree di memoria
– dispositivi di I/O
+
Possibilità di utilizzare al meglio la macchina hardware
+
La stesura di un programma Assembly è molto complessa
+
Possibilità, nei macro-assemblatori, di definire macro-istruzioni
+
Possibilità di introdurre nel programma chiamate di libreria
4 A.Broggi
Statements
Istruzioni
Esempio:
<>=#?A@B= C /FE
D ? GJILKMG
H
1MCON ?HGJIQPSR
T*U VMWAX ? ,
Y[Z = R"P
@ V =
V\WFX ? ,
6 A.Broggi
Etichette
Esempio:
7] PP>P ;
] P ^ ] 1 T.,_V `3YbaFY =P
P] ] V < X K `5,
`3YaY =FP ] PPP CD/cE 1 , IdR
] PPfe <>g , `h, IQP
La CPU Intel 8086: Architettura e Programmazione Assembly 7
Codici Operativi
+
È lo mnemonico di un’istruzione assembly: in altri termini spe-
cifica l’operazione che deve essere eseguita dalla CPU
+
È l’unico campo che non può mai mancare in un’istruzione
Esempio:
<>=#?A@B= C /FE
D ? GJILKMG
H
1MCON ?HGJIQPSR
T*U VMWAX ? ,
Y[Z = R"P
@ V =
V\WFX ? ,
8 A.Broggi
Operandi
+
nell’istruzione stessa
+
in un registro
+
in memoria
+
su una porta di I/O
Esempio:
CD/cE ?0GJIdR
CD/cE ?0GJILK\G
CD/cE ?0GJI E ? , / @ V
Y[Z ?iGJI ` G
La CPU Intel 8086: Architettura e Programmazione Assembly 9
Pseudo-Istruzioni
Esempio:
Macro
Esempio:
<"g Y x|=Ar ,\V x|=Fr}?cGsr}~ C ? 1 @ /
<>g , ?0GIQP
>< g , ?0GIQP
>< g , ?0GIQP
>< g , ?0GIQP
<"g Y x|=Ar ,\V x|=Fr}?cGsr}~ VZA` C
Commenti
t
t -jkjl- .
b jj .w - b
t
<>=#?A@B= C /AE
? GILKMG
0 t 1 - &
%v ?iG )k j 4)) - -
1MCON ?0GIdR(~ t < 9 - )k. j '4".)&)&9
% j
T*U VMWAX ? , t - )&) - 9
%'n)') -
Y[Z = R"P t <
&nl) - b99b jk- & - 4%)l.9
@ V = t @ ' -
V\WFX ? ,
12 A.Broggi
Il programma BASIC è:
P >] ] Y ]
P%P ]N @ YZ = Y
PSR ] Y Y R
Pe ] Y x Y P ]] a / = / P%P ]
La CPU Intel 8086: Architettura e Programmazione Assembly 13
Y `3
t¡ " > >
t¡
t¡ N
%.4w - 4> - bf9 - 4>Q9b9b - 7 < Z ;¢4 - )&)p£.wyn* - - 9% -
t¡
t¡ " > >
ARCHITETTURA LOGICA
DELLA CPU INTEL 8086
+
La CPU INTEL 8086
+
Gestione della Memoria
+
Registri e Flags
+
Composizione manuale di istruzioni macchina
La CPU Intel 8086: Architettura e Programmazione Assembly 17
Memoria ...
0 16 32 48 64 80 96 1M-32 1M-16 1M
Paragrafi
0 1 2 3 4 5 64k-2 64k-1
0
1
Segmenti
2
La CPU Intel 8086: Architettura e Programmazione Assembly 19
Registri e Flags
+
AX: Accumulator, utilizzabile anche come AH + AL
+
BX: Base, utilizzabile anche come BH + BL
+
CX: Count, utilizzabile anche come CH + CL
+
DX: Data, utilizzabile anche come DH + DL
22 A.Broggi
Pointer Registers
+
Base Pointer
– BX: Data Segment Base Pointer (è il BX precedente!)
– BP: Stack Segment Base Pointer
+
Index Pointer
– SI: Source Index Pointer
– DI: Destination Index Ponter
+
Stack Pointer
– SP: Stack Pointer
+
Instruction Pointer
– IP: Instruction Pointer
La CPU Intel 8086: Architettura e Programmazione Assembly 23
Segment Registers
+
CS: Code Segment Register
Contiene sempre l’indirizzo di testa del segmento contenente
il codice; viene inizializzato dal Sistema Operativo e non deve
essere utilizzato dal programmatore.
+
SS: Stack Segment Register
Contiene sempre l’indirizzo di testa del segmento contenente
lo stack; viene inizializzato dal Sistema Operativo e non deve
essere modificato dal programmatore.
+
DS: Data Segment Register
Di solito contiene l’indirizzo di testa del segmento dei dati utiliz-
zati dal programma; deve essere inizializzato dal programmatore
all’interno del suo programma.
+
ES: Extra Segment Register
Può essere utilizzato per definire un segmento ausiliario, per
esempio per un ulteriore segmento dati; deve essere inizializzato
dal programmatore all’interno del suo programma.
24 A.Broggi
Flag Register
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OF DF IF TF SF ZF AF PF CF
Carry Flag
Parity Flag
Auxiliary Flag
Zero Flag
Sign Flag
Trap Flag
Interrupt Flag
Direction Flag
Overflow Flag
Flag di Stato
Flag di Controllo
Composizione Manuale
di Istruzioni Macchina
MOV AH,11
+
Elementi di Base del Linguaggio
+
Istruzioni
+
Modi di Indirizzamento
+
Tempo di Esecuzione delle Istruzioni
+
Pseudo-Istruzioni
+
Un programma scritto in Assembly 8086 è composto di State-
ments; normalmente ognuno di essi occupa una riga fino ad un
LF
o una coppia CR
LF
.
+
Uno statement può proseguire sulla riga successiva, se questa
comincia con il carattere ’&’.
+
L’insieme dei caratteri utilizzabili è composto da
– caratteri alfanumerici (maiuscole, minuscole, cifre),
– caratteri non stampabili (spazio, TAB, CR
, LF
),
¯ °h±
– caratteri speciali ( ¬ ²³M´'µ
;’.",_:?@$&)
+
All’interno del programma possono comparire:
– Identificatori
– Costanti
– Espressioni
La CPU Intel 8086: Architettura e Programmazione Assembly 31
Identificatori
+
Sono usati come nomi assegnati ad entità definite dal program-
matore (segmenti, variabili, label, etc.)
+
Sono composti da lettere, numeri o uno dei tre caratteri @ ? _,
ma non possono iniziare con un numero
+
Hanno lunghezza massima di 31 caratteri
32 A.Broggi
Costanti
Espressioni
+
PTR, OFFSET, SEG, TYPE, THIS, segment override
+
HIGH, LOW
+ ¯
(unario), (unario)
+ ° ±
, , MODE, SHL, SHR
+ ¯
,
+
EQ, NE, LT, LE, GT, GE
+
NOT
+
AND
+
OR, XOR
+
SHORT
Istruzioni
+
Trasferimento Dati
+
Aritmetiche
+
Manipolazione di Bit
+
Trasferimento di Controllo
+
Manipolazione di Stringhe
+
Manipolazione di Interruzioni
+
Controllo del Processore
36 A.Broggi
OpCode Descrizione
General Purpose
MOV Move (Byte or Word)
POP Pop a Word from the Stack
PUSH Push Word onto Stack
XCHG Exchange Registers
XLAT Translate
Input/Output
IN Input Byte or Word
OUT Output to Port
Trasf. di indirizzi
LDS Load Pointer Using DS
LEA Load Effective Address
LES Load Pointer Using ES
Trasf. Flag Register
LAHF Load Register AH from
SAHF Store Register AH into
POPF Pop Flags from the Stack
PUSHF Push Flags onto Stack
La CPU Intel 8086: Architettura e Programmazione Assembly 37
+
segment register ¸ immediato
Si deve passare attraverso un registro general-purpose: esempio:
CD/AE ?0GJI ` ?c=#?sr< V0a
CD/AE ` <2IL?iG
+
segment register ¸ segment register
Si deve passare attraverso un registro general-purpose (4 cicli):
esempio:
CD/AE ?0GJI V <
CD/AE ` <2IL?iG
+
Qualsiasi trasferimento che utilizzi CS come destinazione
38 A.Broggi
Esempio:
N X w < g ?0G
N X <wg V <
N X <wg ` Y
3
N X <wg < Y
N\/FN < Y
N\/FN `3Y
N\/FN V <
N\/FN ?0G
La CPU Intel 8086: Architettura e Programmazione Assembly 39
Istruzioni Artimetiche
OpCode Descrizione
Addizione
AAA ASCII Adjust after Addition
ADC Add with Carry
ADD Addition
DAA Decimal Adjust after Addition
INC Increment
Sottrazione
AAS ASCII Adjust after Subtraction
SUB Subtract
SBB Subtract with Borrow
DAS Decimal Adjust after Subtraction
DEC Decrement
CMP Compare
NEG Negate
Moltiplicazione
AAM ASCII Adjust after Multiply
IMUL Integer Multiply, Signed
MUL Multiply, Unsigned
Divisione
AAD ASCII Adjust before Division
DIV Divide, Unsigned
IDIV Integer Divide, Signed
Conversione
CBW Convert Byte to Word
CWD Convert Word to Doubleword
La CPU Intel 8086: Architettura e Programmazione Assembly 41
Operazioni su 32 bit
Esempio 1:
Per sommare i 32 bit memorizzati in BX:AX con DX:CX, lasciando
il risultato in BX:AX,
? `F` ? GJI 1 G
i t < jkjk- P j .v9&&[
- &n
? ` 1 KMGJI ` G t< k j jl- P ¹'8ºL9''&
- n
Esempio 2:
Per sottrarre i 32 bit memorizzati in BX:AX a DX:CX, lasciando il
risultato in BX:AX,
< X K ?iGJI 1 G t < - )»!«4 j %v9&'
- n^
< K 1
KMGJI ` G t< " - y )»!«42ºd9'[
- &n
La CPU Intel 8086: Architettura e Programmazione Assembly 43
Moltiplicazione e Divisione
Moltiplicazione
Divisione
Istruzioni
per la Manipolazione dei Bit
OpCode Descrizione
Logiche
AND Logical AND
OR Logical OR
XOR Exclusive OR
NOT Logical NOT
TEST Test
Di Traslazione
SAL Shift Arithmetic Left (=SHL)
SAR Shift Arithmetic Right
SHL Shift Logical Left (=SAL)
SHR Shift Logical Right
Di Rotazione
ROL Rotate Left
ROR Rotate Right
RCL Rotate through Carry Left
RCR Rotate through Carry Right
48 A.Broggi
Istruzioni di Salto
Permettono di effettuare:
+
Salti Condizionati:
– il salto viene eseguito o meno a seconda del valore corrente
di uno o più flag; questi sono solitamente modificati da una
precedente istruzione CMP, SUB, etc.;
– la distanza relativa dell’istruzione cui saltare deve essere com-
¯
presa tra 128 e 127;
– non sono ammessi salti ad un segmento diverso da quello
corrente.
+
Salti Incondizionati:
Il salto avviene comunque e ad istruzioni ovunque posizionate,
anche all’interno di un segmento diverso da quello corrente.
La CPU Intel 8086: Architettura e Programmazione Assembly 51
Nota:
La CALL provvede a:
+
salvare il valore corrente di IP (e di CS nel caso di procedura
FAR) nello stack, tramite un’operazione di PUSH;
+
caricare in IP (e in CS) il valore corrispondente all’indirizzo di
partenza della procedura chiamata.
La RET provvede a:
+
ripristinare tramite un’istruzione POP il valore di IP (e di CS nel
caso di procedura FAR) salvato nello stack, riprendendo quindi
l’esecuzione del programma a partire dell’istruzione successiva
all’ultima CALL.
54 A.Broggi
Istruzioni
per il Controllo delle Iterazioni
OpCode Label
Istruzioni
per la Manipolazione delle Stringhe
OpCode Descrizione
Istruzioni di Spostamento
MOVS Move String (Byte or Word)
MOVSB Move String Byte
MOVSW Move String Word
Istruzioni di Confronto
CMPS Compare String (Byte or Word)
CMPSB Compare String Byte
CMPSW Compare String Word
Istruzioni di Ricerca
SCAS Scan String (Byte or Word)
SCASB Scan String Byte
SCASW Scan String Word
Istruzioni di Caricamento
LODS Load String (Byte or Word)
LODSB Load String Byte
LODSW Load String Word
Istruzioni di Scrittura
STOS Store String (Byte or Word)
STOSB Store String Byte
STOSW Store String Word
56 A.Broggi
Prefissi di Ripetizione
OpCode Descrizione
Prefissi di Ripetizione
REP Repeat
REPE Repeat While Equal
REPNE Repeat While Not Equal
REPNZ Repeat While Not Zero
REPZ Repeat While Zero
+
REP o REPE o REPZ:
Se usate in combinazione con
– MOVS, LODS e STOS, causano la ripetizione dell’istruzio-
ne seguente per un numero di volte pari al contenuto inizia-
le di CX; ad ogni iterazione CX viene decrementato e l’i-
struzione viene ripetuta fin tanto che CX è diverso da 0; al
termine CX vale 0;
– CMPS e SCAS, il comportamento è uguale al caso prece-
dente, con l’unica differenza che il ciclo viene abbandonato
anche se lo Zero Flag (ZF) assume valore 0;
+
REPNE o REPNZ:
Se usate in combinazione con
– MOVS, LODS e STOS, causano la ripetizione dell’istruzio-
ne seguente per un numero di volte pari al contenuto inizia-
le di CX; ad ogni iterazione CX viene decrementato e l’i-
struzione viene ripetuta fin tanto che CX è diverso da 0; al
termine CX vale 0;
– CMPS e SCAS, il comportamento è uguale al caso prece-
dente, con l’unica differenza che il ciclo viene abbandonato
anche se lo Zero Flag (ZF) assume valore 1;
La CPU Intel 8086: Architettura e Programmazione Assembly 61
Esempio:
La CPU Intel 8086: Architettura e Programmazione Assembly 63
Istruzione INT
INT interrupt-number
Istruzione IRET
Istruzioni
per il Controllo del Processore
OpCode Descrizione
Modifica dei flag
CLC Clear Carry Flag
CLD Clear Direction Flag
CLI Clear Interrupt-Enable Flag
CMC Complement Carry Flag
STC Set Carry Flag
STD Set Direction Flag
STI Set Interrupt Enable Flag
Sincronizzazione
ESC Escape
HLT Halt
LOCK Lock the Bus
WAIT Wait
Istruzione nulla
NOP No Operation
Istruzioni di Sincronizzazione
Modi di Indirizzamento
Register Addressing
Formato Assembly:
registro
Esempio:
CD/cE ?0GJILK\G
72 A.Broggi
Immediate Addressing
Formato Assembly:
espressione
Esempi:
CD/AE ?HGJIQP ]
CD/AE K , I 7 ~ P ¥ ;b P ]
La CPU Intel 8086: Architettura e Programmazione Assembly 73
Note:
+
L’operando può anche essere un simbolo definito mediante una
pseudo-istruzione EQU.
Esempio:
¦ V WFX
M PSRe~
'
C/AE 1 GI ¦
+
Il dato indicato nell’istruzione viene trasformato dall’assembla-
tore in formato binario su 8 o 16 bit, e scritto nel campo oppor-
tuno dell’istruzione macchina.
Si noti, come regola generale, che, se il dato è su 16 bit, gli 8
bit più significativi sono scritti nel secondo byte, mentre quelli
meno significativi nel primo.
74 A.Broggi
Direct Addressing
Formato Assembly:
variabile À espressione
Esempio:
CD/FE ?0GIL=«?AK _, V
CD/FE ?0GIL=«?AK _, V P©
La CPU Intel 8086: Architettura e Programmazione Assembly 75
Formato Assembly:
Esempio:
CD/cE ?0GJIm K0G
CD/cE ?0GJIm < Y
La CPU Intel 8086: Architettura e Programmazione Assembly 77
Esempio di
Register Indirect Addressing
78 A.Broggi
Esempio
Formato Assembly:
´Â registro
displacement
{µ
Esempio:
CD/AE ?HGJIm K0G ~
Nota:
le 3 forme
CD/AE ?HGJIm K0G ~
CD/AE ?HGJIJ~v K0G
CD/AE ?HGJIm K0G ~
Formato Assembly:
variabile
´ SI µ
variabile
´ DI µ
Esempio:
C/AE ?0GJIL=|?AK ,oV `FY
82 A.Broggi
Esempio di
Direct Indexed Addressing
La CPU Intel 8086: Architettura e Programmazione Assembly 83
Esempio
CD/AE < Y I ]
CD/AE 1 GJI E V 1 =Ar ,_V0ZAa =qg
W5XBY CD/FE ?iGJI < / X @ 1 V rE V 1 = < Y
CD/AE `5V <=Fr E V 1 = < Y IL?iG
? `F` < Y I R
, /s/AN W3XcY
84 A.Broggi
Formato Assembly:
variabile
´ BX µ ´ SI µ
variabile
´ BX µ ´ DI µ
variabile
´ BP µ ´ SI µ
variabile
´ BPµ ´ DI µ
Esempio:
C/AE ?0GJIL?0@B@B?BÃLKhG `AY
La CPU Intel 8086: Architettura e Programmazione Assembly 85
Pseudo-Istruzioni
LE FUNZIONI MS-DOS
Livelli superiori
Applicazioni Assembly
DOS
BIOS
Hardware
92 A.Broggi
Esempio:
C /FE
D ?3gI ]f¥ t x u.' ` / < p @ - 4Ħ5.§ - 4
Y[Z = R"P t ' w V
p
CD/FE ?3gI ] ? t< %bn'u.& K Y/ < p &Å1 -
Y[Z = P ] t - Æ1\69b%p
La CPU Intel 8086: Architettura e Programmazione Assembly 93
Il processore 8008
+
Progettato del 1971 da Intel Corp.;
+
versione estesa del 4004 (a 4 bit), principalmente usato per i
primi videogiochi;
+
indirizzamento in memoria di 16k bytes;
+
48 istruzioni macchina.
96 A.Broggi
Il processore 8080
+
Introdotto nel 1973;
+
è il primo processore a 8 bit;
+
10 volte più veloce dell’8008;
+
indirizza 64k bytes invece di 16k;
+
utilizzato per il primo personal computer (MITS Altair 8800)
nel 1974.
La CPU Intel 8086: Architettura e Programmazione Assembly 97
Il processore 8085
+
Nato nel 1977;
+
65% più veloce dell’8080;
+
altre case hanno sviluppato processori compatibili con l’8085
(Zilog Z80);
+
l’ultimo processore a 8 bit, venduto in 700 milioni di copie.
98 A.Broggi
Il processore 8086
+
Nato nel 1978;
+
processore a 16 bit;
+
2.5 milioni di istruzioni per secondo (2.5 MIPS);
+
indirizza 1 M Byte di memoria;
+
per la prima volta un processore comprende un’unità di prefet-
ching;
+
include operazioni complesse come la moltiplicazione e la divi-
sione.
La CPU Intel 8086: Architettura e Programmazione Assembly 99
Il processore 8088
+
Nato 1 anno dopo l’8086;
+
l’8086 e l’8088 differiscono in quanto il primo lavora su 16 bit a
livello sia di struttura interna sia di connessioni esterne, mentre
il secondo è un processore esternamente ad 8 bit ed internamente
identico all’8086 (16 bit);
+
l’insieme delle istruzioni riconosciute dall’8086 coincide con
quello dell’8088, portando completa compatibilità;
+
l’8088 è stato affiancato all’8086 perchè rende possibile l’im-
piego di periferici ad 8 bit.
+
nel 1981 IBM include l’8088 nel proprio personal computer.
100 A.Broggi
Il processore 80286
+
Rappresenta l’evoluzione dell’8086, introdotto nel 1983;
+
indirizza 16 M byte di memoria;
+
l’instruction set è praticamente identico a quello dell’8086 a me-
no di poche istruzioni per l’utilizzo dei rimanenti 15 M byte di
memoria;
+
viene introdotta la modalità protetta;
+
4.0 MIPS a 8.0 MHz.
La CPU Intel 8086: Architettura e Programmazione Assembly 101
Il processore 80386
+
Viene introdotto nel 1986;
+
è un grosso passo in avanti rispetto all’80286;
+
è un processore a 32 bit (sia per il bus dei dati sia per l‘accesso
alla memoria);
+
indirizza 4 G byte di memoria;
+
nascono diverse versioni dell’80386: 386SL, 386DX, 386EX,
386SLC,...
+
include istruzioni per il memory management (che i processori
precedenti demandavano completamente al software);
+
è compatibile con i precedenti, quindi può eseguire il codice per
i processori a 16 bit.
102 A.Broggi
Il processore 80486
+
Nel 1989 viene introdotto l’80486;
+
non è molto differente dal precedente se non per l’inclusione
della parte matematica (80387) e di 8 k bytes di cache;
+
funziona a 50 MHz, e arriva a 50 MIPS (50% più veloce dell’80386);
+
anche in questo caso escono versioni diverse: 486SX, 486DX,
486DX2, 486DX4,...
La CPU Intel 8086: Architettura e Programmazione Assembly 103
Il processore Pentium
+
Nasce nel 1993;
+
non viene chiamato 80586 per problemi di copyright su numeri;
+
la prima versione funziona a 60 MHz, e produce 110 MIPS;
+
la cache viene aumentata da 8 a 16 k bytes;
+
il data bus viene portato a 64 bit;
+
la principale caratteristica è la comparsa di una doppia pipeline
per le operazioni su interi;
+
inoltre viene implementata una politica di branch prediction.
104 A.Broggi
La tecnologia MMX
+
Viene introdotta per la prima volta sul processore Pentium;
+
MMX (MultiMedia eXtension) serve per migliorare la gestione
di particolari tipi di dati;
+
con un piccolo aumento dell’area del processore, vengono im-
plementate numerose nuove funzioni (aritmetica a saturazione);
+
i registri MMX registri sono sovrapposti ai registri floating-point;
+
sfrutta modalità di elaborazione SIMD suddividendo i 64 bit in
pacchetti.
La CPU Intel 8086: Architettura e Programmazione Assembly 105
CREAZIONE DI UN PROGRAMMA
ASSEMBLY
Esempio: file 1
Esempio: file 2
L’Assemblatore
Il Linker
Il Debugger
Struttura e Documentazione
di un Programma Assembly
+
Ogni procedura di medio livello deve essere corta e deve servirsi
di altre chiamate a procedura.
+
Le procedure di basso livello devono essere riunite nella parte
finale del codice (meglio se in un modulo differente).
+
Le chiamate agli Interrupt devono essere presenti solo nelle pro-
cedure di basso livello di interfaccia.
114 A.Broggi
APPENDICE A:
Programma di Esempio
= Y = ,_V È V 9b.
& - u4>1 - )
%) - V )
<>=#? 1h¦C < V3a C ViZ = N A ? @q? <"=q? 5 1 ¦ p <=#? 51 ¦p t Eq% - )&)&z
- - - ub - 4
` K ~ `5X NBb7 p PfRe~ ¨ ¥ © p ; t j j b - .Ò) < -
%Ó6J
<>=#? 1h¦C V_Zc` < t :wb
~ >© §^.9
?0<< X C V 1 < 1 < V0a I ` < ` < Via I <6< <w=q? 15¦C
1 < V3a < V3a C V0Z = N ?AB @ ? N X K ,Y 1 ¡p 15/ `V p
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t 1\vb
& - )4%)Q -jkjl- t
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
C ? YZ N @ $/ 1 x2?A@
N X <wg ` < t Y b9 bu%m4 - ) - 9
- b < V CªN @ V
CD/cE ? GI ]]
0 t - )Q&6
'v4>%Q> -k j j Ô
N X <wg ?HG t
La CPU Intel 8086: Architettura e Programmazione Assembly 115
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t N_bz
f4w - 4Qw'u. - )&u%u - u% t
t t
tA@ V3aFY <=#@ YÍX = Y,YbU_U ?c= Y ?0GJI ` GJI ` < t
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
CD/cE ?3gsI ]] t < %n^u%& K Y / < p < ÊE34%vClz4p
CD/cE ? , I] e t j z4w:%9b © ] R ¨ I
)'
Y[Z = P ] t 7 V - 9w[[
%wÄCD/AE ?0GJIe ;
CD/cE ` JG I ] ewP ¨ t Yj
z9 - - 7 ` g ;ÏÊ
)'6 - 7 `F, ;
1 ? ,o, < N3/ <w=q?sr 1 X @A< / @ V t CÖny)l
9by%)&) - 9Ê9
%%)' -
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t Nz
.4 - %Ê9 -j - ) j f99 - 'w&u% - )& t
t t
tA@ V3aFY <=#@ YÍX = Y,YbU_U ?c= Y ` GJIL?3g t
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t N_bz
f4w - %Ê9 -j - >Ä j v× jQ- v& - t
t t
t E ?B@ Y ?cK Y,Y J)l> j .p j j bu%u - v.)') - )
- u%>6{1«/ `AY 1 V r=q?F<w= / t
t @ V3aFY <=#@ YÍX = Y,YbU_U ?c= Y ?0GJILK , I 1 GJI ` G
A t
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t N_bz
f4w - %Ê9 -j - >Ä j v× jQ- 4>f
jl- )' t
t t
t E ?B@ Y ?cK Y,Y J)l> j .p j j bu%u - v.)') - )
- u%>6{1«/ `AY 1 V r=q?F<w= / t
t @ V3aFY <=#@ YÍX = Y,YbU_U ?c= Y ?0GJILK\GJI ` G
A t
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t N_bz
f4w - %Ê4% j - 9y.
%p - )' - % - u%& t
t t
tA@ 3 V aFY < =#@ YÍX = Y ,YbU_U ?c= Y ?0GJI ` G t
t 1«/ `FY 1 Y¢`3Y @ Y = / @ Z / t
t U .) - ] È[Ú 8p - )& - £b. - u%& t
t U .) - P È[Ú 9
m4 - )Q> -jkjk- t
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t¡ " > > t
t¡ Nz
.44Q - 99)n%)&)&4k. -
%
- *t
t¡ " > > t
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t Nz
.4w - .Ê9 -j - y j %v4 - ] - É t
t t
t N ?c@c? C V =#@ Y J)k j
p j j uu - ? , t
t E ?B@ Y ?cK Y,Y J)l> j .v4>%)&) - - & -
º j j bu%u - vN ? aYZ ? t
t @ V3aFY <=#@ YÍX = Y,YbU_U ?c= Y ?0GJI 1 GILK ,
A t
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
118 A.Broggi
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t Nz
.4w - .Ò)
.4 - - 9% - v4>.l - 9p < pJp Z p t
t &b - 9)'v4 - n^.Ò)( - ) j %v>4%m4"6» - 9 t
t t
tA@ 3 V aFY <=#@ YÍX = Y,YbU_U ?c= Y ?0G t
t 1«/ `FY 1 Y¢`3Y @ Y = / @ Z /J ? , )l
b4&
% ?5< 1 YÂY )
b t
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t N_bz
f4w - %Ê9z9 - y)Q
9b t
t t
t N ?c@c? C V =#@ Y J)y
4w& - 4%)) - z9u%&4)m
996 j j 'u È t
t u - y.)Q9bb ` G ` g & - I `5,
b)& - t
t E ?B@ Y ?cK Y,Y J)l> j .v4>%)&) - - & -
º j j bu%u - vN ? aYZ ? t
tA@ V3aFY <=#@ YÍX = Y,YbU_U ?c= Y ?3gILKMg t
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t N_bz
f4w - %Ò)> - 9b j j u%u - )Ä1«/ `AY 1 V r =#?F<w= / t
t t
t N ?c@c? C V =#@ Y J)k j
p j j uu - Ä1«/ `FY 1 V r =#?F<w= / t
t @ V3aFY <=#@ YÍX = Y,YbU_U ?c= Y ?0G
A t
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t Nz
.4 - %Ê9 -j - - 9'6 - t
t t
t N ?c@c? C V =#@ Y J)&p£&4&&u%u%4>%)) - 9[' - (º j j uu - ` < ` G t
t @ V3aFY <=#@ YÍX = Y,YbU_U ?c= Y ?3gI ` G
A t
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
APPENDICE B:
Esempio di Documentazione
dell’Istruzione AND
? Zc` ,
- ) ? ZA` x ) - z9/ ` Y =Á< U ? NÛ1
] y ]
,
> 4>f9& - b È 4>f9' - ? ZA` 9
? Zc` 9S9Ò -
'¹(¤ .9b)'Ò P
bbf9b64w&S9
y %. - 649 - P
APPENDICE C:
Instruction Set della CPU INTEL 8086
T K T j Y K )!
T K V T j Y K .)'! % V_Þ - )
T 1 T j Y ª1 - §
T 1 G U T j ÄÖ1 G @ %&9b. U %
T.V T j Y V_Þ - )
Tfa T j Y a b - %
Tfa$V T j Y a - b.Ò% VoÞ - )
T., T j Y , .99
T.,\V T j Y , %99Ê V_Þ - )
T CªN T j X
4'& - )&)&§
T.Z ? T j Y Z > ? n
T.Z ? V T j Y Z ? n% V_Þ - )
T.Z K T j Y Z K %)!
T.Z K V T j Y Z K .)&! V_Þ - )
T.Z 1 T j Y Z ×1 - §
T.ZAV T j Y Z " V_Þ - )
T.ZFa T j Y Z a -
T.ZFa$V T j Y Z > a b - .Ò% V_Þ - )
T.ZA, T j Y Z , .99
T.ZA,_V T j Y Z /B , f9b9Ê
VÞ - )
T.Z / T j Y Z ×/3n.[)!
T.Z N T j Y Z vN - &§
T.Z < T j Y Z < &
T.ZU T j Y Z U .
T / T j Y ª/3n%[)&!
T N T j Y ¤N - &§
T N V T j Y ÖN - § V n.
T N5/ T j Y ÖN - b&§/344
T < T j Y <
T*U T j Y U .b
, ?AgAx , - 4 @ 9bb. ?0g j
,` < , - 4ÄN8w% X 9& ` <
,V ? , - 4 V [[f
'n ? 44.99
,V < , - 4Nw% X 9 V <
, /s15¦ ,
%Óß K 9
, / ` < , - 4 < b7 K § S4;
, / ` <wK , - 4 < K §^
, / ` < , - 4 < & 4
, /s/AN , Ä
Ù1\
, /s/AN V , )' V_Þ - )
, /s/AN ZAV , )& Z VoÞ - )
, /s/AN ZU , &) Z U %
, /s/AN U , )' U %
CD/FE Cln7 K §y% 4;
La CPU Intel 8086: Architettura e Programmazione Assembly 123
APPENDICE D:
Funzioni DOS (INT 21h)
Rx 7 ~ ¥; a ` 9bÓ = - 9 ? 464wb.997 ` =q? ;
e ] 7 ~z© ; a ` / < E3%9 Z j %
e>P 7 ~ Éz; = . j & - b - 4 < - § @ .9b4w.w
e.R 7 ¨ ]z; @ .9b.n^f4
e%e 7¨ P ; a Ê% < %Æ1o) ÈK - Ó < - 69
e~ 7¨ R ; @ .9b.n^f4
e ¨ 7¨ e ; a Y w%b6wÊE3%
e% 7¨ ~ ; a ` 9bÓ x % < -
e ¥ 7 ¨¨ ; @ .9b.n^f4
e%© 7¨ ; a Ê% < %Æ1\w§ È ` %.4w.w Y w jl- &
e É 7 ¨ ¥; 1\ - b ` &.
§Ù7&Cª¦ `FY @ ;
e%? 7¨ © ; @ j n^ ` .
(§Ù7 @ C `FY @ ;
e%K 7 ¨ É; 1 - ` .
(§Ù7Ý1 g `AY @ ;
e 1 7 ]z; 1\ - - x )'v7Ý1 @ V ?B= ;
e ` 7 wP ; /0% - x ')
e V 7 zR ; 1\)z9b - x &)& g - 64w)
e%x 7 e ; @ - 4 j x )&y% ` .n
I X 9b& - g - 4)'
~ ] 7 ~ ; 'y: x &)&
` n&
% I X 9' - g - 64w)&
~P 7 ¨ ; ` %)'% x &)&v7 XcZA,YZ ¦;
~fR 7 ; CQn^ x &)&{N8w%{7 , < ViV ¦$;
~.e 7 ¥; a Ê% < % x ') ? b&w.971 g C/ ` ;
~%~ ]] 7 ©>È ]z; Y /s1 = , a ` %n
Y w[ jl- '
~%~ ] P 7 ©>ÈbP ; Y /s1 = , < ` .n^
Y w[ jk-
~%~ ] R 7 ©>ÈR ; Y /s1 = , @ - 4 j 1 - -
% ` %n&
%
~%~ ] e 7 ©>È:e ; Y /s1 = , &b×1 - -
(% ` .n
~%~ ] ~ 7 ©>È~ ; Y /s1 = , @ - 4 j K )&z
%Ó ` .n^
~%~ ] ¨ 7 ©>È ¨ ; Y /s1 = , &b K )z
Ó ` %n
~%~ ] 7 ©>È: ; Y /s1 = , a Y 6w < - 9
~%~ ]z¥ 7 ©>È ¥; Y /s1 = , a Æ/5ww < - 9
~%~ ] © 7 ©>È:© ; Y /s1 = , Y 9 ` .n
@ j n - )'
~%~ ]É 7 ©>È Éz; Y /s1 = , Y 9 ,
- ) ` %n
% @ j b
126 A.Broggi
APPENDICE E:
Funzioni BIOS
APPENDICE F:
Pseudo-Istruzioni
del MACRO ASSEMBLER
Ô , ' . - ) È 1 - -
.à/0% - >
Ð , z
- &Ù1\w%Æ/0% - 4
â V wb.99'Ù/0% -
ã < Õ9'wä/0% - b
Cl)')&
- &
? 44w&&Ä
X - §ÌN_)&9
È < w -
&Ä% X - b§ÌCl69
<
x &%) 4 È ZA-j {/3. -
` n^ 9
< % j .w È /An%4wä/0% - b
tt C -
%ß1\ jkj %w
Ú , &b. - ) È= Æ/3% -
Y 64wÄ/0% - >
1\ - ? 9b)w < § j )
P%© V - )& © ] P.© Y 69
(9
R"©
V - )' @ - )mCQ4 © ] R© Y 9
b9
R"© V - )Nf
(.4ÄClz4w © ] R© Y 9bbÕ
(&69
R"© ¥ V - )& © ] R>© ¥ Y 69
(9
© ] © V - )& © ] © Y 9bb6
'Õ9
© ] © ¥ V - )& © ] © ¥ Y 9bb6
'Õ9
? Zc` K !# 9b ,
- ) ? ZA`
?5<< X C V ? 99bz
% - < % j %wÊ!«& < % j %w @ %9%
?3= ` [ ? 9b)&w < % j w
K\ÃF= V ? )' < % j .wÊ% ? § K §z ? 44w.99
K\ÃF= V `5- - = §> P §^
1«/FCªC V0Z = V w%¹Cl)& È , {1\ jkj %
1«/FCªC/ Z ` %[&ä/0n%) - 6& < . j %wS9
¡1 @ V x V - )&{1Mbz99 È@ %[%.
, 9'z9
` K ` [ K §^
`5` ` ` )%!#4
`#W `
[ W - 4!#4
La CPU Intel 8086: Architettura e Programmazione Assembly 129
APPENDICE G:
Tracce per la Risoluzione
di Alcune Prove Scritte
CALCOLATORI ELETTRONICI
Prova scritta
6 novembre 1989
å sulla riga successiva il numero dei bit con valore 1 presenti nella parola considerata. Tale
numero deve essere espresso in forma decimale.
<>=#? 1h¦C < V3a C ViZ = N A ? @q? <"=q? 5 1 ¦ p <=#? 51 ¦p t Eq% - )&)&z
- - - ub - 4
` K ~ `5X NBb7 p PfRe~ ¨ ¥ © p ; t j j b - .Ò) < -
%Ó6J
<>=#? 1h¦C V_Zc` < t :wb
~ >© §^.9
?0<< X C V 1 < 1 < V0a I ` < ` < Via I <6< <w=q? 15¦C
1 < V3a < V3a C V0Z = N ?AB @ ? N X K ,Y 1 ¡p 15/ `V p
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t 1\vb
& - )4%)Q -jkjl- t
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
134 A.Broggi
C ? YZ N @ $/ 1 x2?A@
N X <wg ` < t Y 9bbu%m4 - ) - 9
- b < V CªN @ V
CD/cE ?0GI ]] t - )Q&6
'v4>%Q> -jkj Ô
N X <wg ?HG t
1 ? ,o, Y[ZcYbU2Y ? ,YbU_U ? UÑY / ZBV
1 ? ,o, N @ V < VHZ =q? Ñ U Y/ AZ V
CD/cE ` gI
CD/cE `5, I '
1 ? ,o, < N3/ <w=q?sr 1 X A @ < / @ V t NH9&u.')Q
99.
%4w
t n - )&Q.9wQ ` g `5,
CD/cE ?0GI , /$1 ? UÑY / ZAV t 1 - &
- )kn - )'{4 - 9 -j -
1 ? ,o, <=q? CN ?sr g V G t< -j - ?iG Ì jk- 9 - 4wf
>
CD/cE ` gI
CD/cE `5, I '
1 ? ,o, < N3/ <w=q?sr 1 X @A< / @ V t @ & - 9
.
.99'n -
1 ? ,o, 1 ? , 1#/ , ?sr}K Y = t NHy)k j %v4>QÊ.9b%
t ?iG .)Q%&9b K\G
CD/cE ?0GILKMG t 1 - &
- )kn - )&b{4 - 9 -j -
1 ? ,o, <=q? CN ?sr `FV 1 t < -j - ?0G × jl- v4>f
jl- )'
@ V = t @ ' - ) < 9 jl- /3% - &n
C ? YZ V_ZA` N
CALCOLATORI ELETTRONICI
Prova scritta
24 settembre 1990
Scrivere un programma assembler che accetti da tastiera un carattere e visualizzi sullo schermo:
å il carattere se stampabile,
<>=#? 1h¦C < V3a C ViZ = N A ? @q? <"=q? 5 1 ¦ p <=#? 51 ¦p t Eq% - )&)&z
- - - ub - 4
` K ~ `5X NBb7 p PfRe~ ¨ ¥ © p ; t j j b - .Ò) < -
%Ó6J
<>=#? 1h¦C V_Zc` < t :wb
~ >© §^.9
?0<< X C V 1 < 1 < V0a I ` < ` < Via I <6< <w=q? 15¦C
1 < V3a < V3a C V0Z = N ?AB @ ? N X K ,Y 1 ¡p 15/ `V p
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t 1\vb
& - )4%)Q -jkjl- t
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
La CPU Intel 8086: Architettura e Programmazione Assembly 137
C ? YZ N @ $/ 1 x2?A@
N X <wg ` < tY 9bbu%m4 - ) - 9
- b < V CªN @ V
CD/cE ?0GI ]] t - )Q&6
'v4>%Q> -k
j j Ô
N X <wg ?HG t
1 ? ,o, Y[ZcYbU2Y ? ,YbU_U ? UÑY / ZBV
1 ? ,o, N @ V < VHZ =q? UÑY / ZAV
1 ? ,o, ,ÕViaaFY r 1 gA?A@ t , >Î
- - .yÒ)äy ? ,
1 ? ,o, <=q? CN ?sr 1 gc?A@ t< ->j - )l
w%v4 ? ,
1 ? ,o, <=q? CN ?sr< N ? U2Y / t< ->j - 9 - u%
1 ? ,o, <=q? CN ?sr `FV 1 t < -j - ? , 4>.
% jl- )
@ V = t@ ' - ) < 9 jl- /3% - &n
C ? YZ V_ZA` N
CALCOLATORI ELETTRONICI
Prova scritta
22 ottobre 1990
<>=#? 1h¦C < V3a C ViZ = N A ? @q? <"=q? 5 1 ¦ p <=#? 51 ¦p t Eq% - )&)&z
- - - ub - 4
` K ~ `5X NBb7 p PfRe~ ¨ ¥ © p ; t j j b - .Ò) < -
%Ó6J
<>=#? 1h¦C V_Zc` < t :wb
~ >© §^.9
?0<< X C V 1 < 1 < V0a I ` < ` < Via I <6< <w=q? 15¦C
1 < V3a < V3a C V0Z = N ?AB @ ? N X K ,Y 1 ¡p 15/ `V p
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t 1\vb
& - )4%)Q -jkjl- t
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
140 A.Broggi
C ? YZ N @ $/ 1 x2?A@
N X <wg ` < t Y b9 bu%m4 - ) - 9
- b < V CªN @ V
CD/cE ?0GI ]] t - )Q&6
'v4>%Q> -jkj Ô
N X <wg ?HG t
1 ? ,o, Y[ZcYbU2Y ? ,YbU_U ? Ñ U Y / ZBV
1 ? ,o, N @ V < VHZ =q? U Y / ZAV
Ñ
1 ? ,o, ,ÕViaaFY r ZAX C V @ / t Y )Q j %)(n - ? ,
1 ? ,o, <=q? CN ?sr K Y Z t < -j - )k
b.w4 ? ,
C XA, ? , t 1 - )&
%) - ) Þ - 4 -
1 ? ,o, <=q? CN ?sr K Y Z t < -j - )k
b.w4 ? ,
@ V = t @ ' - ) < 9 jl- /3% - &n
C ? YZ V_ZA` N
CALCOLATORI ELETTRONICI
Prova scritta
3 giugno 1991
å Verifichi quante volte la sequenza dei tre numeri compare nella prima sequenza e stampi il
risultato.
<>=#? 1h¦C < V3a C ViZ = N A ? @q? <"=q? 5 1 ¦ p <=#? 51 ¦p t Eq% - )&)&z
- - - ub - 4
` K ~ `5X NBb7 p PfRe~ ¨ ¥ © p ; t j j b - .Ò) < -
%Ó6J
<>=#? 1h¦C V_Zc` < t :wb
~ >© §^.9
?0<< X C V 1 < 1 < V0a I ` < ` < Via I <6< <w=q? 15¦C
1 < V3a < V3a C V0Z = N ?AB @ ? N X K ,Y 1 ¡p 15/ `V p
La CPU Intel 8086: Architettura e Programmazione Assembly 143
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t 1\vb
& - )4%)Q -jkjl- t
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
C ? YZ N @ $/ 1 x2?A@
N X <wg ` < t Y 9bbu%m4 - ) - 9
- b < V CªN @ V
CD/cE ?0GI ]] t - )Q&6
'v4>%Q> -jkj Ô
N X <wg ?HG t
1 ? ,o, Y[ZcYbU2Y ? ,YbU_U ? UÑY / ZBV
1 ? ,o, N @ V < VHZ =q? UÑY / ZAV
1 ? ,o, ,ÕV =#= X @q?sr P t , .>) - jk- 9['6 -
1 ? ,o, ,ÕV #
= = X q
@ s
?
r R t , .>) - 9.
4 - 9& -
1 ? ,o, 1«/ Z x|@ / Z = / t 13w[b - )4>{9[& ¢
t )l&9)& - v ?0G
1 ? o , , <=q? CN ?sr ZAX C V @ / t < -j - )Q
wbß4> ?iG
@ V = t @ ' - ) < 9 jl- /3% - &n
C ? YZ V_ZA` N
CALCOLATORI ELETTRONICI
Prova scritta
17 luglio 1991
<>=#? 1h¦C < V3a C ViZ = N A ? @q? <"=q? 5 1 ¦ p <=#? 51 ¦p t Eq% - )&)&z
- - - ub - 4
` K ~ `5X NBb7 p PfRe~ ¨ ¥ © p ; t j j b - .Ò) < -
%Ó6J
<>=#? 1h¦C V_Zc` < t :wb
~ >© §^.9
?0<< X C V 1 < 1 < V0a I ` < ` < Via I <6< <w=q? 15¦C
1 < V3a < V3a C V0Z = N ?AB @ ? N X K ,Y 1 ¡p 15/ `V p
146 A.Broggi
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t 1\vb
& - )4%)Q -jkjl- t
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt