Forum by laureateci.it
[ Home | REGOLE FORUM | Tutti i blog | Profilo | Registrati | CHAT | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Download Informatica | Download ICD | Download TPS | Download Magistrale | Download Specialistica | Giochi | Cerca nel web | cerca | faq | RSS ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 INFORMATICA - Primo Anno
 Architettura degli elaboratori
 Laboratorio 11-09-2008
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Autore Discussione Precedente Discussione Discussione Successiva  

Solarfall
Nuovo Utente



Inserito il - 12/09/2008 : 11:29:26  Mostra Profilo  Visita l'Homepage di Solarfall Invia a Solarfall un Messaggio Privato  Rispondi Quotando

Ecco a voi la soluzione dell'esercizio presentato all'esame. Spero sia utile a qualcuno...:

Laboratorio di architettura degli elaboratori (corso A)
11-09-2008


Traccia

Scrivere un programma assembly che ordini in maniera crescente un vettore di 6 numeri interi (da 0 a 99) e lo stampi a video.

Fare uso delle seguenti subroutine da definire:

inserimento
ordinamento
stampa

COPY&PASTE-----------------------------------

include 'emu8086.inc' ; Inclusione della libreria standard dell'emulatore

data segment
vet db 6 dup (0) ; Dichiaro un vettorei di 6 elementi inizializzati a 0
elementi dw 6 ; Numero di elementi del vettore inizializzato al valore 6
ends

stack segment
dw 128 dup(0)
ends

code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax

call Inserimento ; Ciclo di inserimento dei 6 valori
call CLEAR_SCREEN ; Pulizia dello schermo
call Ordinamento ; Il vettore viene ordinato...
call Stampa ; ...e stampato

mov ax, 4c00h ; exit to operating system.
int 21h
ends

Proc Inserimento
lea bx,vet ; Indirizzo effettivo del vettore in bx(base)
mov si,0 ; indice del vettore
ciclo_inserisci:
call SCAN_NUM ; acquisisci numero e memorizza in CX
mov [bx+si],cl ; parte bassa di CX nella locazione puntata da bx+si (base+offset)
mov ah,0Eh
mov al,10d
int 10h
mov al,13d
int 10h ; Vai a capo stampando i caratteri ASCII 10 e 13
inc si ; incrementa l'offset e quindi l'indice del vettore
cmp si,elementi ; acquisito tutto il vettore?
jl ciclo_inserisci ; no: acquisisci di nuovo; si: termina procedura
ret
endp

Proc Ordinamento ; Algoritmo Ordinamento Bubble Sort
lea bx,vet ; Indirizzo effettivo del vettore in bx(base)
mov di,elementi
sub di,2 ; in DI elementi_del_vettore-2=range di confronti
ciclo_esterno:
mov si,0 ; indice a 0
ciclo_interno:
mov al,[bx+si] ; in AL elemento del vettore puntato da (base+offset)
mov ah, [bx+si+1] ; in AH elemento successivo del vettore
cmp al,ah
jle continua ; se AL>AH allora scambia elementi altrimenti continua
mov [bx+si+1],al
mov [bx+si],ah
continua:
inc si ; incrementa l'offset e quindi l'indice del vettore
cmp si,di ; confrontati tutti gli elementi?
jle ciclo_interno ; no: continua a confrontare
dec di ; si: decrementa DI (range di confronti)
cmp di,0 ; se DI=0 sono stati effettuati tutti i confronti
jge ciclo_esterno ; altrimenti continua a confrontare
ret
endp

Proc Stampa
lea bx,vet ; Indirizzo effettivo del vettore in bx(base)
mov si,0 ; indice del vettore
ciclo_stampa:
mov ah,0
mov al,[bx+si]
call PRINT_NUM ; stampa numero contenuto in AX
mov ah,0Eh
mov al,10d
int 10h
mov al,13d
int 10h ; Vai a capo stampando i caratteri ASCII 10 e 13
inc si ; incrementa l'offset e quindi l'indice del vettore
cmp si,elementi; stampato tutto il vettore?
jl ciclo_stampa ; no: stampa ancora; si: termina procedura
ret
endp

DEFINE_SCAN_NUM ; Macro per l'acquisizione di un numero da tastiera
DEFINE_PRINT_NUM ; Macro per la stampa di un numero
DEFINE_PRINT_NUM_UNS ; Macro per la stampa di un numero unsigned (richiesto)
DEFINE_CLEAR_SCREEN ; Macro per la pulizia dello schermo

end start ; set entry point and stop the assembler.

COPY&PASTE-----------------
  Discussione Precedente Discussione Discussione Successiva  
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,16 secondi.

TargatoNA.it | SuperDeejay.Net | Antidoto.org | Brutto.it | Equiweb.it | Snitz Forum 2000