Beruflich Dokumente
Kultur Dokumente
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
,V3a$aY r N ?A@ / , ? N @ $
/ 1 Z3V B? @
1 ? ,o, , ViaaFY r#
Õ = ?F<w= / t , 4 - - 9b - ¢y ? ,
N X <wg ? G
H t< - )n - ?0G
1 ? ,o, ,ÕiV aaFY r#= ?F<w= / t , 4 - - 9b - ¢y ? ,
No/FN KMG t N« K , ) - 9f
%4w
CD/cE 1 , IJ~
<"g , K , I 1 , t < 9b - % ~ 'Ê8pL9''
t )Q
z4w
{4"%)Q j - 9
/ @ K , IL? , t N| K , J4"6
b4&
%
N X <wg KoG t< - )ny)l j §7 K , ;
1 ? ,o, ,ÕViaaFY r =#?F<w= / t , 4 - - 9b - ¢y ? ,
N X <wg ?HG t< - )n - ?0G
1 ? ,o, ,ÕViaaFY r =#?F<w= / t , 4 - - 9b - ¢y ? ,
No/FN KMG t N« K , ) - 9f
%4w
CD/cE 1 , IJ~
<"g , K , I 1 , t< 9b - % ~ 'Ê8pL9''
t )Q
z4w
{4"%)Q j - 9
/ @ ? , ILK , t N| ? , 4{
z4w
No/FN KMG t @ 9 - KMG
CD/cE ?3gsILK , t N« ?0G ~
z4w
La CPU Intel 8086: Architettura e Programmazione Assembly 147
@ V =
,V3a$aY r N ?A@ / , ? V_Zc` N
CALCOLATORI ELETTRONICI
Prova scritta
29 luglio 1991
1. Presentarsi.
2. Richiedere se si vuole:
å inserire un numero,
å stampare la lista ordinata dei numeri già inseriti,
å uscire dal programma.
<>=#? 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
,V3a$aY r< 0
V a$Z / N @ /1 Z3V ?A@
Z3X /AE$/ r < V3aZ /J CD/AE ?0gsI ] © t< .n^u ` / < p @ - 4Ħ5.§^6 - 4Ø1 -
152 A.Broggi
,V3a$aY r 1 Y |
x @B? N @ /1 Z0V ?A@
Z3X /AE ?$r 1 Y x|@B? C/AE ?igI ] © t< % bnu ` / < p @ - 4Ħ5%§ - 4Ø1 -
Y[Z = R"P t ' w V
p
1MCON ? , I p}]wp t 1ib)) - )k - >L9yp
T 1 Z X /AE ?sr 1 Y x|@B?
0 t
j f9b: - p ]^pJp Ép I - )&)& -
1MCON ? , I p}Éwp P t 9
I - )' j .wQ' -
T.Z 1 Z3X /cE ?sr 1 Y x|@c? t -Z0X /cE ?sr 1 Y x«@B?
N X <wg ?HG t< - )n - )k.&9b ?0G
CD/cE ?3gsI ] R t < %n^u%& ` / < p1 - -
%à/3w%p
CD/cE `5, IL? , t 1 - - b.4 - 9[ -j - b
Y[Z = R"P
No/FN ?0G t @ 9& - )Q
w6w4> ?iG
@ V =
,V3a$aY r 1 Y x|@B? V_Zc` N
? F ` ` K GJI?0G
M t NH -- )l% j &{4"%)) - 9[ -
CD/cE 1 , Im K0G t < - )&n - )l
bw%v4 K0G
CD/cE Ko à = V N =#@ K3G I p Ð p t< . - ) - )k% j &>%¹) -
1 ? ,o, <=q? CN ?sr<w=#@ Y ZFa ? t z
%4 - 4>m9 -j -
CD/cE KiG I 1 , t @ '9bb - )l
.wv4> K3G
@ V =
<>=#? CON ?sr ,Y <w=q? VoZA` N
CALCOLATORI ELETTRONICI
Prova scritta
16 settembre 1991
1. Presentarsi.
2. Richiedere se si vuole:
å inserire una parola.
å stampare la lista delle parole gia’ inserite.
å uscire dal programma.
C V <<Ñr YZ < V @ Y C V0Z = / ` K VZ = V @$I ,YZAV x V0Vi` I p Y 69b%by) - - b) - Ð p
Yw < =#@ XFUÑY / ZBY ` K V Z = V @$I ,YZAV x V0Vi` I ,YZAV x V0Vi`
` K p N| j P .Ò9.&b - - ) - I p
` K VoZ = V @I ,6YZcV x V0Vi`
` K p R %¹9 -j - y) - )'9b - 4%)&)& - )& I p
` K VoZ = V @I ,6YZcV x V0Vi`
` K p e %Ê9
%'{4 - )Q -jjl- 'p
,YZAV ?$r E X / =#? ` K V_Z = V @$I ,YZcV x ViV0` I p Ð p
N ?A@ / ,\V ` K C ?cG$r ZAX C r N ?A@ / ,oVæ`5X Nq7 ,XAZFa g$r N ?A@ / , ? `5X Nq7bpQp ; Iç
VZ = V @I ,YZAV x V0V0` ;
,XAZFa g V0UU8V ` K C ?qGr ZAX C r N ?A@ / ,oVæ`5X Nq7p p ;
Z3X C r N A
? @ / ,oV ` K
` < V3a V_ZA` <
<>=#? 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 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
1 Y 1 , / r N @ Y Z 1 Y N ? ,_V 1 ? ,o, ,ÕViaaY r}< 1 HV , #= ? t , .) - 9
%)& - 4 - - 9% -
t Ò) 96) - ? ,
1 CON
M ? , I pP p t< )k - 9bv>%pQp P p I
T.ZAU Z / r YZ < V @ Y C V0Z = / t - )') - 9 - )' -
1 ? ,o, Y[Z < V @ Y C V0Z = / t N«bz
%.4w - 4"Q9b.b j .w
1 ? ,o, / @ `AYZ ? C ViZ = / t NHb
%.4w - 4>Q%4w& -j %
CD/cE ` GJI / x|x«< V = Y <w=#@ XUÑY / ZcY t< -j - )»}9Âu.'
1 ? ,o, <=q? CN ?sr<w=#@ YZFa ?
T CON 1 Y 1 , / r N @ YZ 1 Y N ? ,\V
156 A.Broggi
CD/cE KoÃ= V N =#@ K3G I p Ð p t< . - ) - )k% j &>%¹) -
1 ? ,o, < =q? CN ?sr <w=#@ Y ZFa ?
t z
%4 - 4>m9 -j -
CD/cE KiG I 1 , t @ ' 9bb - )l
.wv4> K3G
@ V =
<>=#? CON ?sr ,Y <w=q? VoZA` N
CALCOLATORI ELETTRONICI
Prova scritta
21 ottobre 1991
1. Presentarsi.
2. Richiedere se si vuole:
å inserire un nuovo utente.
å richiedere il numero di telefono di un utente.
å uscire dal programma.
<>=#? 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 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
1 Y 1 , / r N @ Y Z 1 Y N ? ,_V 1 ? ,o, ,ÕViaaY r}< 1 HV , #= ? t , .) - 9
%)& - 4 - - 9% -
t Ò) 96) - ? ,
1MCON ? , I pP p t< )k - 9bv>%pQp P p I
162 A.Broggi
@ Y1 V @ 1 ? N @ / 1 Z3V ?A@
CD/cE ? , Im ZqX C r V0Z =#@c?c= V t < pL9 - v9%'.99
1MCON ? , I] t >%b I - ))& - 9 - ) -v- )l:% j
T*U x YZcV r @ Y 1 V @ 1 ? t 4>.)') -
%
-
CD/cE ` GJI / x|x«< V = C V <<Õr @ Y 1 V @ 1 ?
1 ? ,o, <q = ? CN ?sr<w=#@ YZFa ? t< -j -j .99 - v4>Q
%
-
CD/cE K\J G I / x|x«< V = @ Y 1 V @ 1 ?sr ViZ =q@B?c=q?
1 ,o, ? ,ÕVi a aFY r X = V0Z = V t , .>%w
CD/cE 1 GJJ I KMG
< X K 1 GJI / x|x«< V = @ Y 1 V @ 1 ?sr V0Z =#@B?A=#? t < y%pJ9 - v> j wv9)&
T*U x YZcV r @ Y 1 V @ 1 ? t V_Z = V @$I % j - ) -
.
-
1 ,_`
CD/cE K , Im ZBX C r V0Z =#@c?c= V
CD/cE `3Y I / | x x«< V = V_Z =q@B?c= V
1 Y1 , / r@ Y 1 V @ 1 ? N X <wg 1 G t < - )n - ) - )w %uu - 4>)) - 9 -
N X <wg `3Y
CD/cE < Y I / x|« x < V = @ Y 1 V @ 1 ?sr V0Z =q@c?B=q?
@ V N 1MCN <K t 10[w - )y9'6 4Q§z.9
T.V 1H/ Z x|@ / Z = / r /¦
No/FN `5Y t @ & 9& - w - >w
No/FN 1 G t @ '9bb - ) %u.u - 9[ -
? `F` `3Y I C ?BGr ,oXAZAa g$r ViZ =q@B?A=#?
`5V 1 K , t ` f
j .w -
w - b
w
T.ZAU 1 Y 1 , / r}@ Y 1 V @ 1 ? t 10w& - ) -
%
- 9 K , Ô ]
CD/cE ` GJI / x|x«< V = Z / Z r}=q@ /FE ?c= /
1 ,o, ?
< =q? CN ?sr<w# = @ YZFa ? t< -j - 9[' - p Z = bn - p
T CON x YZcV r}@ Y 1 V @ 1 ? t = % j - ) - &
%%
-
1«/ Z x|@ / Z = / r /F¦d CD/FE ` GJI / x|x«< V = =H@ /AE ?A= /
1 ? ,o, <=q? CN ?sr<w=#@ YZFa ? t< -j - 9[' - p = n - p
No/FN ` G t N|6w - w&u.'%w»:bn -
No/FN 1 G
? `F` ` GJI ,oXAZca g$r X = V0Z = V t NHw -- )m96 j ..)'%[
1 ? ,o, <=q? CN ?sr<w=#@ YZFa ? t Ò)9 -j -
x YZAV r @ Y1 V @ 1 ? @ V =
@ Y1 V @ 1 ? V_Zc` N
@ V =
<>=#? CON ?sr<w=#@ YZFa ? V_Zc` N
CALCOLATORI ELETTRONICI
Prova scritta
25 novembre 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
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t 1\vb
& - )4%)Q -jkjl- t
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
CALCOLATORI ELETTRONICI
Prova scritta
10 febbraio 1992
Scrivere un programma in assembler che effettui il prodotto di due matrici A e B e dia come
risultato la matrice C. Il programma deve:
å Accettare da tastiera le due matrici (gli elementi delle matrici A e B, di dimensione 2x2, sono
numeri positivi inferiori a 10).
å Presentare su video la matrice C risultato del prodotto.
<>=#? 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
172 A.Broggi
?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 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
CD/cE K\GJI / x|x«< V = C ?A=#@ Y 1 V r}?
1 ? ,o, ,ÕViaaFY r C ?c=q@ Y 1 V t , %) - jl-js-
CD/cE K\GJI / x|x«< V = C ?A=#@ Y 1 V r}K
1 ? ,o, ,ÕViaaFY r C ?c=q@ Y 1 V t , %) - 9.
4 -j$-
1 ? ,o, C/ , = Y N ,_Y 1 ? U2Y / ZAV t CÖ)')&
- )y4 j$-
CD/cE K\GJI / x|x«< V = C ?A=#@ Y 1 V r 1
1 ? ,o, <=q? CN ?sr C ?A=#@ Y 1 V t < -j - ) -äj$- &
%y 96) -
@ V = t @ ' - ) < 9 jl- /3% - &n
C ? YZ V_ZA` N
No/FN < Y
Y[Z 1 `3Y t? 'Õ9 - > - j$-
K
CD/cE ` < K3G I 5
` , t CÖ j bu%u - ) 9)w -
Y[Z 1 KMG t Y 6
j .w - w - b j$-
Å1
`5V 1 1 g t ` .
%b j % -
bw -
)'
T.ZAU 1 Y 1 , / rR
? `F` < Y I `3Y C r C A ? = t? 9 - > 6w - js- b
?
< X K `3Y I `3Y C r C ?A= t ? &9b - - $j - &
% K
, //N 1 Y 1 , / r&P
@ V =
C / , = YN _
D , Y 1 ? UÑY / ZAV VoZA` N
CALCOLATORI ELETTRONICI
Prova scritta
18 febbraio 1992
Scrivere un programma assembler che calcoli i primi 400 valori della sequenza
generata con la seguente legge:
xi è 1 éê axi ë b ê mod256
dove a e b sono numeri compresi fra 0 e 255.
Il programma deve:
å Acquisire i valori di a e b;
bbb1bb25b145bb30b100bbb0 ì&ìì
<>=#? 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
176 A.Broggi
?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
Y[Z = P ]
No/FN 1 G t @ ' 9bb - 1 G
@ V = t @ ' - )) - bz
.4w -
-jk- w
<>=#? CON ?sr 1 gA?A@ VoZA` N
CALCOLATORI ELETTRONICI
Prova scritta
7 aprile 1992
Scrivere un programma in assembler che, dato un numero compreso fra 0 e 99, calcoli tutte le
potenze dello stesso fino a raggiungere il numero massimo contenuto in 32 bit. Il programma
deve:
å Accettare da tastiera il numero.
<>=#? 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
180 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
1 ? ,o, ,ÕViaaFY r ZAX C V @ / t , %y)k j .¢) j j bu%u -
t .)Q%&9b ?iG
CD/cE Z3X C V @ / IL?iG t CÖ j &u%u - )k j %
CD/cE ` GJI ] t ? u%u% - ) - - b - ) - 4". e%R '
t ` G ?BG Ê) -äj ))&
- u
1 Y 1 , / r N @ Y Z 1 Y N ? ,_V 1 ? o , , <=q? CªN ?sr ZAX C V @ / t < -j - )k j . ` G ?cG
1 ? ,o, C/ , = Y N ,_Y 1 ? U2Y / ZAV t V 9b% ZqX C V @ /c ` G ?cG È[Ú ` G ?BG
t &b - 4w) U %b x ) - - 4 P
t 9{4>.n^%'. - b
T*U 1 Y 1 , / r N @ YZ 1 Y N ? ,oV
@ V = t @ ' - ) < 9 jl- /3% - &n
C ? Y Z V_ZA` N
CALCOLATORI ELETTRONICI
Prova scritta
1 giugno 1992
Scrivere un programma assembler che accetti un numero decimale in base 10 con il seguente
formato: zz,zzz e ne calcoli la trasformazione in base 2 con il formato xxxxx,xxxxx. La trasfor-
mazione è ovviamente approssimata.
Il programma deve stampare come output:
å La trasformazione in base 2 xxxxx,xxxxx.
CALCOLATORI ELETTRONICI
Prova scritta
17 luglio 1992
Scrivere un programma in assembler che, dato un numero compreso fra 0 e 999, lo scompomga
nei suoi fattori primi. Il programma deve:
å Accettare da tastiera il numero.
å Presentare su video la serie dei suoi fattori primi con la relativa molteplicità.
<>=#? 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
184 A.Broggi
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
t 1\vb
& - )4%)Q -jkjl- t
t ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈ:ÈÈÈÈÈÈÈt
@ V =
,V3a$aY r ZAX C V @ / VoZA` N
CALCOLATORI ELETTRONICI
Prova scritta
17 settembre 1992
Scrivere un programma in assembler che esegua la trasformazione fra numeri in basi diverse. In
particolare il programma deve:
1. Accettare da tastiera un numero K che rappresenti la base della numerazione del primo
numero.
3. Accettare da tastiera un numero L che rappresenti la base di numerazione nella quale occorre
trasformare il numero N.
Il programma deve fornire il numero specificato ai punti 1) e 2) nella base indicata in 3). Sono da
considerare i seguenti limiti:
1. 2 î K ï L î 20.
2. Il valore del numero rappresentato da N(baseK) deve essere minore di 65536 (decimale) =
216 ; in caso contrario il programma deve segnalare errore.
2ð 2 ïbììì 9 ð 9 ï 10 ð A ïìì&ì 20 ð Kì
<>=#? 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
t 96%
&[
- - 4 - ? , ¢) ?0G
<>=#? CªN ?sr V @B@ / @ V
T 1 t< ÚP '¹9 -j - 49
%
C /cE
D ZqX C V @ /c IL?HG t CÖ j bu%u%)k j %
1 ? ,o,
,ÕViaaFY rKh?F< V t , .) - - 9byÒ) ? ,
1 ? ,o,
<=q? CN ?sr ZAX C V @ / t < -j - ZBX C V @ /Bm.)') - - 9b4w
- -
x YZcV
T CON t ? , 4b9
<>=#? CON s
? rV c
@ @ / @ V C/cE ` GI / x|x«< V = V @B@ / @ V t CÖ%99 - v4>Q
1 ? ,o, <=q? CN ?sr<w=#@ YZFa ? t< -j - ) j .99 - '
x YZAV @ V = t @ ' - ) < 9 jl- /3% - &n
C ? YZ V_ZA` N
CALCOLATORI ELETTRONICI
Prova scritta
19 novembre 1992
Scrivere un programma in assembler che, dato un numero compreso fra 0 e 64000, ne calcoli la
radice quadrata e la radice cubica con approssimazione all’intero inferiore. Il programma deve:
å Accettare da tastiera il numero.
å Presentare su video:
Esempio:
numero: 1612
radice quadrata: 40 1600
radice cubica: 11 1331
CALCOLATORI ELETTRONICI
Prova scritta
8 febbraio 1993
In una prima fase realizzare il programma indicato considerando solo numeri positivi.
192 A.Broggi
CALCOLATORI ELETTRONICI
Prova scritta
6 aprile 1993/1
Scrivere un programma in assembler che muova di una posizione un cursore (qualsiasi) sullo scher-
mo nelle quattro direzioni (nord, sud, est, ovest) utilizzando come comandi quattro caratteri diversi
definiti a priori.
Il programma deve inoltre:
å partire con il cursore circa al centro dello schermo,
å quando il carattere raggiumge uno dei bordi impedire che esca dallo schermo.
Nel loop principale del programma e’ opportuno inserire un ritardo; considerare la posizione
piu’ opportuna nel loop per il ritardo stesso.
In una prima fase realizzare il programma indicato non considerando controlli sui bordi dello
schermo.
CALCOLATORI ELETTRONICI
Prova scritta
6 aprile 1993/2
Nel loop principale del programma e’ opportuno inserire un ritardo; considerare la posizione
piu’ opportuna nel loop per il ritardo stesso.
In una prima fase realizzare il programma indicato non considerando controlli sui bordi dello
schermo.
La CPU Intel 8086: Architettura e Programmazione Assembly 193
CALCOLATORI ELETTRONICI
Prova scritta
1 giugno 1993/1
Scrivere un programma in assembler che accetti in ingresso una frase con un massimo di 500
caratteri e che di questa calcoli:
å il numero di parole (si considerano separatori: lo spazio, i segni di punteggiatura, gli apo-
strofi).
å la lunghezza massima e la lunghezza minima delle parole.
å la lunghezza media delle parole (questo valore deve essere calcolato con una cifra decimale
significativa).
CALCOLATORI ELETTRONICI
Prova scritta
21 luglio 1993/1
Scrivere un programma in assembler che accetti in ingresso una frase con un massimo di 500
caratteri e che successivamente:
å chieda all’utilizzatore di indicare un carattere o una sequenza di caratteri (max 4 caratteri).
å risponda indicando tutte le parole nelle quali compare il carattere o la sequenza di caratteri
precedentemente indicata.
å si considerino separatori fra parole gli spazi e i segni di punteggiatura: punto, virgola, due
punti e punto e virgola.
194 A.Broggi
CALCOLATORI ELETTRONICI
Prova scritta
15 settembre 1993
CALCOLATORI ELETTRONICI
Prova scritta
5 ottobre 1993
3. Determini e visualizzi il numero di ricorrenze della seconda stringa nella prima stringa.
In una seconda fase si consideri la seconda stringa formata di esattamente 4 caratteri, e si de-
termino i numeri di ricorrenze parziali formate da solo 3 caratteri e 2 caratteri nell’ordine stabilito
dalla seconda stringa (matching approssimati a 3 o 2 caratteri).
La CPU Intel 8086: Architettura e Programmazione Assembly 195
CALCOLATORI ELETTRONICI
Prova scritta
3 novembre 1993
3. Aggiunga un bit di parità ad ogni carattere della stringa ASCII, in modo che ogni carattere
sia rappresentato da 9 bit e con un numero pari di 1.
4. Stampi la stringa di bit risultante (72 bit = 8 caratteri da 9 bit) in formato esadecimale.
CALCOLATORI ELETTRONICI
Prova scritta
11 gennaio 1994
CALCOLATORI ELETTRONICI
Prova scritta
7 febbraio 1994
Scrivere un programma in assembler che accetti in ingresso un numero di n cifre (con n fino ad un
massimo di 10) che di questo calcoli:
å tutte le possibili permutazioni.
å i numeri cosi’ ottenuti devono poi essere visualizzati contemporaneamente sullo schermo.
CALCOLATORI ELETTRONICI
Prova scritta
28 febbraio 1994
Scrivere un programma in assembler che accetti in ingresso una sequenza di 16 cifre esadecimali.
A partire dai caratteri di ingresso:
å formare la sequenza di 8 byte generata dal codice inserito.
å Segue la lunghezza espressa in decimale del numero di volte che il primo bit è presente nella
stringa.
å Segue la lunghezza espressa in decimale del numero di volte che il complemento compare
nella stringa e cosi’ via.
Esempio:
Sequenza ASCII: FFFF.0000.1010.0000
Sequenza di bit: 1111111111111111.0000000000000000.0001000000010000.0000000000000000
Codifica: 1 16 19 1 7 1 20
198 A.Broggi
CALCOLATORI ELETTRONICI
Prova scritta
13 giugno 1994/1
CALCOLATORI ELETTRONICI
Prova scritta
13 giugno 1994/2
CALCOLATORI ELETTRONICI
Prova scritta
18 luglio 1994/1
In una seconda fase si considerino le parole formate utilizzando tutti i caratteri alfanumerici (A ...
Z, 0 ... 9). I numeri seguono le lettere nell’ordinamento.
CALCOLATORI ELETTRONICI
Prova scritta
18 luglio 1994/2
In una seconda fase si consideri la possibilità che il numero possa assumere i seguenti formati:
n ì nnnEkk oppure nn ì nnEkk oppure nnn ì nEkk.
200 A.Broggi
CALCOLATORI ELETTRONICI
Prova scritta
5 settembre 1994/1
å Stampi tutti i numeri (di 4 cifre) diversi tra loro che è possibile formare con le cifre del primo
numero. (I numeri vanno stampati in modo che compaiano in una sola schermata).
å Stampi i numeri in ordine crescente (questo punto può essere svolto in una fase successiva).
CALCOLATORI ELETTRONICI
Prova scritta
5 settembre 1994/2
å Stampi tutti i numeri (di 2 cifre) diversi tra loro che è possibile formare con le cifre del primo
numero. (I numeri vanno stampati in modo che compaiano in una sola schermata).
å Stampi i numeri in ordine crescente (questo punto può essere svolto in una fase successiva).
La CPU Intel 8086: Architettura e Programmazione Assembly 201
CALCOLATORI ELETTRONICI
Prova scritta
28 Ottobre 1994
2. Conti le ricorrenze dei caratteri A,B,C,...,Z nella stringa; se un carattere viene preceduto da
un numero n, si consideri come se tale carattere fosse ripetuto n volte consecutive.
In un primo tempo assumere che la stringa in ingresso soddisfi alle richieste del punto 1. Suc-
cessivamente introdurre il controllo della corretta sintassi e generare errore se le specifiche del
punto 1. non sono soddisfatte.
Al termine, ripetere il ciclo con una seconda stringa, ma evidenziare il carattere (o i caratteri)
che hanno variato maggiormente la loro frequenza nelle due stringhe.
Esempio:
Sequenza in ingresso: ab4abbbm
Output: a
202 A.Broggi
CALCOLATORI ELETTRONICI
Prova scritta
23 Gennaio 1995
2. Cancelli lo schermo, e stampi un cursore (carattere a scelta) al centro dello schermo stesso;
In un primo tempo assumere che la stringa in ingresso soddisfi a tutte richieste e che il cur-
sore non esca mai dallo schermo. Successivamente introdurre il controllo della corretta sintassi e
generare errore se le specifiche non sono soddisfatte.
Esempio:
Sequenza in ingresso: as4a2sbbbs
Il cursore si deve muovere: asaaaassbbbs e deve generare un disegno del tipo:
G3GAG
G G
G G
G3G G
G3G
/
La CPU Intel 8086: Architettura e Programmazione Assembly 203
CALCOLATORI ELETTRONICI
Prova scritta
12 Aprile 1995
3. stampi il risultato della espressione algebrica, assumendo che tutti i risultati parziali possano
essere memorizzati in una parola da 16 bit.
In un primo tempo assumere che la stringa in ingresso soddisfi le specifiche sopra elencate.
Successivamente introdurre il controllo della corretta sintassi e generare errore se le specifiche non
sono soddisfatte.
Esempio:
Stringa in ingresso: 4+93–3–0+08=
Uscita: 4+93–3–0+08= 102
204 A.Broggi
CALCOLATORI ELETTRONICI
Prova scritta
16 Giugno 1995
2. calcoli il risultato della espressione logica assumendo che il simbolo ’+’ indichi l’operazione
di OR, il simbolo ’*’ quella di AND, e il simbolo ’ˆ ’ quella di EXOR.
XXXXOXXXXOXXXX=
dove X indica una cifra esadecimale (range ’0’-’F’) e O indica una operazione logica (range: ’+’,
’*’, ’ˆ ’). Successivamente considerare la stringa formata sempre dalla concatenazione di due
operazioni logiche, ma i cui operandi non siano limitati a 4 cifre.
Esempio:
CALCOLATORI ELETTRONICI
Prova scritta
25 Settembre 1995
3. Calcoli la funzione di correlazione tra le due stringhe, definita come: per ogni posizione
della seconda stringa rispetto alla prima calcolare il numero di caratteri coincidenti.
4. stampi la stringa ottenuta (la cui lunghezza deve essere uguale a quella della stringa in
ingresso).
In un primo tempo assumere che la seconda stringa sia formata da 4 caratteri; in seguito
estendere il programma al caso in cui la seconda stringa abbia lunghezza variabile (tra 2 e 9
caratteri).
Esempio:
CALCOLATORI ELETTRONICI
Prova scritta
29 Novembre 1995
Assumere che la seconda data sia posteriore alla prima, che tutti i mesi siano formati da 30
giorni, che un anno sia formato da 30*12=360 giorni, e che non vi siano anni bisestili.
Successivamente considerare l’effettiva lunghezza dei mesi, e gli anni formati da 365 giorni.
Esempio:
a l - 9
9 e>P*R
La CPU Intel 8086: Architettura e Programmazione Assembly 207
CALCOLATORI ELETTRONICI
Prova scritta
19 Gennaio 1996
Determinare inoltre l’intervallo di variabilià delle ore ( ) in modo che tutti i calcoli possano
essere effettuati utilizzando operazioni su 16 bit.
Assumere che il secondo orario sia posteriore al primo.
Successivamente considerare anche il caso in cui il primo orario sia posteriore al secondo (cioè
si riferisca al giorno precedente).
Esempio:
< f
4wl - 9
9 P%P ]^¥ ¨
208 A.Broggi
CALCOLATORI ELETTRONICI
Prova scritta
19 Gennaio 1996
Al fine di controllare lo stato della tastiera utilizzare i servizi Interrupt numero 16h (servizi 0 e
1).
La CPU Intel 8086: Architettura e Programmazione Assembly 209
CALCOLATORI ELETTRONICI
Prova scritta
27 Febbraio 1996
Estendere in seguito il programma al calcolo del giorno della settimana di un qualunque giorno
nel decennio 1990/1999. Si ricorda che il 1 Gennaio 1990 è stato un lunedi e che gli anni 1992 e
1996 sono anni bisestili.
Utilizzare un formato a piacere per l’introduzione dei dati e per la visualizzazione del risultato.
a R ¥
Clf9b R
a R ¥
Clf9b R
? P ÉÉ ©
CALCOLATORI ELETTRONICI
Prova scritta
25 giugno 1996
Scrivere un programma in Assembly che accetti in ingresso una stringa di massimo 20 caratteri
e che continui ciclicamente a stamparla, facendola ruotare sullo schermo (matrice 80 ó 25).
Più precisamente la stringa deve essere stampata sullo schermo prima alla posizione (0, 0), poi
alla (0, 1), poi alla (0, 2) fintanto che non si raggiunge la posizione (0, 80 – ñ lunghezza_della_stringa ô );
nella successiva stampa della stringa tutti i caratteri devono essere stampati consecutivamente,
eccetto l’ultimo, che deve essere stampato sotto il penultimo.
õ öö&öö&ööö&öö&ööö&öö&ööö&öö'öö&ö&ö&öö'ööö'öö[õ
_
÷møSù*ú ÷
÷ ÷
÷ ÷
÷ ÷
õ_öö&öö&ööö&öö&ööö&öö&ööö&öö'öö&ö&ö&öö'ööö'öö[õ
õ_öö&öö&ööö&öö&ööö&öö&ööö&öö'öö&ö&ö&öö'ööö'öö[õ
÷ ø(ù*ú ÷
÷ ÷
÷ ÷
÷ ÷
õ_öö&öö&ööö&öö&ööö&öö&ööö&öö'öö&ö&ö&öö'ööö'öö[õ
õ_öö&öö&ööö&öö&ööö&öö&ööö&öö'öö&ö&ö&öö'ööö'öö[õ
÷ øSù"ú ÷
÷ ÷
÷ ÷
÷ ÷
õ_öö&öö&ööö&öö&ööö&öö&ööö&öö'öö&ö&ö&öö'ööö'öö[õ
ûûû
õ_öö&öö&ööö&öö&ööö&öö&ööö&öö'öö&ö&ö&öö'ööö'öö[õ
÷ øSù%÷
÷ ú÷
÷ ÷
÷ ÷
õ_öö&öö&ööö&öö&ööö&öö&ööö&öö'öö&ö&ö&öö'ööö'öö[õ
õ_öö&öö&ööö&öö&ööö&öö&ööö&öö'öö&ö&ö&öö'ööö'öö[õ
÷ ø÷
÷ ù.÷
÷ ú÷
÷ ÷
õ_öö&öö&ööö&öö&ööö&öö&ööö&öö'öö&ö&ö&öö'ööö'öö[õ
Successivamente considerare la possibilità di uscire dal programma con la pressione del tasto
‘SPAZIO’ anche se la stringa non ha terminato il ciclo; al fine di controllare lo stato della tastiera
utilizzare l’Interrupt numero 16h (servizi 0 e 1).
Successivamente consentire al programma di eseguire più di un ciclo: al termine di ogni ciclo
la stringa verrà raddoppiata.
õ öö&öö&ööö&öö&ööö&öö&ööö&öö'öö&ö&ö&öö'ööö'öö[õ
_
÷møSù*úøSù*ú ÷
÷ ÷
÷ ÷
÷ ÷
õ_öö&öö&ööö&öö&ööö&öö&ööö&öö'öö&ö&ö&öö'ööö'öö[õ
Esempio di risoluzione
ü øSýþ ÿ
ú
ü ü
ü ý:ø
þø ü ù
ü ý:ø(ú
ü ù
ý
ü
ý
þ ø ü ù !#"#$%'&)( *+&)Õÿ% ,
ü øSýþ ! (Mÿ
ú
ü }þ ú ÿ.! C!%#D%E!7#5GFH*09)0/"(D
I øSþ -
J
L ú K'ø
M
ø M >_ø M
-N O ü
-N
O ø M
úø þ þý
I
P ú M >Q 6SRT õ T6SRT
ú
- < I
P ü M >VU ú
ü XW
I
P ù >YU ýø
Zþ
ø W O ü B
I
P ù >VU ü B ýø
ú
[W
I
P ?þ > 6
ZB
- < I
P ø > Jý
þ @ ø U þW
úø -
þ ýú ø
O
212 A.Broggi
úø þ ú& úB
ü
þ ú þ
ú I4- þ\>]U ýJ
ZBW
^ _`ZB
-
I
P U üB ýø
þZ
ø W >ù O
I
P U üB ýø
ú
W
> ù
I
P ü M >VU ú
üXW
úø þ ú& úB
ü
I
P U ú
ü@aW > ü M
úø
þýø
ü
- ú
-
ý
I øSþ B* ü -
þ£ý:ø
ü
-
ú ø
-N O ú M
I
P ú M > b 6666
úÂþ}ú
@<
úþú
-
-
- úM
ü
þ£ý:ø
B
* ü -
þ úc&ú
ü - J
ú ø
ø üfüÖüO >VU üB ýø
þZ
ø W
ø üfüÖü >VU ü ý:ø(ú
[W
ú I4- ü >#Q 6
^ _`
ø
ü ú ü
þ ú ü O
I
PdU ü ý:ø
þ ø W >
I
PdU ü ý:ø(ú
[W > 6
^ I4- Kþ
ø @<
ú I4- ü O > T
^ _`
T ø
ü ú ü
ü ú ü O
I
PdU ü ý:ø
þ ø W > 6
I
PdU ü ý:ø(ú
[W > 6efefO
^ I4- Kþ
T ø @<
ú I4- ü > 6egefO
^ _`
Sb(ø
þ ú ü
ü ú ü O
I
PdU ü ý:ø
þ ø W > 6egefO
I
PdU ü ý:ø(ú
[W > 6
^ I4- Kþ
Sb(ø @<
ú I4- ü O > 6egefO
^ _ Kþ
þ ú ü
þ ú ü O
I
PdU ü ý:ø
þ ø W > 6
La CPU Intel 8086: Architettura e Programmazione Assembly 213
I
PdU ü ý:ø(ú
[ W >
Kþ <
ý
þ úc&ú
üh
B*ü -
-
þ ýú O ø
- J
ú ø
-N O ù M
-N O ø M
I
PDù O > 6
I
P ø O > T
þ ý 6O
-
- ø M
-N O ø M
I
P ø O > 6 O
I
D P ù > 6
þ ý 6O
-
- ø M
-
- ù M
ý
-
þ ýú O ø
* ü -
þ þ£ý -
J
ú ø
I
P ø M > ü øýþ
I
P ü >oø M
I
P U ú
@ ü aW > 6
I
P üU B ýø
þZ
ø W > 6
I
P U üB ýø
ú
W >
ý
þ þ£ý B*
ü -
ú
ü þ}ú !#(\ÿ
!#( I øSþ
214 A.Broggi
CALCOLATORI ELETTRONICI
Prova scritta
16 luglio 1996
å accetti in ingresso una seconda stringa numerica formata dallo stesso numero di caratteri
della precedente.
å cancelli lo schermo e stampi la prima stringa in alto a sinistra (posizione 0,0).
Il programma deve poi spostare ogni lettera della stringa appena stampata in basso di un numero
di posizioni dato dal numero della seconda stringa associato alla lettera della prima stringa.
Esempio:
N jl- 9['6 - ?0K 1 `FV
< f
4 - 9b& - PSRP.~e
Successivamente il programma deve entrare in un ciclo in cui le lettere della prima stringa
rimbalzano tra le due posizioni indicate precedentemente.
In un primo tempo supporre che i dati inseriti soddisfino alle specifiche; in un secondo tempo
effettuare il controllo degli errori.
La CPU Intel 8086: Architettura e Programmazione Assembly 215
CALCOLATORI ELETTRONICI
Prova scritta
10 Settembre 1996
Qualora la posizione in cui un carattere deve essere mosso risulti occupata, il carattere
rimarrà fermo. In più, quando un carattere raggiunge il bordo dello schermo, si ferma.
å il ciclo termina quando tutti i caratteri sono fermi.
Esempio:
ûûûûûûûûûûûûûûûûûûûûûûûûû
ûûûûûûûûûûûûûûûûûûûûûûûûû
ûûûûûûûû % 58ÿ (% %\ÿ ûûûûûûûûûû
ûûûûûûûûûûûûûûûûûûûûûûûûû
ûûûûûûûûûûûûûûûûûûûûûûûûû
ûûûûûûûûûûûûûûûûûûûûûûûûû
ûûûûûûûû % ûûû % % ûûûûûûûûûûû
ûûûûûûûûû ÿ ûû (\ÿ ûûûûûûûûûûû
ûûûûûûûûû 5 ûûûûûûûûûûûûûûû
ûûûûûûûûûûûûûûûûûûûûûûûûû
7 ýþ I Q ø þý
:ø _ þ
<
ûûûûûûûû % ûûû % % ûûûûûûûûûûû
ûûûûûûûûûûûûûûûûûûûûûûûûû
ÿ û ûûûûHûûûûû (Mÿ ûûûûûûûûûûû
ûûûûûûûûûûûûûûûûûûûûûûûûû
ûûûûûûûûû 5 ûûûûûûûûûûûûûûû
La CPU Intel 8086: Architettura e Programmazione Assembly 217
CALCOLATORI ELETTRONICI
Prova scritta
1 Ottobre 1996
Successivamente introdurre il controllo su;;a correttezza del formato della stringa inserita dall’utente.
Esempio:
CALCOLATORI ELETTRONICI
Prova scritta
19 Novembre 1996
Scrivere un programma in Assembly formato da un ciclo principale in cui un carattere viene mosso di una posi-
zione per ogni iterazione. Il carattere partirà dall’angolo alto a sinistra dello schermo e si muoverà verso destra; una
volta arrivato al bordo destro, scenderà di una posizione e continuerà a muoversi verso sinistra. Una volta arrivato
al bordo sinistro, scenderà di una posizione e riprenderà secondo l’andamento descritto precedentemente. Quando il
carattere raggiunge l’utlima posizione dello schermo (angolo in basso a destra), riprenderà dalla posizione iniziale.
Inserire all’interno del ciclo due procedure che permettano all’utente di variare la velocità di movimento del
carattere attraverso la pressione di due diversi tasti. Attenzione: il carattere DEVE muoversi di una posizione ad ogni
iterazione, indipendentemente dalla pressione dei tasti sopra menzionati!
Al fine di controllare lo stato della tastiera si consiglia di utilizzare l’Interrupt numero 16h (servizi 0 e 1).
Successivamente:
i introdurre il controllo che la stampa non esca dallo spazio dello schermo; in tal caso segnalare errore.
i modificare il programma in modo che venga stampato un asterisco nel caso in cui la posizione corrente sia già
occupata da un altro carattere.
ù
N O ^ N
K
N j
O þ
O N ^ø
ü - - -
220 A.Broggi
CALCOLATORI ELETTRONICI
Prova scritta
28 Febbraio 1997
Successivamente modificare il programma in modo che ad ogni iterazione vengano stampate due stringhe: la
prima secondo quanto scritto sopra, mentre la seconda contenente le lettere eliminate dalla prima.
Esempio:
CALCOLATORI ELETTRONICI
Prova scritta
2 Aprile 1997
Nel caso si avessero più ricorrenzze della lettera di controllo in una stessa parola, tale parole viene considerata e
stampata più volte.
Successivamente eliminare l’inserimento della lettera di controllo e creare 5 colonne, una per ogni vocale.
Esempio:
* @
þ
N ø ý
þ
ø@<90
I4- þ£ýJ
ü þ40Ñø úB
øýJ
þ ý ýJ
þúþ
* @
þ
N ø Z ý ý
@
ø <,
R
0
Y I - þ£ýJ
0Ñø ú
Sø ý
þ
Z ýýJ
}þ úÂþ
Z ýý
J
þ}úÂþ
0 ø ú
øSý
þ
Ñ ýýJ
þúþ ü þ 0
I4- þý
0Ñø ú
øSý
þ 0Ñø ú
øSý
þ
ýJý
þúþ30Ñø ú
øýJ
þ
Z ýý
J
þ}úÂþ Z ýý
J
þ}úÂþ
222 A.Broggi
CALCOLATORI ELETTRONICI
Prova scritta
7 Luglio 1997
In un primo tempo assumere che il range di variabilità dell’istogramma sia tra 0 e 1000; successivamente deter-
minare il range di variabilità utilizzando il valore massimo assunto dai dieci numeri, cioè tra 0 e max(ni).
Esempio:
* @ þ p6p N@I þ\< ;66 > T66 >Db 6 6 > 66 > s s > xq s > scqS6 > T b 6 > 6 > T66
y#y y
y#y y
y#y y
y#y y
y#y y
y y#y y#y y
y y#y y#y y9y#y y
y y#yzy y#y y y yzy y y y y y
y y#yzy y#y y y yzy y y y y y
y y#y9y y#yzy#y y9y#y yzy#y y y#y yzy#y y y y y
#
y y#y9y y#yzy#y y9y#y yzy#y y9y#y y9y#y y{y y y y y y
#
La CPU Intel 8086: Architettura e Programmazione Assembly 223
CALCOLATORI ELETTRONICI
Prova scritta
10 Settembre 1997
In un primo tempo assumere che i dati in ingresso siano conformi alle specifiche. Successivamente introdurre il
controllo sugli errori di inserimento.
Esempio:
m þ I ø ý þ ø< % ù J
ÿ ú
"ü ø Jý
þ ø< % Fg"
% ù R
%
F
"
224 A.Broggi
CALCOLATORI ELETTRONICI
Prova scritta
12 Settembre 1997
Scrivere un programma in Assembly che permetta di inserire una stringa di lettere minuscole, maiuscole e numeri,
di massimo 40 caratteri. Si supponga che la stringa contenga almeno 2 vocali. La prima e l’ultima vocale dividono la
stringa in 3 parti.
Il programma deve pulire lo schermo e stampare la stringa iniziale in posizione centrale. Successivamente deve
stampare su righe successive le tre stringhe in modo che la seconda stringa (la parte centrale della stringa iniziale)
rimanga nella posizione originale, mentre le prima e la terza si spostino di un carattere verso sinistra e verso destra
rispettivamente fino a raggiungere il bordo dello schermo. Quando entrambe le stringhe mobili hanno raggiunto il
bordo dello schermo il programma termina.
Successivamente
i introdurre i controlli sulla corretteza della stringa in ingresso e
i fare in modo che l’insieme delle lettere che dividono la stringa iniziale sia definibile da utente.
Esempio:
CALCOLATORI ELETTRONICI
Prova scritta
2 Dicembre 1997
Scrivere un programma in Assembly che permetta di inserire una stringa formata solo da lettere maiuscole e
minuscole e che la visualizzi sullo schermo. Il programma deve poi entrare in un ciclo da cui può uscire solo alla
pressione del tasto ’Spazio’. All’interno del ciclo viene controllata la tastiera; ogni volta che viene premuto il tasto
corrispondente ad una lettera, dalla stringa iniziale vengono eliminate tutte le ricorrenze (maiuscole e minuscole) della
lettera digitata; la nuova stringa viene sovrascritta alla precedente (alle stesse coordinate della precedente), eliminando
gli eventuali caratteri rimasti dalla stringa precedente.
Successivamente modificare il programma in modo che la pressione di tasti corrispondenti a lettere minuscole
abbiano l’effetto di eliminare le corrispondenti ricorrenze nella stringa iniziale (come sopra), mentre la pressione di
tasti corrispondenti a lettere maiuscole abbiano l’effetto opposto, ovvero di reinserire le lettere eliminate in precedenza.
Esempio:
øSù"úB% %_ù~0/0Ñø5G52ú ü
8 ü
-
ø -
J þZ
Jü þ ø@ :
ù*úù~0/025G5Ñú ü
8 ü
-
ø -
J þZ
Jü þ ù :
ú;0/0Ñú ü
8 ü
-
ø -
J þZ
Jü þ ú :
ü
8 ü
-
ø -
J þZ
Jü þ 5 :
ùfù@5G5 ü
8 ü
-
ø -
J þZ
Jü þ %] :
øSù}% %ù"ø5G5 ü
8 ü
-
ø -
J þZ
Jü þ)0# :
øSù"úB% %_ù~0/0Ñø5G52ú ü
226 A.Broggi
CALCOLATORI ELETTRONICI
Prova scritta
27 Gennaio 1998
Scrivere un programma in Assembly che permetta di inserire tre stringhe a, b, e c di caratteri alfanumerici (lettere
e numeri) e le visualizzi sullo schermo. Il programma deve stampare la stringa a, carattere per carattere, partendo
dalla metà del bordo sinistro dello schermo verso destra; ogni volta che si incontra una ricorrenza di un carattere della
stringa b, la stampa procede verso l’alto di un carattere. Parallelamente ogni volta che si incontra una ricorrenza di un
carattere della stringa c, la stampa procede verso il basso di un carattere.
Successivamente modificare il programma in modo che richieda l’immissione di una quarta stringa d; ogni volta
che si incontra una ricorrenza di un carattere di quest’ultima stringa, la stampa della stringa a viene riportata nella
posizione originale.
In un primo tempo si assuma che gli insiemi dei caratteri delle stringhe b, c e d abbiano intersezione nulla;
successivamente introdurre tale controllo e, in caso di intersezione non nulla, mostrare le lettere in comune.
Esempio: