【HSP3】HSP3x64サポートの為の関数呼び出しアセンブリ(適当)

HSP3x64サポートの為の関数呼び出しアセンブリ(適当) あまりテストしてないですし、書き方適当で非効率ですしおすし

HSP3x64サポートの為の関数呼び出しアセンブリ(適当) あまりテストしてないですし、書き方適当で非効率ですしおすし

  • hk1v
  • 2014/3/4 18:25
  • タグ:
  • タグはありません
; masm64 (x64)
;.686
;.mmx
;.xmm
;.model flat
;_TEXT64 segment page public use64 'CODE'
; align 16
; fastcall!!
;PUBLIC C call_extfunc64
.code
PUBLIC call_extfunc64
call_extfunc64 PROC
; rcx = 1()
; rdx = 2(INT64)
; r8 = 3((int=0,double(float)=1)INT64)
; r9 = 4()
; rax =
sub rsp, 72
; 退
push r12
push r13
push r14
push r15
;
mov r12, rcx
mov r13, rdx
mov r14, r8
mov r15, r9
; r10-r11
; 0
xor r10, r10
xor r11, r11
; 145
; 1
; if num > 0
cmp r15, 0
jg FLAG1
jmp FLAG1END
FLAG1:
mov r10, qword ptr [r14+0]
; int or double?
cmp r10, 0
je FLAG1INT
; doublexmm?
movq xmm0, qword ptr [r13+0]
jmp FLAG1END
FLAG1INT:
mov rcx, qword ptr [r13+0]
FLAG1END:
; 2
; if num > 1
cmp r15, 1
jg FLAG2
jmp FLAG2END
FLAG2:
mov r10, qword ptr [r14+8]
; int or double?
cmp r10, 0
je FLAG2INT
; doublexmm?
movq xmm1, qword ptr [r13+8]
jmp FLAG2END
FLAG2INT:
mov rdx, qword ptr [r13+8]
FLAG2END:
; 3
; if num > 2
cmp r15, 2
jg FLAG3
jmp FLAG3END
FLAG3:
mov r10, qword ptr [r14+16]
; int or double?
cmp r10, 0
je FLAG3INT
; doublexmm?
movq xmm2, qword ptr [r13+16]
jmp FLAG3END
FLAG3INT:
mov r8, qword ptr [r13+16]
FLAG3END:
; 4
; if num > 3
cmp r15, 3
jg FLAG4
jmp FLAG4END
FLAG4:
mov r10, qword ptr [r14+24]
; int or double?
cmp r10, 0
je FLAG4INT
; doublexmm?
movq xmm3, qword ptr [r13+24]
jmp FLAG4END
FLAG4INT:
mov r9, qword ptr [r13+24]
FLAG4END:
; 5
; if num < 5 : CALLFUNC
cmp r15, 5
jl CALLFUNC
; ↓5RSP()
mov r11, r15
jmp PUSHCHECK
PUSHSTACK:
;push qword ptr [r13+r11*8]
mov rax, qword ptr [r13+r11*8]
mov qword ptr [rsp+r11*8], rax
PUSHCHECK:
dec r11
; 03
cmp r11, 3
jg PUSHSTACK
; ↑
; eax0
xor eax, eax
CALLFUNC:
;
call r12
;
pop r15
pop r14
pop r13
pop r12
;
add rsp, 72
ret
call_extfunc64 ENDP
;
End
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX