Il 0% ha trovato utile questo documento (0 voti)
8 visualizzazioni10 pagine

Assembly

Il documento fornisce una panoramica sul linguaggio assembly, descrivendo la sua natura a basso livello e la sua relazione con il linguaggio macchina. Viene spiegata la struttura dei programmi assembly, i registri del microprocessore, le direttive e le istruzioni, nonché il processo di compilazione ed esecuzione. Infine, sono presentati esercizi pratici per applicare le conoscenze acquisite.
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato DOC, PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
8 visualizzazioni10 pagine

Assembly

Il documento fornisce una panoramica sul linguaggio assembly, descrivendo la sua natura a basso livello e la sua relazione con il linguaggio macchina. Viene spiegata la struttura dei programmi assembly, i registri del microprocessore, le direttive e le istruzioni, nonché il processo di compilazione ed esecuzione. Infine, sono presentati esercizi pratici per applicare le conoscenze acquisite.
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato DOC, PDF, TXT o leggi online su Scribd

Rattin Livia

Assembly

Il linguaggio assembly è un linguaggio a basso livello, ed è il più vicino al linguaggio macchina

vero e proprio.

Erroneamente viene spesso chiamato "assembler" anche se quest'ultimo identifica il programma

che converte il linguaggio assembly in linguaggio macchina.

Per assembly si intende il linguaggio che utilizza il Set Di Istruzioni del processore cioè l'insieme

di tutte le operazioni che il processore è in grado di eseguire.

Per questo motivo non esiste un linguaggio assembly unico ma ogni processore ha il suo.

L'assembly consente al programmatore di ignorare il formato binario del linguaggio macchina.

Ogni codice operativo del linguaggio macchina viene sostituito, nell'assembly, da una sequenza di

caratteri che lo rappresenta in forma mnemonica e quindi più facile e intuitivo per il programmatore.

Il programma scritto in assembly non può essere eseguito direttamente dal processore, deve essere

tradotto nella forma binaria corrispondente, usando un programma compilatore.

L'assembly consente una traduzione particolarmente semplice che trasforma ogni istruzione

assembly, in modo univoco, in una istruzione in linguaggio macchina.

1
Rattin Livia

Registri :

I microprocessori dispongono di alcuni elementi di memorizzazione ad alta velocità inseriti nel chip
stesso, denominati registri.

È possibile pensare ai registri come a locazioni di memoria che i Microprocessori utilizzano con un
tempo di accesso inferiore alla memoria tradizionale.

Ciascun registro ha una propria caratteristica e dispone di particolarità che nessun altro registro o
locazione di memoria possiede.

I registri possono essere classificati in


quattro categorie: Possono avere diverse dimensioni

 il registro dei flag  8-bit


 i registri di utilizzo generale  16-bit
 32-bit.
 il puntatore alle istruzioni  64 bit
 128 bit
 i registri di segmento.  …
Suddivisione dei registri:

Registri caratteristica

Flag (riporto, n°pari, segno, overflow,...) Hanno solo 2 stati (true / false 0/1 on / off)

AX BX CX DX SI DI BP SP
Registri generici ( a 16 bit )

ACCUMULATORE
usato per varie operazioni
AX
principalmente per le operazioni * e /
Ax = 16 bit = 8 bit + 8 bit=
AH+AL
PUNTATORE
Bx = 16 bit = 8 bit + 8 bit=
BX solitamente punta a loc. di memoria
BH+BL
es mov ax,[bx]
…..
CONTATTORE
L = low = parte bassa = 8 bit
CX usato per contare (cicli)
H = hight = parte alta = 8 bit
Consente di eseguire operazioni di
DX
INPUT/ OUTPUT
IP (istruction Point) Punta all’istruzione
SP (stack point) Punta alla cima dello STACK
CS (code segment)
DS (data segment) Registri di segmento
ES (extra segment) (puntano ad un segmento di memoria)
SS (stack segment)

2
Rattin Livia

Registro di flag

3
Rattin Livia

IL PROGRAMMA

I programmi Assembly sono composti di:

• istruzioni: generano un’istruzione/comando per la macchina es. ADD AX, 5

• direttive o pseudo-istruzioni: sono comandi per l’assemblatore. ( Es. VAR1 DB ? )


Le direttive sono informazioni di contesto e non corrispondono a un'azione da eseguire.

;programma di …
;nome file: …
;autore:…
.model small
.stack
.data

.code
STARPOINT:
….
…. Istruzioni
….

END STARPOINT
End.

Commenti
I commenti in assembly vengono fatti con il punto e virgola

;  commento

. Model type
Questa direttiva definisce il tipo di segmenti di memoria da utilizzare nel pgm

Type Spazio occupato


Tyny  1 [Link] 64kb x il codice e x i dati e 1 seg x stack(64kb))
small  1 [Link] 64kb x il codice, un seg(64kb) x i dati e 1 seg x stack(64kb))
medium  + [Link] 64kb x il codice, + seg(64kb) x i dati e + seg x stack(64kb))
compcat  + [Link] 64kb x il codice, + seg(64kb) x i dati e + seg x stack(64kb))
large  + [Link] 64kb x il codice, + seg(64kb) x i dati e + seg x stack(64kb))

4
Rattin Livia

.Stack

Questa direttiva avvisa il compilatore di quanto stack si necessita

.stack  default 1 kbyte


.stack 100h  1/2 kbyte

.data
Inizializza il segmento dati.
Questa direttiva consente di dichiarare le var del pgm

var equ 100 ;(costante)


A DB ? ;(crea una variabile A, a 8 bit, il cui contenuto non è definito)
mess db 13,10,"questo è un esempio",13,10,"$" ; (mess e una varabile stringa )
Var2 dw ? ;( crea una variabile Var2, a 16bit, il cui contenuto non è definito)

Le variabili
Tipi di variabili

 DB - Define Byte (=8 bit)


 DW -Define Word (=16 bit)
 DD - Define Double word
( =32 bit)
 DQ - Define Quadword
( 64 bit)
Costanti
• binarie: 001101B
 DF - Define FAR 6 byte
 DT - Define TenByte (=10 byte)
• ottali: 15O, 15Q
Dichiarazione: • esadecimali: 72H, 0DH, 0BEACH
(devono iniziare con un numero)
Var db ?  var= ? (1 byte) • decimali: 13, 13D
• stringhe: “S”, “Ciao”
Var1 db 15h var1=A • reali in base 10: 2.345925, 715E-3

Var2 dw ?  var2=? (16 bit)

var equ 100  var=100 definisce una COSTANTE con valore 100 (direttiva dos)

a DB ?  definisce una variabile indeterminata

mess db 13,10,"questo è un esempio",13,10,"$"  mess=”questo è un esempio”


crea una stringa
(13,10 = a capo)
spazio db 13,10," ",13,10,"$"  Spazio=” “

5
Rattin Livia

.code
Startpoint: …. End starpoint ( solo usando DosBOX)

indica l'inizio del segmento di codice del programma.

Il programma

;programma di …
;nome file: …
;autore:…
.model small
.stack
.data

.code
STARPOINT:
….
…. Istruzioni
….

END STARPOINT
End.

 Il pgm viene scritto su Blocco Note e poi salvato con estensione .asm

 Ad ogni modifica il pgm deve venir salvato e poi ri_compilato

Compilazione ed esecuzione di un programma

Dopo aver creato il programma per essere eseguito deve sempre venir compilato.

Compilazione ed esecuzione di un pgm Assembly: ([Link] = nome file creato in assembly)

 Per compilare tradurre in linguaggio macchine  tasm [Link] (genera un programma obj)
 Per generare un eseguibile  tlink [Link] (genera un programma exe)
 Per eseguire il programma  esempio

6
Rattin Livia
Utilizzando DosBox:

 Attivare dosbox facendo doppio click sull’icona del desktop

 Scrivere sul pront dei comandi Z:> Mount c: c:\Tasm

Significato: la cartella TASM diventa l’hard disk virtuale di dosbox.

 Scrivere C: 

 Scrivere cd bin

 Dir *.exe

(Verificare la presenza dei file TASM – TLINK e TD)

Ora è possibile lavorare.

DOSBox è un emulatore DOS open source, usato per fare funzionare giochi
incompatibili con i sistemi operativi moderni.

Piccolo promemoria sui comandi MS DOS base :

C: F: … è il comando per cambiare il drive

DIR C: elenca il contenuto del nostro hard disk virtuale

CD pippo entra nella cartella pippo

CD .. Ritorno alla cartella precedente

DELTREE pippo rimuove la cartella pippo e eventuali sottocartelle

DIR *.* visualizzare tutti i file contenuti

dir /p visualizza i file x pagina

dir /w visualizza i file x


DosBox:
cls pulizia schermo
ALT + ENTER  schermo intero e viceversa
CTRL + F1  Mappa dei tasti
CTRL + F7  decrementa la velocità dell’emulatore
CTRL + F8  incrementa la velocità dell’emulatore
CTRL + F9  ESCE da dosbox
CTRL + F10  prende o rilascia il mouse
TD nome_file.exe  avvia l’emulatore

7
Rattin Livia

Istruzioni

;……. commento
Op1 Op2= variabili/registri
Mov op1,op2 Op1 e op2 NON possono essere
entrambe variabili
Add op1,op2 Op1= op1+op2
Sub op1,op2 Op1= op1-op2
Mul op1 Ax=al*op1
Al=ax/op1
Div op1
Ah=resto della divisione
Inc op1 Op1=op1+1
Dec op1 Op1=op1-1

Interfaccia con l’utente

Mov dl,… Stampa UN carattere


Mov ah,02h Il valore deve essere nel registro D
Int 21h
Mov ax,@data Memorizza l’indirizzo dei messaggi
Mov ds,ax

Mov dx,offset mess Stampa la stringa presente nel registro


Mov ah,09h dx
Int 21h
Mov ah,01h Input di un carattere
Int 21h Al=input
Mov ah,4ch Chiusura pgm
int 21h

Es:
 Mov bl,10d  bl=0A  0Ah =10d 0000 0000 0000 0000 1010
Mov bh,10h  bh=10  10h =16d 0000 0000 0000 0001 0000

8
Rattin Livia

Esercizi:

1. Inserire un numero in 1/2 registro (parte bassa); copiare il valore dalla parte bassa del
registro a quella alta dello stesso registro

2. Inserire un numero in UN registro, copiare il valore in un secondo registro

3. Inserire un numero in BL. CH←BL+1 e CL←BL-1

4. Inserire un numero in BX.


 Salvare in un altro registro il valore BX+BX
 Salvare in un altro registro il valore BX-BX
 Salvare in un altro registro il valore BX*2
 Salvare in un altro registro il valore BX/2
===========================================================

5. Eseguire gli esercizi precedenti inserendo i dati e stampando a video il risultato. Inserire
massaggi adeguati nell'input e nella stampa
NB: la pressione di un tasto della tastiera corrisponde ad un numero esadecimale individuabile sulla della tabella ASCII.
Premendo A il pgm riceve--> 65 a-->97 1-->49 7-->55

6. Creare una semplice calcolatrice


 inserire 2 numeri
 eseguire la somma dei due numeri e stampare: somma=...
 eseguire la differenza dei due numeri e stampare: differenza=...
 eseguire la prodotto dei due numeri e stampare: prodotto=...
 eseguire la quoziente dei due numeri e stampare: quoziente=...

===========================================================

9
Rattin Livia

SALTI
 Salto incondizionato:

JMP etichetta (salta SEMPRE a etichetta)

….
Pippo:


Jmp pippo

 Salto condizionato:

CMP r1,r2 (Confronta r1 e r2)

SALTA se:
JA etichetta r1>r2 (Jump Above)
JAE etichetta r1>=r2 (Jump Above or Equal)
JB etichetta r1<r2 (Jump Below)
JBE etichetta r1<=r2 (Jump Below op Equal)
JE etichetta r1=r2 (Jump Equal)
JNE etichetta r1< >r2 (Jump Not Equal)
Se l’ultima operazione su un registro è
JNZ etichetta NON Zero ( dec bl se bl <>0 salta)
JZ etichetta ZERO (dec bl se bl=0 salta)

Esercizi:
1. Individuare se un numero è pari o dispari
2. Cercare il max valore tra 2 n° inseriti
3. Inserire un carattere e dare in uscita la scritta “ è un numero” oppure “è un carattere”
4. Inserire un numero e dire se è maggiore, minore o uguale a 5
5. Inserire un numero e solo se è pari aumentarlo di uno (trasformarlo in dispari)
6. Inserire due numeri e dire se uno è la metà dell’altro.
7. ….

10

Potrebbero piacerti anche