30/11/12 9:44
gllobal
Ciao a tutti, ho il seguente problema, in pratica per vari motivi sono stato assente a molte lezioni di sistemi, il prof ha consegnato un nuovo progetto e cioè gestire l'eccezione della divisione per 0 in assembly, io avendo perso molte lezioni ho chiesto il programma a un compagno che l'ha finito, e quindi ho preso spunto dal suo codice. Il problema è il seguente, il mio non funziona il suo invece si. Ho controllato il suo e il mio e mi sembra che siano identici tranne che cambiano i nomi delle variabili, il procedimento è lo stesso, però il mio n on funziona il suo si. Di seguito c'è il codice, il primo programma è del mio compagno e dopo c'è il mio. Poi se potete spiegarmi anche i vari passaggi eseguiti nel programma, sarebbe il massimo grazie a tutti.
Programma dell'amico
Il mio programma
Programma dell'amico
data segment divisore db 15 numeratore db 15 msgOk db "Divisione eseguita correttamente $" msgErr db "Errore!! Divisione per 0 impossibile$" ends code segment divisione proc mov ds, si cmp divisore, 0 je MessaggioErrore lea dx, msgOk mov ah, 09h int 21h jmp fine MessaggioErrore: lea dx, msgErr mov ah, 09h int 21h fine: iret divisione endp start: mov ax, data mov ds, ax mov ah,00 mov al,13h int 10h ;modalita' video mov cx,[00] ;in cx metto ip mov dx,[02] ;in dx metto cs mov ax,0 mov si,ds mov ds,ax mov ax,seg divisione mov [02],ax ;cs mov ax,offset divisione mov [00],ax ;ip mov ah,0 mov al,numeratore div divisore ;divisione per generare l' eccezione mov [02],dx ;ripristino i 4 byte dell'IVT mov [00],cx mov ax, 4C00h ; exit to operating system. int 21h ends end start
Il mio programma
data segment MsgNoErr db "Operazione completata$" MsgSiErr db "Errore divisione per 0$" divs db 0 divd db 15 ends code segment ERR proc mov ds,di cmp divs, 0 jne NoErr lea dx,MsgSiErr jmp Fine NoErr: lea dx,MsgNoErr Fine: mov ah,09h int 21h iret ERR endp start: mov ax,data mov ds,ax mov ah,00 mov al,13h int 10h ;modalita' video mov cx,[00] ;in cx metto ip mov dx,[02] ;in dx metto cs mov si,ds mov ax,0 mov ds,ax mov ax,seg ERR mov [02],ax ;cs mov ax,offset ERR mov [00],ax ;ip mov ah,0 mov al,divd div divs ;divisione per generare l' eccezione mov [02],dx ;ripristino i 4 byte dell'IVT mov [00],cx mov ax, 4c00h int 21h ends end start ; set entry point and stop the assembler.
Ultima modifica effettuata da gllobal 30/11/12 20:00
aaa