Da ich mich zurzeit mit Assembler in kombination mit Purebasic beschäftige habe ich jetzt auch schon eine frage bezüglich der Register:
Laut der Hilfe kann man ja nur die Register eax, edx und ecx benutzen (ist das bei 64 bit eigentlich auch so? Da hat man ja viel mehr Register als bei 32bit)
Da dass natürlich einschränkt habe ich mir gedacht ich speicher einfach vor dem Assembler code alle Register im Hauptspeicher , und setze sie danach wieder, was ja eigentlich dazu führt das durch den Assemblercode keine veränderung im Register auftritt:
Hier mal der Code:
Code: Alles auswählen
Macro StartASM()
!mov rdx,[v_ASM]
!mov [rdx],r8
!mov [rdx+8],r9
!mov [rdx+16],r10
!mov [rdx+24],r11
!mov [rdx+32],r12
!mov [rdx+40],r13
!mov [rdx+48],rax
!mov [rdx+56],ecx
EndMacro
Macro StopASM()
!mov rdx,[v_ASM]
!mov r8,[rdx]
!mov r9,[rdx+8]
!mov r10,[rdx+16]
!mov r11,[rdx+24]
!mov r12,[rdx+32]
!mov r13,[rdx+40]
!mov rax,[rdx+48]
!mov ecx,[rdx+56]
EndMacro
Das Problem: es treten immer noch "Ungültige Speicherzugriffe" bei Purebasic befehlen auf.
Aber warum ist das so? Kann man mit den Registern noch mehr machen als nur Werte zu speichern?
Bzw. ich habe jetzt hier im Forum auch Assembler code gesehen der mehr als die 3 Register nutzt, gibt es da vielleicht irgendeinen Trick, bzw. etwas was ich beachten muss damit es eben nicht zu den "Ungültigen Speicherzugriffen" kommt?
Wäre dankbar für eure Hilfe.