Entwickler-Ecke
Off Topic - ASM-Code kann mir das mal einer erläutern?
Neidhard von Reuental - Fr 12.12.03 16:59
Titel: ASM-Code kann mir das mal einer erläutern?
:?:
hi ich habe hier einen beispielcode für einen trainer vor mir liegen aber blicke irgendwie nicht richtig durch.
kann mir mal jemand erklären was der code genau macht?
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99:
| .586p GetBase macro Reg call $+5 pop Reg sub Reg,$-1 endm
Code segment use32 org 0
dd offset End_of_file dw 1 ; Version dd End_of_header ; Size of header dd offset Selections dd offset Selections_Text dd offset ID_List dd offset Entry dd 0 ; res1 dd 0 ; res2 db 0 ; Master Enable
End_of_header equ $
Entry:
; ; this code will be called after the game is loaded but before ; it is launched , it should be able to check for Pal/NTSC version ; and if multi xbe files is used in the game. ;
mov edi,010114h ; xbe Time and Date cmp dword ptr [edi],03DBF9447h jne Exit
; ; Get base of this start module location ;
; GetBase ebp ; no need, ebp point to this start module location
cld ; ; is credit trainer enabled ; cmp [Sel_Credits+ebp],0 je Exit mov al,0ebh mov edi,0105fb1h ; jmp
stosb
Exit:
ret
ID_List label dword dd 04b4e0013h ; Frogger Beyond id dd 0
Selections label byte
Sel_Credits db 0 Sel_Noreload db 0
Selections_Text label word dd offset Text_Menu dd offset Text_Info
dd offset text_credits ; dd offset text_noload
dd 0
Text_Menu db 'Frogger Beyond +1',0 Text_Info db 'Trainer By EvoX Team :-)',0 db 0 ; End of info
text_credits db 'Unlimited Lives',0 ;text_noload db 'No reload',0
End_of_file equ $
Code ends
end |
das für mich wichtigste ist was ab "entry" geschieht. der code davor bleibt immer der gleiche.
Chatfix - Fr 12.12.03 17:43
Welche Sprache ist das?
Anonymous - Fr 12.12.03 17:49
@chatfix: Assembler
Raphael O. - Fr 12.12.03 17:49
wie schon im Titel steht ist das Assembler...
und falls du die Kommentare meinst: die sind Englisch :P :mrgreen:
oder meinst du was ganz andres??
CenBells - Fr 12.12.03 18:49
hallo
ich probier es mal
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| mov edi,010114h cmp dword ptr [edi],03DBF9447h jne Exit cld cmp [Sel_Credits+ebp],0 je Exit mov al,0ebh mov edi,0105fb1h ; jmp stosb Exit: ret |
Gruß
Ken
Chatfix - Fr 12.12.03 18:58
aso, sah ohne die delphitags bzw generell so komisch aus...
ich wusste nicht das ASM die abk. für assambler ist, man lernt ja nie aus...
Neidhard von Reuental - Sa 13.12.03 10:03
hat mir schon stück weitergeholfen
"stosb" ist irgend wie nen lückenfüller
mega thx :)
AndyB - Sa 13.12.03 13:53
| Neidhard von Reuental hat folgendes geschrieben: |
| "stosb" ist irgend wie nen lückenfüller |
Ich würde es eher als Store String Byte, wobei das String hier nicht als Zeichenkette zu verstehen ist, sondern als Array of Byte/Char.
stosb schreibt den in
al stehenden Wert an die Speicheradresse
ds:[edi] und erhöht danach
edi
| Zitat: |
| [edi] bedeutet der tatsächliche inhalt |
[edi] liefert dir den Wert, der an der Speicheradresse
edi liegt.
[edi] in Pascalschreibweise wäre: edi^
cld setzt dir Richtung für die stosX Befehle. Ist das direction-Flag gelöscht (cld = clear direction flag), wird edi durch stosX erhöht, sonst (std = set direction flag) dekrementiert. Man sollte nach einem Aufruf von std die Richtung wieder mit cld herstellen, da viel Code sich darauf verlässt.
| Zitat: |
| cmp [Sel_Credits+ebp],0 // hier vergleicht der code den inhalt von SEL_Credits + ebp mit 0 |
Der Satz ist zweideutig. Hier wird der Inhalt der Speicheradresse, die durch Sel_Credits+EBP Adressiert wird mit 0 verglichen.
| Zitat: |
mov edi,010114h // hier schreibt er den wert von edi an adresse 010114h
mov al,0ebh //schreibe den inhalt von al an adresse 0ebh
mov edi,0105fb1h ; jmp //schreibe den inhalt von edi an 0105fb1h |
Beides ist falsch. MOV kopiert den Wert rechts in das Register links.
Man merke: Unter MASM/TASM werden Speicherstellen immer mit [ ] angesprochen. Das [ ] entspricht also dem Dereferenzieren mit ^ unter Pascal.
CenBells - Sa 13.12.03 15:16
| AndyB hat folgendes geschrieben: |
Beides ist falsch. MOV kopiert den Wert rechts in das Register links. |
Ja ja, alter besserwisser *G* :wink: Ich habe nur mein beschränktes Assemblerwissen hervorgekramt. Beim MC68000 ist es allerdings so, wie ich geschrieben hab. Da wird der links nach rechts kopiert. Hab ich extra gerade nochmal nachgeschlagen. :wink:
Gruß
Ken
AndyB - Sa 13.12.03 17:09
Beim NASM wird auch links nach rechts kopiert aber eben nicht beim Microsoft Macro Assembler (MASM) und Borland Turbo Assembler (TASM).
Neidhard von Reuental - Sa 13.12.03 19:21
hab geschaft was ich machen wollte. danke für eure hilfe.
mein asm-wissen beruht nur auf bruchstücke meiner c64-zeit :roll:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!