home *** CD-ROM | disk | FTP | other *** search
- ; hello4.asm : scrive un messaggio tramite MS-DOS
- ;
- ; quarto metodo : il descrittore non e` creato, viene usato MS-DOS
- ;
- ;
-
- BITS 16
- SECTION .text
- ORG 0x100
-
- jmp start
-
- err_dpmi db 'nessun DPMI in memoria.$'
- err_memory db 'memoria insufficiente.$'
- err_pmode db 'errore entrando in modo protetto.$'
-
- msg_hello db 'Hello, world! (3)'
-
- endl db 13,10,'$'
- pm_ptr dd 0
-
-
- write_exit:
- mov ah,0x9
- int 21h
- mov dx,endl
- int 21h
- mov al,1
-
- exit:
- mov ah,4ch
- int 21h
-
- start:
- add bx,0x1000
- mov ah,0x4a
- int 21h ; riserva 64K di memoria per questo programma
-
- ;
- ; controllo presenza DPMI server
- ;
- mov ax,1687h
- int 2fh
- test ax,ax
- mov dx,err_dpmi
- jnz write_exit
-
- mov [pm_ptr+2],es ; memorizzo l'indirizzo usato per
- mov [pm_ptr],di ; entrare in modo protetto
-
- test si,si
- jz .go
-
- ; SI contiene i paragrafi di memoria che bisogna allocare
- mov bx,si
- mov ah,48h
- int 21h
- mov dx,err_memory
- jc write_exit
- mov es,ax
-
- .go
- ; pongo ax = 0, indica modo protetto a 16 bit
- xor ax,ax
- call word far [pm_ptr]
- mov dx,err_pmode
- ;
- ; se c'e` un errore siamo ancora in modo reale,
- ; percio` scrivi un messaggio di errore
- jc write_exit
-
- ; ----- ora siamo in modo protetto ------
- ;
- ; tutti i registri (tranne ES) hanno la stessa base
- ; di prima, percio` e` possibile utilizzare le stesse
- ; variabili
- ;
- ; ES contiene il selettore che punta al PSP del programma
-
-
- ;
- ; questa volta viene utilizzato MS-DOS per stampare il messaggio
- ;
- ; certo che per usare ah=9/int 21h non c'e` bisogno del DPMI,
- ; anzi il fatto che l'istruzione INT 21h funzioni e` solo
- ; perche` il DPMI provvede in qualche modo ad emularla.
- ; bisogna ricordare che l'istruzione INT 21h va ad eseguire
- ; codice in modo reale !
-
- mov dx,msg_hello
- mov ah,09
- int 21h
-
-
-
-
- mov al,0
- jmp exit
-
-
-
-
-