Wie kann ich feststellen, wie groß eine Prozedur ist? Also wieviel Speicherplatz diese verbraucht (Ohne lokale Variablen).
Mit ?Start und ?End gibt es 0. Das funktioniert wohl nur im Datenbereich.
Größe einer Prozedur
Größe einer Prozedur
Computer werden benötigt um Probleme zu lösen die man ohne Computer nicht hätte.
Re: Größe einer Prozedur
Also bei mir funktioniert das mit den Sprungmarken:
Code: Alles auswählen
Procedure Beispiel(Wert.i)
Debug ?Ende - ?Start
Start:
Wert + 1
If Wert > 3
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
Ende:
EndProcedure
Beispiel(6)
Wobei die 124 nur als Richtwert dienen sollten. Da solltest du mal gucken, wo die im ASM-Code landen, ob davor und danach nicht noch "Sauermach-Sachen" stehen.124
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Größe einer Prozedur
Ok. Erst einmal vielen Dank. Das hilft schon einmal grob.
Gibt es vielleicht auch eine Lösung ausserhalb einer Prozedur? So muss ich diese ja irgendwie aufrufen, um einen Wert zu bekommen.
Diese Version hilft mir aber schon ein gutes Stück weiter.
Gibt es vielleicht auch eine Lösung ausserhalb einer Prozedur? So muss ich diese ja irgendwie aufrufen, um einen Wert zu bekommen.
Diese Version hilft mir aber schon ein gutes Stück weiter.
Computer werden benötigt um Probleme zu lösen die man ohne Computer nicht hätte.
Re: Größe einer Prozedur
Naja aufgerufen muss die Prozedur irgendwo eh, da sie ja sonst erst gar nicht kompiliert wird.
Da in PureBasic Sprungmarken in Prozeduren inzwischen geschirmt sind, geht es aktuell nur so:
Da in PureBasic Sprungmarken in Prozeduren inzwischen geschirmt sind, geht es aktuell nur so:
Code: Alles auswählen
Procedure Beispiel(Wert.i)
Start:
Wert + 1
If Wert > 3
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
Ende:
EndProcedure
Global Size.i
! MOV rax, ll_beispiel_ende ; ll_<Prozedurname in kleinbuchstaben>_ende/start
! MOV rdx, ll_beispiel_start
! SUB rax, rdx
! MOV [v_Size], rax
Debug Size
Beispiel(1)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Größe einer Prozedur
Wofür sollte man das brauchen? Ist doch nicht relevant.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
- juergenkulow
- Beiträge: 188
- Registriert: 22.12.2016 12:49
- Wohnort: :D_üsseldorf-Wersten
Re: Größe einer Prozedur
Code: Alles auswählen
; Länge einer Procedure
Procedure Beispiel(Wert.i)
Wert+1
If Wert>3
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
SetClipboardText(Str(Beispiel(6)))
; pbcompiler /Commented len.pb
; ; Procedure Beispiel(Wert.i)
; _Procedure0:
; MOV qword [rsp+8],rcx
; PUSH r15
; PS0=64
; XOr rax,rax
; PUSH rax
; SUB rsp,40
; ; Wert+1
; MOV r15,qword [rsp+PS0+0]
; INC r15
; MOV qword [rsp+PS0+0],r15
; ; If Wert>3
; MOV r15,qword [rsp+PS0+0]
; CMP r15,3
; JLE _EndIf2
; ; ProcedureReturn #True
; MOV rax,1
; JMP _EndProcedure1
; ; Else
; JMP _EndIf1
; _EndIf2:
; ; ProcedureReturn #False
; XOr rax,rax
; JMP _EndProcedure1
; ; EndIf
; _EndIf1:
; ; EndProcedure
; _EndProcedureZero1:
; XOr rax,rax
; _EndProcedure1:
; ADD rsp,48
; POP r15
; RET
; ;
; Debugger x64dbg
; 00000001400010E1 | 48:894C24 08 | mov qword ptr ss:[rsp+8],rcx |
; 00000001400010E6 | 41:57 | push r15 |
; 00000001400010E8 | 48:31C0 | XOr rax,rax |
; 00000001400010EB | 50 | push rax |
; 00000001400010EC | 48:83EC 28 | sub rsp,28 |
; 00000001400010F0 | 4C:8B7C24 40 | mov r15,qword ptr ss:[rsp+40] |
; 00000001400010F5 | 49:FFC7 | inc r15 |
; 00000001400010F8 | 4C:897C24 40 | mov qword ptr ss:[rsp+40],r15 |
; 00000001400010FD | 4C:8B7C24 40 | mov r15,qword ptr ss:[rsp+40] |
; 0000000140001102 | 49:83FF 03 | cmp r15,3 |
; 0000000140001106 | 7E 0B | jle len.140001113 |
; 0000000140001108 | 48:C7C0 01000000 | mov rax,1 |
; 000000014000110F | EB 0A | jmp len.14000111B |
; 0000000140001111 | EB 05 | jmp len.140001118 |
; 0000000140001113 | 48:31C0 | XOr rax,rax |
; 0000000140001116 | EB 03 | jmp len.14000111B |
; 0000000140001118 | 48:31C0 | XOr rax,rax |
; 000000014000111B | 48:83C4 30 | add rsp,30 |
; 000000014000111F | 41:5F | pop r15 |
; 0000000140001121 | C3 | ret |
; $140001122-$1400010E1=$41=65 Byte
Bitte stelle Deine Fragen, denn den Erkenntnisapparat einschalten entscheidet über das einzig bekannte Leben im Universum.
Jürgen Kulow Wersten :D_üsseldorf NRW D Europa Erde Sonnensystem Lokale_Flocke Lokale_Blase Orion-Arm
Milchstraße Lokale_Gruppe Virgo-Superhaufen Laniakea Sichtbares_Universum
Jürgen Kulow Wersten :D_üsseldorf NRW D Europa Erde Sonnensystem Lokale_Flocke Lokale_Blase Orion-Arm
Milchstraße Lokale_Gruppe Virgo-Superhaufen Laniakea Sichtbares_Universum
Re: Größe einer Prozedur
Vielleicht vergleichen mit anderen Sprachen. Aber auch dann sehr unwichtig.
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...