Assembly Intel 8086: introduzione alla programmazione a basso livello

Slide sull'Assembly Intel 8086. La Pdf è una risorsa didattica per l'università, materia informatica, che introduce i concetti fondamentali del linguaggio Assembly Intel 8086, inclusi variabili, costanti e il ciclo macchina, con esempi di codice per l'istruzione di somma.

Mostra di più

10 pagine

Assembly Intel 8086
Introduzione ad Assembly 8086
Il linguaggio assembly
Il codice macchina può essere visto in una forma equivalente attraverso un linguaggio
mnemonico.
L’insieme dei codici mnemonici di tutte le istruzioni prende il nome di linguaggio
assembly.
Il linguaggio assembly prevede l’uso di parole chiave:
MOV per assegnare valori a registri;
ADD per sommare i contenuti di registri o aree di memoria;
SUB per sottrarre;
e così via.

Visualizza gratis il Pdf completo

Registrati per accedere all’intero documento e trasformarlo con l’AI.

Anteprima

Assembly Intel 8086

D8086
L3093607
|INTEL@1978
seg000:0000
seg000:0000 loc_0:
; CODE XREF: seg000:00074j
seg000:0000
seg000:0000
mov
ax, 1999h
seg000:0003
cmp
ds : 4206h, ax
seg000:0007
jnz
short loc_0
seg000:0009
mov
ax, 2121h
seg000:000C
cmp
ds : 4114h, ax
seg000:0010
seg000:0010 loc_10:
; DATA XREF: seg000:00304r
seg000:0010
; seg000:00394r
seg000:0010
jnz
short loc_0
seg000:0012
mov
ax, OF66Dh
seg000:0015
cmp
ds : 1928h, ax
seg000:0019
jns
short loc_0
seg000:001B
mov
ax, 1
seg000:001E
cmp
ds: 334h, ax
seg000:0022
js
short loc_0
seg000:0024
mov
ax, 1
seg000:0027
add
ds : 1234h, ax
seg000:002B
jnb
short loc_0
seg000:002D
mov
ax, 10h
seg000:0030
cmp
word ptr ds : loc_10+1, ax
seg000:0034
jnz
short loc_0
seg000:0036
mov
ax, 10h
seg000:0039
cmp
word ptr ds : loc_10+1, ax
seg000:003D
jnz
short loc_0
seg000:003F
retn
seg000:003F seg000
ends
; seg000: loc_104j ...
Assembly Intel 8086

Linguaggio Assembly

Introduzione al linguaggio Assembly 8086

Il codice macchina può essere visto in una forma equivalente attraverso un linguaggio
mnemonico.
L'insieme dei codici mnemonici di tutte le istruzioni prende il nome di linguaggio
assembly.

Parole chiave del linguaggio Assembly

Il linguaggio assembly prevede l'uso di parole chiave:

  • MOV per assegnare valori a registri;
  • ADD per sommare i contenuti di registri o aree di memoria;
  • SUB per sottrarre;
  • e così via.

Processo di traduzione del linguaggio Assembly

Il processo che traduce il codice assembly nel corrispondente codice
macchina eseguibile direttamente dal microprocessore si compone di
due passaggi:

  • ASSEMBLER: è un processo di traduzione e disassemblaggio e non
    richiede alcuna intelligenza;
  • LINKER: serve a collegare moduli e librerie di cui si compone il
    programma e a distribuire il codice oggetto nello spazio di indirizzi di
    memoria centrale assegnato al programma.

Codice scritto in linguaggio
assembly tramite un editor
(file sorgente)
Codice macchina con
indirizzi simbolici
(file oggetto)
Codice macchina con
indirizzi effettivi
(file eseguibile)
Prova.asm
Prova.obj
Prova.exe
ASSEMBLER
LINKER

Struttura del codice

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
. model
small
. data
;
DATA SEGMENT
FINE DATA SEGMENT
. code
;
CODE SEGMENT
main proc
MOV AX, @data
MOV DS, AX
main endp
FINE
CODE SEGMENT
I
end

Variabili e costanti

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
end
. model small
. data
DATA SEGMENT
var1 DB 12h
variabile 1
var2 DB ?
variabile 2
C EQU 15h
costante
FINE DATA SEGMENT
. code
CODE SEGMENT
;
main proc
MOV AX, @data
MOV DS, AXI
main endp
--
-
FINE CODE SEGMENT

Ciclo macchina

Istruzione di somma (1)

01
02
03
04
. model small
. data
;---- DATA SEGMENT
var1 DB 12h
variabile 1
var2 DB ?
variabile 2
05
06
C EQU 15h
costante
FINE DATA SEGMENT
07
08
09
10
11
. code
CODE SEGMENT
12
13
14
15
16
17
18
19
main proc
MOV AX, @data
MOV DS, AX
MOV BL, 04h
MOV CL, 05h
ADD BL, CL
20
21
22
23
24
25
26
27
main endp
;
-
FINE CODE SEGMENT
end

Istruzione di somma (2)

01
. model small
02
. data
03
;----
DATA SEGMENT
04
var1 DB 12h
;
variabile 1
05
var2 DB ?
variabile 2
C EQU 15h
costante
06
-
FINE DATA SEGMENT
07
08
09
10
11
. code
CODE SEGMENT
12
main proc
MOV AX, @data
MOV DS, AX
13
14
15
16
17
18
MOV BL, 04h
19
MOV CL, 05h
ADD BL, CL
20
21
22
MOV AX, 0A404h
23
MOV BX, 0A202h
ADD AX, BX
24
25
26
27
28
29
30
main endp
;
FINE CODE SEGMENT
end

MOV AX,@data e MOV DS,AX

Esecuzione del programma (1)

  • Il nostro programma deve essere caricato in memoria per essere eseguito
    • Caricato dal Loader (strumento che fa parte del sistema operativo);
    • Il Loader decide quali segmenti effettivi utilizzare;
    • Il Loader inizializza CS:IP (per puntare alla prima istruzione da eseguire);
    • Il Loader inizializza DS ma NON sull'indirizzo base del Data Segment per il
      programma a run-time;
    • In ogni caso, il Loader "sa" quale segmento ha caricato come Data Segment, quindi "sa"
      quando inizia;
    • Man mano che il programma viene caricato, il Loader sostituisce ogni occorrenza di
      "@data" con l'indirizzo base del Data Segment
  • Cosa significa questo per il nostro programma?

Esecuzione del programma (2)

  • Ricorda: il processore utilizza il contenuto di DS come l'indirizzo base ogni volta che
    dobbiamo utilizzare delle variabili nella memoria
    • Il programmatore fornisce solo l'offset a 16 bit nelle istruzioni
  • DS deve essere inizializzato prima di QUALSIASI accesso al Data Segment
    • Prima di qualsiasi utilizzo di variabili.
  • DS viene inizializzato dinamicamente (in fase di esecuzione).
    • Dovrebbe essere la prima cosa che fa il programma!

Inizializzazione di DS (3)

Come inizializziamo DS?
Modo sbagliato (a causa dei vincoli nelle modalità di indirizzamento)

  • MOV DS, @data (segment register, immediate)
    10) wrong parameters: MOV DS, data
    NO
    (10) cannot use segment register with an immediate value

Modo corretto

  • MOV AX, @data (register, immediate)
  • MOV DS, AX
    (segment register, register)
    OK

Non hai trovato quello che cercavi?

Esplora altri argomenti nella Algor library o crea direttamente i tuoi materiali con l’AI.