forked from KolibriOS/kolibrios
630234432f
git-svn-id: svn://kolibrios.org@109 a494cfbc-eb01-0410-851d-a64ba20cac60
116 lines
1.6 KiB
PHP
116 lines
1.6 KiB
PHP
;-------------------------
|
|
;
|
|
; ASM JJ's 2 C macros ;-)
|
|
;
|
|
; version history:
|
|
;
|
|
; *0.01(02/08/05): if_e, if_ne, if_a, if_b
|
|
; *0.02(02/09/05): push_abc, pop_abc
|
|
; ch_sign, abs
|
|
;
|
|
; E.X.: if_e dword [x],100,.end_if
|
|
; if x = 100 do the instrucsions to .end_if:
|
|
; ==
|
|
macro if_e arg1,arg2,label
|
|
{
|
|
if arg1 eq 0 | arg2 eq 0 | arg1 eqtype 12 | arg2 eqtype 12
|
|
cmp arg1,arg2
|
|
jne label
|
|
else
|
|
push edx
|
|
mov edx,arg1
|
|
cmp edx,arg2
|
|
pop edx
|
|
jne label
|
|
end if
|
|
}
|
|
|
|
; !=
|
|
macro if_ne arg1,arg2,label
|
|
{
|
|
if arg1 eq 0 | arg2 eq 0 | arg1 eqtype 12 | arg2 eqtype 12
|
|
cmp arg1,arg2
|
|
je label
|
|
else
|
|
push edx
|
|
mov edx,arg1
|
|
cmp edx,arg2
|
|
pop edx
|
|
je label
|
|
end if
|
|
}
|
|
|
|
; >
|
|
macro if_a arg1,arg2,label
|
|
{
|
|
if arg1 eq 0 | arg2 eq 0 | arg1 eqtype 12 | arg2 eqtype 12
|
|
cmp arg1,arg2
|
|
jbe label
|
|
else
|
|
push edx
|
|
mov edx,arg1
|
|
cmp edx,arg2
|
|
pop edx
|
|
jbe label
|
|
end if
|
|
}
|
|
|
|
; <
|
|
macro if_b arg1,arg2,label
|
|
{
|
|
if arg1 eq 0 | arg2 eq 0 | arg1 eqtype 12 | arg2 eqtype 12
|
|
cmp arg1,arg2
|
|
jae label
|
|
else
|
|
push edx
|
|
mov edx,arg1
|
|
cmp edx,arg2
|
|
pop edx
|
|
jae label
|
|
end if
|
|
}
|
|
|
|
macro push_abc
|
|
{
|
|
push eax
|
|
push ebx
|
|
push ecx
|
|
push edx
|
|
push edi
|
|
push esi
|
|
}
|
|
|
|
macro pop_abc
|
|
{
|
|
pop esi
|
|
pop edi
|
|
pop edx
|
|
pop ecx
|
|
pop ebx
|
|
pop eax
|
|
}
|
|
|
|
UNDER_0 equ 0x7FFFFFFF
|
|
; changes sign e.x. ch_sign -1 = 1
|
|
macro ch_sign arg
|
|
{
|
|
push edx
|
|
mov edx,0
|
|
sub edx,arg
|
|
pop edx
|
|
}
|
|
|
|
; absolut e.x. abs -24 = 24
|
|
macro abs arg
|
|
{
|
|
local .end_if
|
|
if_a arg,UNDER_0,.end_if
|
|
ch_sign arg
|
|
.end_if:
|
|
}
|
|
;---------------------------------------
|
|
|
|
|
|
|
|
|