Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. ;-------------------------
  2. ;
  3. ; ASM JJ's 2 C macros ;-)
  4. ;
  5. ; version history:
  6. ;
  7. ; *0.01(02/08/05): if_e, if_ne, if_a, if_b
  8. ; *0.02(02/09/05): push_abc, pop_abc
  9. ;                  ch_sign, abs
  10. ;
  11. ; E.X.: if_e dword [x],100,.end_if
  12. ;       if x = 100 do the instrucsions to .end_if:
  13. ; ==
  14. macro if_e arg1,arg2,label
  15. {
  16. if arg1 eq 0 | arg2 eq 0 | arg1 eqtype 12 | arg2 eqtype 12
  17.     cmp  arg1,arg2
  18.     jne label
  19. else
  20.     push edx
  21.     mov  edx,arg1
  22.     cmp  edx,arg2
  23.     pop  edx
  24.     jne label
  25. end if
  26. }
  27.  
  28. ; !=
  29. macro if_ne arg1,arg2,label
  30. {
  31. if arg1 eq 0 | arg2 eq 0 | arg1 eqtype 12 | arg2 eqtype 12
  32.     cmp  arg1,arg2
  33.     je label
  34. else
  35.     push edx
  36.     mov  edx,arg1
  37.     cmp  edx,arg2
  38.     pop  edx
  39.     je label
  40. end if
  41. }
  42.  
  43. ; >
  44. macro if_a arg1,arg2,label
  45. {
  46. if arg1 eq 0 | arg2 eq 0 | arg1 eqtype 12 | arg2 eqtype 12
  47.     cmp  arg1,arg2
  48.     jbe label
  49. else
  50.     push edx
  51.     mov  edx,arg1
  52.     cmp  edx,arg2
  53.     pop  edx
  54.     jbe label
  55. end if
  56. }
  57.  
  58. ; <
  59. macro if_b arg1,arg2,label
  60. {
  61. if arg1 eq 0 | arg2 eq 0 | arg1 eqtype 12 | arg2 eqtype 12
  62.     cmp  arg1,arg2
  63.     jae label
  64. else
  65.     push edx
  66.     mov  edx,arg1
  67.     cmp  edx,arg2
  68.     pop  edx
  69.     jae label
  70. end if
  71. }
  72.  
  73. macro push_abc
  74. {
  75.     push eax
  76.     push ebx
  77.     push ecx
  78.     push edx
  79.     push edi
  80.     push esi
  81. }
  82.  
  83. macro pop_abc
  84. {
  85.     pop esi
  86.     pop edi
  87.     pop edx
  88.     pop ecx
  89.     pop ebx
  90.     pop eax
  91. }
  92.  
  93. UNDER_0 equ 0x7FFFFFFF
  94. ; changes sign e.x. ch_sign -1 = 1
  95. macro ch_sign arg
  96. {
  97.     push edx
  98.     mov  edx,0
  99.     sub  edx,arg
  100.     pop  edx
  101. }
  102.  
  103. ; absolut  e.x. abs -24 = 24
  104. macro abs arg
  105. {
  106. local .end_if
  107.     if_a arg,UNDER_0,.end_if
  108.        ch_sign arg
  109.     .end_if:
  110. }
  111.   ;---------------------------------------
  112.  
  113.  
  114.  
  115.  
  116.