gllobal (Normal User)
Rookie
Messaggi: 41
Iscritto: 02/04/2012
|
Ciao, mi serve un urgente aiuto per una relazione che devo consegnare martedì, volevo sapere cos'è e cosa fa la direttiva assume. Dalla spiegazione del prof io ho dedotto questo, che però non mi convince :
Assume e' una direttiva che associa a tutti i segment delle etichette il segment del DS, CS o SS. Esempio.
Ai segment contenuti nel data vengono associati i segment del DS.
data sarebbe la parte del codice dove ho dichiarato le mie variabili, cioè il data segment.
Assume DS ata,CS:code,SS:pila
Inoltre cos'è il masm e il linker? so che servono per generare il file .exe avendo un .asm, ma qual'è la definizione?
Di seguito ho messo il codice del programma se serve.
Codice sorgente - presumibilmente Altri Linguaggi |
Assume DS:data,CS:code,SS:pila ;Assume e' una direttiva che associa a tutti i segment delle
;etichette il segment del DS, CS o SS. Esempio.
;Ai segment contenuti nel data vengono associati
;i segment del DS.
code segment
ERR:
mov ax,data
mov ds,ax
lea dx,MsgSiErr
mov ah,09h
int 21h
pop ax ;Estrazione dallo stack dell'ip che punta all'istruzione div
add al,2 ;L'indirizzo ip viene incrementato di 2, in questo modo in seguito il
;programma non si posizionerà sull'istruzione div ma su quella seguente.
push ax ;L'indirizzo ip viene reinserito nello stack.
iret ;Con l'istruzione iret la cpu salta sull'indirizzo di ritorno, prima di ciò
;il processore estrae 3 word dallo stack, le prime 2 le carica in cs:ip,
;l'ultima la carica nel registro flags.
start:
mov ax,0 ;Azzeramento del registro ds per modificare l'IVT
mov ds,ax
mov cx,[00] ;Memorizzazione dell'ip nel registro cx.
mov bx,[02] ;Memorizzazione di cs nel registro bx.
mov ax,seg ERR
mov [DS:02],ax
mov ax,offset ERR
mov [DS:00],ax ;Nell'indirizzo CS:IP dell'IVT e' stato inserito l'indirizzo
;dell'etichetta ERR, in questo modo la CPU eseguirà
;le istruzioni che seguono l'etichetta ERR.
mov ax,data
mov ds,ax ;Riposizioni il DS sul data segment.
mov ah,0
mov al,divd
div divs ;Divisione per 0 per generare l' eccezione.
nop ;no operation, e' un'istruzione che viene eseguita ma non
nop ;crea cambiamenti durante l'esecuzione del programma.
nop
lea dx,MsgRitorno ;Messaggio per comunicare il ritorno al programma principale
mov ah,09h
int 21h
mov ax,0
mov ds,ax
mov [DS:02],bx ;Ripristino dei 4 byte dell'IVT, precedentemente in BX e' stato memorizzato
mov [DS:00],cx ;il CS e in CX l'IP.
mov ax, 4c00h
int 21h
code ends
data segment
MsgRitorno db "Ritorno al main program.$"
MsgSiErr db "Errore divisione per 0. $"
divs db 0
divd db 15
data ends
pila segment stack
db 100 dup(0AAH)
pila ends
end start
|
Ciao e grazie a tutti quelli che risponderanno .
Ultima modifica effettuata da gllobal il 16/12/2012 alle 19:44 |