home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 10 / ioProg_10.iso / soft / pmode / hello3.asm < prev    next >
Encoding:
Assembly Source File  |  1997-10-19  |  2.2 KB  |  103 lines

  1. ; hello4.asm : scrive un messaggio tramite MS-DOS
  2. ;
  3. ; quarto metodo : il descrittore non e` creato, viene usato MS-DOS
  4. ;
  5. ;
  6.  
  7.     BITS 16
  8.         SECTION .text
  9.     ORG    0x100
  10.  
  11.         jmp    start
  12.  
  13.         err_dpmi   db 'nessun DPMI in memoria.$'
  14.     err_memory db 'memoria insufficiente.$'
  15.         err_pmode  db 'errore entrando in modo protetto.$'
  16.  
  17.         msg_hello  db 'Hello, world! (3)'
  18.  
  19.         endl       db 13,10,'$'
  20.         pm_ptr       dd 0
  21.  
  22.  
  23. write_exit:
  24.     mov    ah,0x9
  25.         int    21h
  26.         mov    dx,endl
  27.         int    21h
  28.         mov    al,1
  29.  
  30. exit:
  31.     mov    ah,4ch
  32.         int    21h
  33.  
  34. start:
  35.         add    bx,0x1000
  36.     mov    ah,0x4a
  37.         int    21h      ; riserva 64K di memoria per questo programma
  38.  
  39.         ;
  40.         ; controllo presenza DPMI server
  41.         ;
  42.         mov    ax,1687h
  43.         int    2fh
  44.         test    ax,ax
  45.         mov    dx,err_dpmi
  46.         jnz    write_exit
  47.  
  48.         mov    [pm_ptr+2],es    ; memorizzo l'indirizzo usato per
  49.         mov    [pm_ptr],di     ; entrare in modo protetto
  50.  
  51.         test    si,si
  52.         jz    .go
  53.  
  54.         ; SI contiene i paragrafi di memoria che bisogna allocare
  55.     mov    bx,si
  56.     mov    ah,48h
  57.     int    21h
  58.     mov    dx,err_memory
  59.     jc    write_exit
  60.     mov    es,ax
  61.  
  62. .go
  63.     ; pongo ax = 0, indica modo protetto a 16 bit
  64.     xor    ax,ax
  65.         call    word far [pm_ptr]
  66.         mov    dx,err_pmode
  67.         ;
  68.         ; se c'e` un errore siamo ancora in modo reale,
  69.         ; percio` scrivi un messaggio di errore
  70.         jc    write_exit
  71.  
  72.         ; ----- ora siamo in modo protetto ------
  73.         ;
  74.         ; tutti i registri (tranne ES) hanno la stessa base
  75.         ; di prima, percio` e` possibile utilizzare le stesse
  76.         ; variabili
  77.         ;
  78.         ; ES contiene il selettore che punta al PSP del programma
  79.  
  80.  
  81.         ;
  82.         ; questa volta viene utilizzato MS-DOS per stampare il messaggio
  83.         ;
  84.         ; certo che per usare ah=9/int 21h non c'e` bisogno del DPMI,
  85.         ; anzi il fatto che l'istruzione INT 21h funzioni e` solo
  86.         ; perche` il DPMI provvede in qualche modo ad emularla.
  87.         ; bisogna ricordare che l'istruzione INT 21h va ad eseguire
  88.         ; codice in modo reale !
  89.  
  90.         mov    dx,msg_hello
  91.         mov    ah,09
  92.         int    21h
  93.  
  94.  
  95.  
  96.  
  97.         mov    al,0
  98.         jmp    exit
  99.  
  100.  
  101.  
  102.  
  103.