home *** CD-ROM | disk | FTP | other *** search
/ Zodiac Super OZ / MEDIADEPOT.ISO / FILES / 18 / IUP064.ZIP / numbers.inc < prev    next >
Text File  |  1996-07-09  |  2KB  |  105 lines

  1. ; Write numbers to stdout
  2.  
  3. ; WriteHexa4   : Write a 4 bits hexadecimal number (in AL)
  4. ; WriteHexa8   : Write a 8 bits hexadecimal number (in AL)
  5. ; WriteHexa16  : Write a 16 bits hexadecimal number (in AX)
  6. ; WriteDecimal : Write a 32 bits decimal number (in EAX)
  7.  
  8. WriteHexa4 proc near
  9.       push ax
  10.       push dx
  11.  
  12.       mov ah, 02h              ; write a character
  13.       xchg al, dl
  14.       cmp dl, 10               ; number or letter ?
  15.       jae short @@1
  16.       add dl, '0'
  17.       jmp short @@2
  18. @@1:  add dl, 'A'-10
  19. @@2:  int 21h
  20.  
  21.       pop dx
  22.       pop ax
  23.       ret
  24. WriteHexa4 endp
  25.  
  26. WriteHexa8 proc near
  27.       push ax
  28.  
  29.       push ax
  30.       shr al, 4                ; 4 higher bits
  31.       call WriteHexa4
  32.       pop ax
  33.       and al, 00fh             ; 4 lower bits
  34.       call WriteHexa4
  35.  
  36.       pop ax
  37.       ret
  38. WriteHexa8 endp
  39.  
  40.  
  41. WriteHexa16 proc near
  42.       push ax
  43.  
  44.       push ax                  ; get a copy of ax
  45.       xchg al, ah              ; higher byte
  46.       call WriteHexa8
  47.       pop ax
  48.       call WriteHexa8          ; lower byte
  49.  
  50.       pop ax
  51.       ret
  52. WriteHexa16 endp
  53.  
  54. WriteDecimal proc near
  55.       push eax
  56.       push ebx
  57.       push ecx
  58.       push edx
  59.  
  60.       test eax, 10000000000000000000000000000000b   ; negative
  61.       je short @@3
  62.       neg eax          ; reverse the number
  63.       push eax
  64.       mov ah, 02h
  65.       mov dl, '-'      ; print a '-'
  66.       int 21h
  67.       pop eax
  68.  
  69. @@3:
  70.       mov ebx, 10
  71.       xor cx, cx
  72.  
  73. @@1:  xor edx, edx
  74.       div ebx        ; (exd:eax) / 10
  75.       push dx        ; the lowest decimal number
  76.       inc cx
  77.       or eax, eax    ; eax=0 ?
  78.       jne @@1
  79.  
  80.       mov ah, 02h
  81. @@2:  pop dx         ; number in dans dl
  82.       add dl, '0'
  83.       int 21h
  84.       dec cx
  85.       or cx, cx
  86.       jne @@2
  87.  
  88.       pop edx
  89.       pop ecx
  90.       pop ebx
  91.       pop eax
  92.  
  93.       ret
  94. WriteDecimal endp
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.