home *** CD-ROM | disk | FTP | other *** search
- ; hello1.asm : scrive un messaggio nella memoria video
- ;
- ; secondo metodo : il descrittore e` creato automaticamente dal DPMI
- ;
- ;
-
- 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.$'
-
- err_pm db 'errore DPMI.$'
- msg_hello db 'Hello, world! (1)'
-
- 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
-
-
- ;
- ; ora uso un metodo alternativo, la funzione 2h del
- ; DPMI converte automaticamente in selettore un
- ; segmento utilizzato per il modo reale!
- ;
-
- mov ax,2
- mov bx,0xb800 ; segmento modo reale
- int 31h
- mov dx,err_pm
- jc write_exit
-
-
- mov es,ax ; in ax c'e` il selettore
- xor di,di
- mov ah,4fh
- mov cx,17
- mov si,msg_hello
- .next ; scrivi la stringa
- lodsb
- stosw
- loop .next
-
-
- mov al,0
- jmp exit
-
-
-
-
-