home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 03 / praxis / astool01.asm next >
Encoding:
Assembly Source File  |  1990-12-04  |  3.1 KB  |  115 lines

  1. ; **********************************************************
  2. ; *                    ASTOOL01.ASM                        *
  3. ; *   Vergleich zwischen Funktion 48h des Interrupts 21h   *
  4. ; *   und  der  Funktion 09h  des XMM-Treibers - 8/11/90   *
  5. ; *       (c) 1991 bei Peter Monadjemi & toolbox           *
  6. ; **********************************************************
  7.  
  8. .model small
  9. .stack 100h
  10. .data
  11. xmm_control     label dword
  12.                  dw ?
  13.                  dw ?
  14.  
  15. text1   db 10,13,'Konventioneller Arbeitsspeicher : ','$'
  16. text2   db ' Paragraphen (16 Byte)','$'
  17. text3   db 10,13,'Extended-Memory                 : ','$'
  18. text4   db '  KByte','$'
  19. err01   db 10,13,'Kein XMM-Treiber vorhanden!',10,13,'$'
  20. err02   db 10,13,'Fehler bei der Speicherverwaltung!'
  21.         db 10,13,'$'
  22.  
  23. .code
  24.         mov dx,@data      ; Datensegment initialisieren
  25.         mov ds,dx
  26.  
  27.         mov ah,49h        ; Gesamten Speicher freigeben
  28.         int 21h
  29.         jc mem_err        ; Fehler bei der Freigabe
  30.  
  31.         mov ah,48h        ; Maximalen Speicher anfordern
  32.         mov bx,0FFFFh
  33.         int 21h
  34.         jnc @f            ; Kein Fehler, dann weiter
  35.         cmp al,08         ; Lag es an zu wenig Speicher?
  36.         jne mem_err       ; Nein, dann haben wir ein Problem
  37.  
  38. @@:
  39.         mov dx,offset text1 ; Einen Text ausgeben
  40.         mov ah,09
  41.         int 21h
  42.         mov ax,bx
  43.  
  44.         call print_num      ; Anzahl der reservierten
  45.                             ; Paragraphen ausgeben
  46.  
  47.         mov dx,offset text2 ; Einen Text ausgeben
  48.         mov ah,09
  49.         int 21h
  50.         mov ax,bx
  51.  
  52.  
  53.         mov ax,4300h        ; Ist XMM-Treiber vorhanden?
  54.         int 2Fh
  55.         cmp al,80h
  56.         jne NoDriver        ; Nein, dann Schluß
  57.  
  58.         mov ax,4310h        ; Eintrittsadresse ermitteln
  59.         int 2Fh
  60.         mov word ptr XMM_CONTROL,bx
  61.         mov word ptr XMM_CONTROL+2,es
  62.  
  63.         mov ah,08           ; Speichergröße feststellen
  64.         call XMM_CONTROL
  65.         push dx
  66.         mov dx,offset text3 ; Einen Text ausgeben
  67.         mov ah,09
  68.         int 21h
  69.         pop ax
  70.         call print_num      ; Anzahl der verfügbaren KBytes
  71.                             ; ausgeben
  72.  
  73.         mov dx,offset text4 ; Einen Text ausgeben
  74.         mov ah,09
  75.         int 21h
  76.         mov ax,bx
  77.  
  78. ende:
  79.         mov ah,4ch          ; Zurück zu DOS
  80.         int 21h
  81.  
  82. print_num       proc        ; Ausgabe einer 16-Bit-Zahl
  83.                 MOV BX,10
  84.                 XOR CX,CX
  85. @@:
  86.                 XOR DX,DX
  87.                 DIV BX
  88.                 ADD DL,30h
  89.                 PUSH DX
  90.                 INC CX
  91.                 OR AX,AX
  92.                 JNE @B
  93.  
  94.                 MOV AH,02
  95. @@:
  96.                 POP DX
  97.                 INT 21h
  98.                 LOOP @B
  99.                 ret
  100. print_num       endp
  101.  
  102. mem_err:
  103.                 mov dx,offset err02
  104.                 jmp short @f
  105. NoDriver:
  106.                 mov dx,offset err01
  107. @@:
  108.                 mov ah,09
  109.                 int 21h
  110.                 jmp ende
  111.  
  112. end
  113. ; **********************************************************
  114. ; *                Ende von ASTOOL01.ASM                   *
  115.