Tijdens het debuggen kun je ctrl-alt-d drukken om assembly code van de C++ code te zien.
Ook kun je de inhoud van de registers zien. Tevens van de stack, met Debug/Windows/Memory/Memory1.
In je header file van je C++ class definieer je een extern naar een assembler file als volgt:
extern "C" void RotateScreenPart(BYTE* screenSource, BYTE* screenDestination, Sint64 startY, Sint64 endY, Sint64 cosinusAngle, Sint64 sinusAngle, Sint64 centerPointX, Sint64 centerPointY, Sint64 screenWidth, Sint64 screenHeight);
Vergeet niet deze typedef's op te nemen:
typedef signed __int8 int8_t;
typedef unsigned __int8 uint8_t;
typedef signed __int16 int16_t;
typedef unsigned __int16 uint16_t;
typedef signed __int32 int32_t;
typedef unsigned __int32 uint32_t;
typedef signed __int64 int64_t;
typedef unsigned __int64 uint64_t;
typedef uint8_t BYTE;
typedef uint16_t Uint16;
typedef int16_t Sint16;
typedef uint32_t Uint32;
typedef int32_t Sint32;
typedef uint64_t Uint64;
typedef int64_t Sint64;
In je assembler file doe je:
RotateScreenPart proc
push rbp
mov rbp, rsp
sub rsp, 30h ; 6 qwords space.
mov [rbp-8h], r8
mov [rbp-10h], r9
mov [rbp-18h], rcx
mov [rbp-20h], rdx
push rax
mov rax, 1566 - 100
mov [rbp-28h], rax
mov rax, 1566 - 200
mov [rbp-30h], rax
push rbx
; cosinusAngle = [rbp+30h]
; sinusAngle = [rbp+38h]
; centerPointX = [rbp+40h]
; centerPointY = [rbp+48h]
; screenWidth = [rbp+50h]
pop rbx
pop rax
mov rsp, rbp
pop rbp
ret
RotateScreenPart endp
Aan de bovenstaande code zie je dat de
parameter1 = rcx
parameter2 = rdx
parameter3 = r8
parameter4 = r9
mov rax, [rbp+30h] ; parameter 5
mov rax, [rbp+38h] ; parameter 6
Je kunt ook nog lokale space aanmaken. Zie RotateScreenPart.
Geen opmerkingen:
Een reactie posten