54 lines
2.4 KiB
Plaintext
54 lines
2.4 KiB
Plaintext
; **************************************************************************
|
|
; FILE:MATH.INC
|
|
; FUNCTION: MATH MACROS INCLUDE FILE
|
|
; AUTHOR: SEAN M. KESSLER
|
|
;****************************************************************************
|
|
round MACRO
|
|
mov edx,eax ; move value into edx register
|
|
and edx,0000FFFFh ; get remainder into edx register
|
|
shr eax,10h ; get whole number to eax register
|
|
cmp edx,7FFFh ; if remainder > 32767, increment eax
|
|
db 7Eh ; the next two bytes comprise "jle +2" (ie)
|
|
db 01h ; jump passed the increment esx insruction
|
|
inc eax ; increment value in eax
|
|
ENDM
|
|
|
|
absolute MACRO varOne
|
|
LOCAL @@return
|
|
cmp varOne,00h ; check varOne with zero
|
|
jge @@return ; if it's greater than or equal then return
|
|
neg varOne ; otherwise make it positive
|
|
@@return:
|
|
ENDM
|
|
|
|
multiply MACRO varOne,varTwo
|
|
mov eax,varOne ; move varOne into eax register
|
|
mov edx,varTwo ; move varTwo into edx register
|
|
imul eax,edx ; perform multiply, result to eax
|
|
ENDM
|
|
|
|
mulshort MACRO varOne,varTwo ; multiply r/m16->eax
|
|
mov ax,varOne ; move varOne into ax register
|
|
mov dx,varTwo ; move varTwo into dx register
|
|
and eax,0FFFFh ; clear out high word of eax register
|
|
and edx,0FFFFh ; clear out high word of edx register
|
|
imul eax,edx ; perform multiply, result to eax
|
|
ENDM
|
|
|
|
divide MACRO varOne,varTwo ; divide MACRO varOne,varTwo
|
|
mov eax,varOne ; move varOne into eax register
|
|
mov ebx,varTwo ; move varTwo into ebx register
|
|
cdq ; convert doubleword in eax to quadword at edx:eax
|
|
idiv ebx ; divide eax/ebx result to eax, remainder to edx
|
|
ENDM
|
|
|
|
divshort MACRO varOne,varTwo ; divide r/m16->eax
|
|
mov ax,varOne ; move varOne into ax register
|
|
mov bx,varTwo ; move varTwo into bx register
|
|
and eax,0FFFFh ; clear out high word of eax register
|
|
and ebx,0FFFFh ; clear out high word of ebx register
|
|
cdq ; convert doubleword in eax to quadword at edx:eax
|
|
idiv ebx ; divide eax/ebx result to eax, remainder to edx
|
|
ENDM
|
|
|