Anteprima
Vedrai una selezione di 10 pagine su 41
Manuale Assembly 8086 per imparare a programmare da 0 con molti programmi che compilano Pag. 1 Manuale Assembly 8086 per imparare a programmare da 0 con molti programmi che compilano Pag. 2
Anteprima di 10 pagg. su 41.
Scarica il documento per vederlo tutto.
Manuale Assembly 8086 per imparare a programmare da 0 con molti programmi che compilano Pag. 6
Anteprima di 10 pagg. su 41.
Scarica il documento per vederlo tutto.
Manuale Assembly 8086 per imparare a programmare da 0 con molti programmi che compilano Pag. 11
Anteprima di 10 pagg. su 41.
Scarica il documento per vederlo tutto.
Manuale Assembly 8086 per imparare a programmare da 0 con molti programmi che compilano Pag. 16
Anteprima di 10 pagg. su 41.
Scarica il documento per vederlo tutto.
Manuale Assembly 8086 per imparare a programmare da 0 con molti programmi che compilano Pag. 21
Anteprima di 10 pagg. su 41.
Scarica il documento per vederlo tutto.
Manuale Assembly 8086 per imparare a programmare da 0 con molti programmi che compilano Pag. 26
Anteprima di 10 pagg. su 41.
Scarica il documento per vederlo tutto.
Manuale Assembly 8086 per imparare a programmare da 0 con molti programmi che compilano Pag. 31
Anteprima di 10 pagg. su 41.
Scarica il documento per vederlo tutto.
Manuale Assembly 8086 per imparare a programmare da 0 con molti programmi che compilano Pag. 36
Anteprima di 10 pagg. su 41.
Scarica il documento per vederlo tutto.
Manuale Assembly 8086 per imparare a programmare da 0 con molti programmi che compilano Pag. 41
1 su 41
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Linguaggio Assembly

È un linguaggio a basso livello che è rappresentato quasi in simbolico dal linguaggio Macchina. Il nostro computer sa leggere solo 0 e 1, tutta la combinazione di 0 e 1 formano stringhe in codice binario cioè il linguaggio macchina. L'assembly prende una serie di queste stringhe e le trasforma in comandi come MOV, ADD ecc.

Esistono diversi tipi di assembler, e il linguaggio ch li contiene si basa all'architettura importante di riferimento.

Quello che fornirà è il linguaggio della famiglia Intel x86, in particolar modo del linguaggio assembly legato a degli interi cioè il Processo 8086.

Un Programma in Assembly viene messo su un Programma Sorgente. Dopodiché viene tradotto in Linguaggio Macchina chiamato Programma Oggetto.

Con l'uso dell'link vengono creati il programma eseguibile.

Processore 8086

Qua tutte le operazioni del processore vengono effettuate su com. e registri, che nomi memoria molto veloci contenuti sia mem, che comandi.

L'8086 ha 14 registri Pin che vedremo i Registri Comuni Europei essermi AX, BX, CX, si, DX.

Ognuno di questi registri è diviso nella parte alte e parte bassa: NYD registro AX: B parte alta: AH 2 parte bassa AL H sta em High e L low

Nel registro B: X B parte alta: BH 2 parte bassa BL

Nel registro C: X C parte alta CH e parte bassa CL

Nel registro D: X D parte alta DH 2 parte bassa DL

In ognuno di questi registri possono inserece fino a 16 bit, dov'è il bit è un numero o 1 (maggiore che si è un segnale elettrico), e porta un informazione, immagino modif chiam o interruttore che si porta o a 0 o ancora 1

IMP: Per aprire il Prompt dei comandi: => Su si esegue digitate CMD

Come Fare un Programma

Partiamo da alcuni cose che non mi fermo:

  • MODEL SMALL - Ho definito un modello del nostro programma. In pratica

  • STACK 100H - È due parole grandi del nostro programma.

  • DATA - È il mezzo delle note in cui dichiarare le variabili.

    • DB - 1 BYTE = 8 BIT = 256 combinazioni.

    • DW - 2 BYTE = 16 BIT = 65536 combinazioni.

    In dichiarare una variabile:

    • NOME TIPO VALORE. Gli altri parametri, si possono anche mettere dopo.

CODE - Qua archivia il codice, tutti che verranno le istruzioni.

Non possiamo fare aggiunzioni tra variabili

Per terminare il programma un END.

I commenti li metto così:

Quelle con il punti doppi sono le direttive

Importante usare MOV AH,1CH INT 21H

E anche MOV BL,SOMMA

Somma in output/input

.MODEL SMALL .STACK 100H .DATA NUM1 DB ? NUM2 DB ? DOM1 DB 'Inserire 1° numero: ',13,10,'$' DOM2 DB 'Inserire 2° numero: ',13,10,'$' SOMMA DB ? RIS DB 'La somma è: ',13,10,'$'

.CODE .STARTUP

MOV AX,@DATA MOV DS,AX MOV AH,09H MOV DX,OFFSET DOM1 INT 21H INT 21H MOV NUM1,AL

MOV AH,09H MOV DX,OFFSET DOM2 INT 21H MOV AH,0AH INT 21H MOV NUM2,AL

MOV AL,NUM1 ADD AL,NUM2 MOV SOMMA,AL

MOV AH,09H MOV DX,OFFSET RIS INT 21H

MOV AH,02H MOV DL,SOMMA INT 21H

MOV AH,4CH INT 21H

END

SEI: CMP AL,'A'

JL CICLO

CMP AL,'Z'

JG CICLO

CMP AL,'a'

JE AUMENTO

DEC BL

CMP BL,'o'

JE FINCICLO

JMP CICLO

AUMENTO: INC NAMAJUSC

DEC BL

CMP BL,'o'

JE FINCICLO

JMP CICLO

FINCICLO: NOP

MOV AH,09H

MOV DX,OFFSET A CAPO

INT 21H

MOV AH,09H

MOV DX,OFFSET RIS

INT 21H

MOV AH,09H

MOV DX,OFFSET NAMAJUSC

INT 21H

MOV AH,4CH

INT 21H

Funzione XCHG

È un'istruzione che in un unico passaggio scambia il contenuto di due registri o di un registro e di una variabile.

.MODEL SMALL .STACK 100H .DATA PINO DB '9' GIGI DB '5' .CODE STARTUP: MOV AX,@DATA MOV DS,AX MOV AL,PINO XCHG AL,GIGI MOV PINO,AL Variabile 2: PINO e GIGI END

OSS: scambio fatto

MOV BL,PINO MOV AL,GIGI MOV PINO,BL MOV GIGI,AL

Per un numero maggiore

Array in Assembler (8086)

Gli array sono delle variabili multiple immaginandoli come un contenitore che non contengono più variabili i vari.

Variabile GIGI

VEDI GIGI _______________ |____|____|____|_|

ogn quadratino è numerato. Gli indici numerano 0 a m e tutte le restanti par.

Si dichiarano nel DATA:

NOME TIPO NUMERO INDICI DUP (inizializzazione)

Uso l'istruzione DUP per creare tot celle che hanno valore non definito x defiz:

PINO DB 10 DUP (?)

Nomi di diz di second un vettore che mi chiama PINO

e dopo 10 unità usa tot 10 celle di un non di nuovo in nome

DUP(0) crea 10 celle con valore 0

MODEL SMALL

STACK 100H

DATA

FRASE DB 20 DUP (?)

RIFERIZ DB 0

A CAPO DB 13, 10

INMSG DB 'inserire battuta: ', '$'

OUTMSG DB 'le ripetizioni sono: ', '$'

CODE

STAMPSTR MACRO STRINGA

MOV AH, 09H MOV DX, OFFSET STRINGA INT 21H ENDM

STAMPAVAR MACRO VAR

MOV AH, 02H MOV DL, VAR INT 21H ENDM

STARTUP

MOV AX, @DATA MOV DS, AX STAMPSTR INMSG MOV SI, 0

CICLO: MOV AH, 01H

INT 21H MOV FRASE+SI, AL INC SI CMP SI, 20 JL CICLO

STAMPASTR A CAPO

STAMPASTR OUTMSG

CICLO2: MOV BL, FRASE+SI

CMP FRASE+(SI-1), AL JNE NOINC INC RIPETIZ NOINC: DEC SI CMP SI, 0 JG CICLO2

MOV AL, RIPETIZ

MOV AH, 0 DIV CL, 10 MOV BL, AH ADD BL, 30H STAMPAVAR BL

STAMPAVAR AL

Ricerca Binaria (inserzione vettore ordinato)

.MODEL SMALL .STACK 100H .DATA

  • VETTORE DB 10 DUP (?)
  • CERCATO DB ?
  • ELEMENTI DB 0
  • SINISTRA DB 0
  • DESTRA DB 0
  • MEDIO DB 0
  • DIVISI DB 2
  • DOMO DB "quanti elementi vuoi inserire: $"
  • DOM1 DB "inserisci ricercato: $"
  • DOM2 DB "inserisci il numero che vuoi: $"
  • RIS1 DB "numero trovato: $"
  • RIS2 DB "numero non trovato: $"
  • ACAPO DB 13, 10, "$"

.CODE STAMPA MACRO stringa MOV AH, 09H INT 21H ENDM

STARTUP MOV AX, @DATA MOV DS, AX MOV SI, 0

STAMPA DOMO MOV AH, 01H INT 21H SUB AL, 30H MOV ELEMENTI, AL STAMPA ACAPO

CICLO: MOV AH, 01H INT 21H MOV VETTORE [SI], AL INC SI MOV BL, ELEMENTI MOV BH, 0 CMP SI, BX JL CICLO

STAMPA ACAPO STAMPA DOM2 MOV AH, 01H INT 21H MOV CERCATO, AL

Procedura con Parametri

Funzione che fa somma due numeri con parametri e restituisce la somma

I parametri e numeri pushandi vanno nello stack in ordine inverso, ossia numero 2 e il parametro sarà il 1°. Il risultato entra in AX.

MODEL MEDIUM .STACK 100H .DATA NUM1 DB 5 NUM2 DB ? RIS DB ?

.CODE

FUNZIONE PROC NEAR

  • PUSH BP
  • MOV BP,SP
  • SUB SP,12
  • PUSH CX ; numero 1° parametro
  • PUSH DX ; numero 2° parametro

MOV CX,[BP+4] MOV DX,[BP+6]

  • MOV [BP-2],0
  • ADD [BP-2],CX
  • ADD [BP-2],DX
  • MOV AX,[BP-2]

POP DX POP CX MOV SP,BP POP BP RET

FUNZIONE ENDP

.STARTUP

  • MOV AX,@DATA
  • MOV DS,AX
  • MOV CH,0
  • MOV CL,NUM1
  • MOV BH,0
  • MOV BL,NUM2
  • PUSH BX
  • PUSH CX
  • MOV AX,1
  • CALL FUNZIONE
  • ADD SP,4
  • MOV RIS,AL

...

Dettagli
Publisher
A.A. 2014-2015
41 pagine
3 download
SSD Ingegneria industriale e dell'informazione ING-INF/05 Sistemi di elaborazione delle informazioni

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher matrix0909 di informazioni apprese con la frequenza delle lezioni di Calcolatori elettronici e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli studi della Campania "Luigi Vanvitelli" o del prof Palmieri Francesco.