Subversion Repositories Kolibri OS

Rev

Rev 908 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. DWORD equ dword
  3. WORD  equ word
  4. BYTE  equ byte
  5.  
  6. PTR   equ
  7.  
  8. align 4
  9.  
  10. _dump:
  11.  
  12.         mov ecx, DWORD PTR [esp+4]
  13. @@:
  14.         mov edx, 0x3FD
  15.         in al, dx
  16.         test al, 96
  17.         je  @B
  18.  
  19.         mov dl, -8
  20.         mov eax, ecx
  21.         out dx, al
  22.         ret
  23.  
  24.  
  25. align 4
  26. _putc:
  27.         mov ecx, DWORD PTR [esp+4]
  28. .L13:
  29.         mov edx, 0x3FD
  30.         in al, dx
  31.         test al, 96
  32.         je  .L13
  33.         mov dl, -8
  34.         mov eax, ecx
  35.         out dx, al
  36.         cmp ecx, 10
  37.         jne .L7
  38.         mov cl, 13
  39.         jmp     .L13
  40. .L7:
  41.         ret
  42.  
  43. _printf:
  44.         push    ebp
  45.         push    edi
  46.         push    esi
  47.         push    ebx
  48.         sub     esp, 40
  49.         lea     eax, [esp+64]
  50.         mov     DWORD PTR [esp+4], eax
  51. .L50:
  52.         mov     ecx, DWORD PTR [esp+60]
  53.         movzx   edx, BYTE PTR [ecx]
  54.         test    dl, dl
  55.         je      .L51
  56. .L17:
  57.         lea     eax, [ecx+1]
  58.         cmp     dl, 37
  59.         mov     DWORD PTR [esp+60], eax
  60.         je      .L18
  61.         movsx   eax, dl
  62.         mov     DWORD PTR [esp], eax
  63.         call    _putc
  64.         mov     ecx, DWORD PTR [esp+60]
  65.         movzx   edx, BYTE PTR [ecx]
  66.         test    dl, dl
  67.         jne     .L17
  68. .L51:
  69.         add     esp, 40
  70.         pop     ebx
  71.         pop     esi
  72.         pop     edi
  73.         pop     ebp
  74.         ret
  75. .L18:
  76.         movzx   edx, BYTE PTR [ecx+1]
  77.         lea     eax, [ecx+2]
  78.         mov     DWORD PTR [esp+60], eax
  79.         cmp     dl, 115
  80.         je      .L22
  81.         jg      .L23
  82.         cmp     dl, 100
  83.         je      .L21
  84. .L20:
  85.         mov     edx, DWORD PTR [esp+4]
  86.         mov     eax, DWORD PTR [edx]
  87.         add     edx, 4
  88.         mov     DWORD PTR [esp+4], edx
  89.         mov     DWORD PTR [esp], eax
  90.         call    _putc
  91.         jmp     .L50
  92. .L23:
  93.         cmp     dl, 117
  94.         je      .L21
  95.         cmp     dl, 120
  96.         jne     .L20
  97. .L21:
  98.         mov     ecx, DWORD PTR [esp+4]
  99.         mov     eax, DWORD PTR [ecx]
  100.         add     ecx, 4
  101.         cmp     dl, 100
  102.         mov     DWORD PTR [esp+4], ecx
  103.         mov     ecx, eax
  104.         je      .L52
  105. .L24:
  106.         cmp     dl, 120
  107.         je      .L53
  108.         lea     ebp, [esp+20]
  109.         mov     esi, 10
  110.         mov     ebx, ebp
  111.         mov     edi, ebp
  112. .L43:
  113.         xor     edx, edx
  114.         mov     eax, ecx
  115.         div     esi
  116.         cmp     edx, 9
  117.         lea     eax, [edx+48]
  118.         jle     .L31
  119.         lea     eax, [edx+87]
  120. .L31:
  121.         mov     BYTE PTR [edi], al
  122.         xor     edx, edx
  123.         mov     eax, ecx
  124.         div     esi
  125.         add     edi, 1
  126.         test    eax, eax
  127.         mov     ecx, eax
  128.         jne     .L43
  129.         lea     eax, [edi-1]
  130.         cmp     eax, ebx
  131.         mov     BYTE PTR [edi], 0
  132.         jbe     .L33
  133.         lea     ecx, [edi-2]
  134. .L35:
  135.         movzx   eax, BYTE PTR [ebx]
  136.         movzx   edx, BYTE PTR [ecx+1]
  137.         mov     BYTE PTR [ebx], dl
  138.         add     ebx, 1
  139.         mov     BYTE PTR [ecx+1], al
  140.         mov     eax, ecx
  141.         sub     ecx, 1
  142.         cmp     ebx, eax
  143.         jb      .L35
  144. .L33:
  145.         mov     edx, ebp
  146. .L36:
  147.         movzx   eax, BYTE PTR [edx]
  148.         test    al, al
  149.         je      .L50
  150.         mov     ebx, edx
  151. .L39:
  152.         movsx   eax, al
  153.         mov     DWORD PTR [esp], eax
  154.         call    _putc
  155.         movzx   eax, BYTE PTR [ebx+1]
  156.         add     ebx, 1
  157.         test    al, al
  158.         jne     .L39
  159.         jmp     .L50
  160. .L22:
  161.         mov     eax, DWORD PTR [esp+4]
  162.         mov     edx, DWORD PTR [eax]
  163.         add     eax, 4
  164.         mov     DWORD PTR [esp+4], eax
  165.         test    edx, edx
  166.         jne     .L36
  167.         mov     edx, .LC0
  168.         jmp     .L36
  169. .L52:
  170.         test    eax, eax
  171.         jns     .L24
  172.         lea     ebx, [esp+21]
  173.         neg     ecx
  174.         mov     edi, ebx
  175.         mov     esi, 10
  176.         lea     ebp, [esp+20]
  177.         mov     BYTE PTR [esp+20], 45
  178.         jmp     .L43
  179. .L53:
  180.         lea     ebp, [esp+20]
  181.         mov     esi, 16
  182.         mov     ebx, ebp
  183.         mov     edi, ebp
  184.         jmp     .L43
  185.  
  186. .LC0:   db "(null)",0
  187.  
  188. restore DWORD
  189. restore WORD
  190. restore BYTE
  191.  
  192. restore PTR
  193.