16/12/12 18:40
gllobal
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.
Ciao e grazie a tutti quelli che risponderanno .
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.
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 16/12/12 18:44
aaa