Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Altri Linguaggi - Assembly x86, direttiva ASSUME. Il masm e linker
Forum - Altri Linguaggi - Assembly x86, direttiva ASSUME. Il masm e linker

Avatar
gllobal (Normal User)
Rookie


Messaggi: 41
Iscritto: 02/04/2012

Segnala al moderatore
Postato alle 19:40
Domenica, 16/12/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 :data,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

  1. Assume DS:data,CS:code,SS:pila   ;Assume e' una direttiva che associa a tutti i segment delle
  2.                              ;etichette il segment del DS, CS o SS. Esempio.
  3.                              ;Ai segment contenuti nel data vengono associati
  4.                              ;i segment del DS.
  5. code segment
  6. ERR:
  7.     mov ax,data
  8.     mov ds,ax
  9.     lea dx,MsgSiErr    
  10.     mov ah,09h
  11.     int 21h  
  12.     pop ax    ;Estrazione dallo stack dell'ip che punta all'istruzione div
  13.     add al,2  ;L'indirizzo ip viene incrementato di 2, in questo modo in seguito il    
  14.                      ;programma non si posizionerà sull'istruzione div ma su quella seguente.
  15.     push ax   ;L'indirizzo ip viene reinserito nello stack.    
  16.     iret      ;Con l'istruzione iret la cpu salta sull'indirizzo di ritorno, prima di ciò
  17.               ;il processore estrae 3 word dallo stack, le prime 2 le carica in cs:ip,
  18.               ;l'ultima la carica nel registro flags.  
  19.                      
  20. start:  
  21.     mov ax,0  ;Azzeramento del registro ds per modificare l'IVT
  22.     mov ds,ax      
  23.  
  24.     mov cx,[00]  ;Memorizzazione dell'ip nel registro cx.
  25.     mov bx,[02]  ;Memorizzazione di cs nel registro bx.
  26.     mov ax,seg ERR  
  27.     mov [DS:02],ax    
  28.     mov ax,offset ERR
  29.     mov [DS:00],ax ;Nell'indirizzo CS:IP dell'IVT e' stato inserito l'indirizzo  
  30.                    ;dell'etichetta ERR, in questo modo la CPU eseguirà
  31.                    ;le istruzioni che seguono l'etichetta ERR.
  32.     mov ax,data
  33.     mov ds,ax      ;Riposizioni il DS sul data segment.
  34.          
  35.     mov ah,0
  36.     mov al,divd
  37.     div divs    ;Divisione per 0 per generare l' eccezione.  
  38.     nop         ;no operation, e' un'istruzione che viene eseguita ma non
  39.     nop         ;crea cambiamenti durante l'esecuzione del programma.
  40.     nop  
  41.     lea dx,MsgRitorno ;Messaggio per comunicare il ritorno al programma principale
  42.     mov ah,09h
  43.     int 21h  
  44.          
  45.     mov ax,0
  46.     mov ds,ax
  47.    
  48.     mov [DS:02],bx  ;Ripristino dei 4 byte dell'IVT, precedentemente in BX e' stato memorizzato
  49.     mov [DS:00],cx  ;il CS e in CX l'IP.
  50.    
  51.     mov ax, 4c00h  
  52.     int 21h    
  53. code ends
  54.  
  55. data segment  
  56.     MsgRitorno db "Ritorno al main program.$"
  57.     MsgSiErr db "Errore divisione per 0. $"
  58.     divs db 0
  59.     divd db 15
  60. data ends
  61.  
  62. pila segment stack
  63.     db 100 dup(0AAH)
  64. pila ends
  65. end start



Ciao e grazie a tutti quelli che risponderanno :) .

Ultima modifica effettuata da gllobal il 16/12/2012 alle 19:44
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6223
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 19:52
Domenica, 16/12/2012
E' un po' piu' dettagliato di quello che ha detto il tuo professore: http://cs.smith.edu/~thiebaut/ArtOfAssembly/CH08/CH08-3.ht ...

Il MASM e' un assembler (converte un file .asm in codice oggetto .obj).

Il linker prende uno o piu' files .obj e si occupa di creare l'eseguibile (.exe).

Ultima modifica effettuata da pierotofy il 16/12/2012 alle 19:53


Il mio blog: https://piero.dev
PM Quote
Avatar
gllobal (Normal User)
Rookie


Messaggi: 41
Iscritto: 02/04/2012

Segnala al moderatore
Postato alle 19:54
Domenica, 16/12/2012
Ok grazie mille :) .

PM Quote