home *** CD-ROM | disk | FTP | other *** search
/ Jason Aller Floppy Collection / 91.img / PERI_50.ZIP / PERI.PGM / SAMPLE.ASM < prev    next >
Assembly Source File  |  1990-08-20  |  2KB  |  90 lines

  1. cseg    segment para public 'code'
  2. org    100h
  3.  
  4.     ; This program is used to display the total and available memory.
  5.     ; To generate this program, use the following:
  6.     ;    MASM SAMPLE;
  7.     ;    LINK SAMPLE,SAMPLE,SAMPLE/M;
  8.     ;    EXE2BIN SAMPLE.EXE SAMPLE.COM
  9.     ;    DEL SAMPLE.OBJ
  10.     ;    DEL SAMPLE.EXE
  11.  
  12. sample    proc far
  13.  
  14.     assume cs:cseg,ds:cseg,ss:nothing,es:nothing
  15.  
  16.     jmp short start     ; go to the start
  17.  
  18. public    sample, total, tmemory, avail, amemory, totmem, fremem, start, dosret
  19. public    getmem, convert, conloop, display
  20.  
  21. total    db 'Total memory: '
  22. tmemory db '000 KB    '
  23. avail    db 'Memory available: '
  24. amemory db '000 KB','$'
  25. even
  26. totmem    dw 0            ; total memory size
  27. fremem    dw 0            ; free memory size
  28.  
  29. start:    call getmem        ; get memory size
  30.  
  31.     mov ax,totmem        ; total memory
  32.     mov di,offset tmemory
  33.     call convert        ; convert to ascii
  34.  
  35.     mov ax,fremem        ; free (available) memory
  36.     mov di,offset amemory
  37.     call convert        ; convert to ascii
  38.  
  39.     call display        ; display the answers
  40.  
  41. dosret: int 20h         ; return to dos
  42.  
  43. getmem    proc near        ; get memory size
  44.     mov cl,6        ; shift count
  45.     mov si,2        ; point to top of memory in psp
  46.     mov ax,[si]        ; get top of memory
  47.  
  48.     shr ax,cl        ; convert to KB
  49.     mov totmem,ax        ; and save total memory
  50.  
  51.     mov bx,cs        ; get current segment
  52.     shr bx,cl        ; convert to KB
  53.     sub ax,bx        ; subtract from total memory to get
  54.     mov fremem,ax        ; free memory
  55.     ret
  56. getmem    endp
  57.  
  58. convert proc near        ; convert number to ascii
  59.     ; ax = number, di = output buffer pointer
  60.     push ax         ; save number
  61.     mov al,' '
  62.     mov cx,3
  63.     rep stosb        ; clear 3 bytes
  64.     pop ax            ; restore number
  65.  
  66.     mov cx,10        ; divisor
  67.  
  68. conloop:xor dx,dx        ; clear remainder
  69.     div cx            ; divide by 10
  70.     add dl,30h        ; convert to ascii
  71.     dec di            ; back up 1 byte
  72.     mov [di],dl        ; save ascii number
  73.  
  74.     cmp ax,0        ; done?
  75.     jnz conloop        ; no
  76.  
  77.     ret
  78. convert endp
  79.  
  80. display proc near        ; display memory sizes
  81.     mov ah,9        ; display string
  82.     mov dx,offset total    ; start of message
  83.     int 21h         ; let dos display it
  84.     ret
  85. display endp
  86.  
  87. sample    endp
  88. cseg    ends
  89. end    sample
  90.