| |
|
|
- Seite 1 - |
|
Frank Abbing | Hallo,
sollte der eine oder andere einen interessanten Profan-Assembler Code schreiben, werd ich den natürlich gerne mit die das XPIA Paket aufnehmen. |
|
|
| |
|
|
|
| |
|
- Seite 1 - |
|
Michael Dell | Datei- Kopieren & Datei- Anhängen
[box:057332201c]Achtung!!! - XPIA erzeugt nur den Source (LAST.ASM & LAST.DEF) zum erzeugen der DLL wird MASM32v8.2 SP2 benötigt![/box:057332201c] KompilierenMarkierenSeparieren {$Clq}
Declare FC_FileIn$,FC_FileOut$,FC_Erg&,FA_FileIn$,FA_FileOut$,FA_Erg&
FC_FileIn$ = "TEST1.DAT"
FC_FileOut$ = "TEST2.DAT"
FA_FileIn$ = FC_FileIn$
FA_FileOut$ = FC_FileOut$
Cls
Print ("Kopiere " + FC_FileIn$ + " nach " + FC_FileOut$ + ". Bitte Warten...")
ASMSTART fCopy
Parameters Addr(FC_FileIn$),Addr(FC_FileOut$)
Return FC_Erg&
Local fHndl1 :DWORD
Local fHndl2 :DWORD
Local InCnt :DWORD
Local OutCnt :DWORD
Local Count :DWORD
Local GesCnt :DWORD
Local BuffAdd :DWORD
Start:
mov Count, 983040
mov BuffAdd, alloc(Count)
invoke exist, para1
jz Ende
invoke exist, para2
jz Weiter1
invoke SetFileAttributesA, para2, 32
invoke SetFileAttributesA, para2, 128
invoke DeleteFileA, para2
Weiter1:
mov GesCnt, 0
mov fHndl1, fopen(para1)
mov fHndl2, fcreate(para2)
Weiter2:
mov GesCnt, fseek(fHndl1,GesCnt,0)
fseteof fHndl2
mov InCnt, fread(fHndl1, BuffAdd, Count)
mov OutCnt, fwrite(fHndl2, BuffAdd, InCnt)
mov eax, GesCnt
add eax, InCnt
mov GesCnt, eax
mov eax, OutCnt
sub eax, Count
jz Weiter2
fclose fHndl1
fclose fHndl2
Ende:
free BuffAdd
Xor eax, eax
ASMEnd
Print
Print "Taste..."
WaitKey
Print ("Füge " + FC_FileIn$ + " zu " + FC_FileOut$ + " hinzu. Bitte Warten...")
ASMSTART fApp
Parameters Addr(FA_FileIn$),Addr(FA_FileOut$)
Return FA_Erg&
Local fHndl1 :DWORD
Local fHndl2 :DWORD
Local InCnt :DWORD
Local OutCnt :DWORD
Local Count :DWORD
Local GesCnt :DWORD
Local GesCnt2 :DWORD
Local BuffAdd :DWORD
Start:
mov Count, 983040
mov BuffAdd, alloc(Count)
invoke exist, para1
jz Ende
invoke exist, para2
jz Ende
mov GesCnt, 0
mov GesCnt2, 0
mov fHndl1, fopen(para1)
mov fHndl2, fopen(para2)
;fseteof fHndl2
mov GesCnt2, fseek(fHndl2,0,FILE_END)
Weiter2:
mov GesCnt, fseek(fHndl1,GesCnt,0)
mov GesCnt2, fseek(fHndl2,GesCnt2,0)
mov InCnt, fread(fHndl1, BuffAdd, Count)
mov OutCnt, fwrite(fHndl2, BuffAdd, InCnt)
mov eax, GesCnt
add eax, InCnt
mov GesCnt, eax
mov eax, GesCnt2
add eax, OutCnt
mov GesCnt2, eax
mov eax, OutCnt
sub eax, Count
jz Weiter2
fclose fHndl1
fclose fHndl2
Ende:
free BuffAdd
Xor eax, eax
ASMEnd
Print
Print "Taste zum Beenden..."
WaitKey
End
Benötigte zusätzliche Includes (Pfade Anpassen!):[box:057332201c]include c:masm32includemsvcrt.inc include c:masm32macrosmacros.asm includelib c:masm32libmsvcrt.lib[/box:057332201c] Korrektur am: 11.10.05 |
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 09.10.2005 ▲ |
|
|
|
|
| Hallo Michael, sieht ja sehr interessant aus, dein letztes Beispiel. Die vorigen bestanden ja meist nur API-Aufrufen per Makro (invoke). Wie lange hast Du gebraucht, ASM soweit zu lernen, würde mich ja auchmal ransetzen ASM zu lernen. Bisher hab ich immer vor den ersten Erfolgen abgebrochen |
|
|
| |
|
|
|
| ASM lernt man eigendlich an einem einzigen Tag.
Die wichtigsten Finessen hat man dann so nach einer Woche drauf.
Danach feilt man nur noch am Stil.
ASM ist absolut die einfachste Sprache - man muß halt nur Jonglieren können.
Salve. |
|
|
| |
|
|
|
Michael Dell | Richtig,
is nicht soo kompliuiert wies aussieht. Mein Problem ist eher, nicht die oft logischer wirkende Syntax von Hochsprachen mit der direkteren von Assembler zu verwechseln. Am meisten lern ich aus Macros und den Sourcen für die Libs.
Hier gibts Basis- Beispiele: [...]
Und hier die berühmte Interrupt- Liste von Ralf Brown: [...] |
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 09.10.2005 ▲ |
|
|
|
|
| @M.Dell Nicht schon wieder , hab mir schon ein Assemblerbuch gekauft, das nur auf DOS und Interrupts eingeht. Ich habe kein DOS und ich möchte nur ASM für 32-Bit, also FLAT erlernen. Kann die Beispiele für DOS ja noch nicht mal testen. Gibts den nichts für 32-Bit only. Nur ne Anleitung für die Adressierungsarten und die ganzen anderen Befehle |
|
|
| |
|
|
|
Michael Wodrich | Assembler-Anleitung vom Guru Iczelion (einfach googlen). Da ist auch irgendwo eine Übersetzung von ihm in deutsch im Netz (ICZTUTES).
Oft helfen auch die Assembler-Foren weiter.
Schöne Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 10.10.2005 ▲ |
|
|
|
|
| @TS:
32-Bit Asm heist doch eigendlich nix weiter als das Handling von:
a) Registern b) Speicherbereichen b) Stack c) Apis
Für die Registermanipulation sind Befehle wie mov add inc dec xor etc. zuständig, für die Manipulation von Speicherbereichen weist man zunächst die Adresse des Mems einem Register zu und manipuliert diesen anschließend über die [seekpos] Schreibweise, für den Stack gibts Push & Pop, und die Apis werden per Call aufgerufen nachdem man die Parameter in umgekehrter Reinfolge auf den Stack gepackt hat. (Der BackVal jeder Api landet in eax].
Das wars auch im Großen und Ganzen.
Dann gibts natürlich noch die Labels (für gotos/ jmp & Compareanweisungen) und dann kommt auch schon der highlevel-Krahm. (Macros / ifs und whiles statt cmp & cmp)
Da gibts nix groß zu lernen.
Salve. |
|
|
| |
|
|
| |
|
- Seite 2 - |
|
|
| Genau darüber, was iF schrieb, brauche ich Dokus, ohne 16-Bit Ballast. Werde trotzdem mal die dt. tuts durcharbeiten. Gibt übrigens unter: [...] ASM werde ich schon schaffen |
|
|
| |
|
|
|
Michael Dell | Hi,
dann schau mal in die MASM32 Ordner FPULIB & M32LIB dort gibts viele kleine Sourcen aus den Libs, Beispiele aus dem Leben sozusagen und ohne den ganzen 8/16-Bit Balast. |
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 10.10.2005 ▲ |
|
|
|
|
Frank Abbing | Hi.
Und les dir in der XPIA-Anleitrung meinen Crash-Kurs durch. Da lernste schon das wichtigste. |
|
|
| |
|
|
|
Michael Dell | LowWord, HighWord, LowByte & HighByte für Profan vor v7.x
Hier wird nur die DLL erzeugt! KompilierenMarkierenSeparieren {$q}
Declare IN&,ERG&
ASMSTART lWord
Parameters IN&
Return ERG&
mov ebx,para1
and ebx,65535
xor eax,eax
mov eax,ebx
ASMEND
ASMSTART lByte
Parameters IN&
Return ERG&
mov ebx,para1
and ebx,255
xor eax,eax
mov eax,ebx
jnz ENDE
add eax,1
ENDE:
ASMEND
ASMSTART hWord
Parameters IN&
Return ERG&
mov ebx,para1
shr ebx,16
xor eax,eax
mov eax,ebx
jnz ENDE2
sub eax,1
ENDE2:
ASMEND
ASMSTART hByte
Parameters IN&
Return ERG&
mov ebx,para1
shr ebx,8
xor eax,eax
mov eax,ebx
ASMEND
|
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 22.10.2005 ▲ |
|
|
|
|
Michael Dell | Profan- Programme erkennen! (16/32Bit) KompilierenMarkierenSeparieren***** Start: ISPROFANPROG.DLL *****
{$q}
Returnwerte: -2 = Dateiformat wird nicht unterstützt.
-1 = Datei nicht gefunden.
0 = ist kein Profan- Programm.
1 = ist ein Profan- Programm(32Bit).
2 = ist ein Profan- Programm(16Bit).
AsmStart IsProfanProg (Addr(File1$))
Local IPP_fH1 :DWORD
Local IPP_Dummy :DWORD
Local IPP_Haddr0 :DWORD
Local IPP_Haddr1 :DWORD
Local IPP_Buff1 :DWORD
Local IPP_Erg :DWORD
Start:
mov IPP_Haddr0, 0
mov IPP_Erg, 0
invoke exist,para1
jnz IPP_Weit
mov IPP_Erg, -1
jmp Ende
IPP_Weit:
invoke SHGetFileInfoA,para1,0,0,0,8192
.IF eax==51004750 ; Win16
mov IPP_Haddr1,112
.ELSEIF eax==67126608 ; Win32
mov IPP_Haddr1,128
.ELSE
mov IPP_Erg, -2
jmp Ende
.ENDIF
mov IPP_Buff1, alloc(11)
mov IPP_fH1, fopen(para1)
mov IPP_Dummy, fseek(IPP_fH1,IPP_Haddr1,FILE_BEGIN)
mov IPP_Dummy, fread(IPP_fH1,addr IPP_Haddr0,4)
mov IPP_Dummy, fseek(IPP_fH1,IPP_Haddr0,FILE_BEGIN)
mov IPP_Dummy, fread(IPP_fH1,IPP_Buff1,11)
invoke lstrcmpiA,SADD(" RGH-PROFAN"),IPP_Buff1
mov IPP_Dummy, eax
fclose IPP_fH1
free IPP_Buff1
.if IPP_Dummy==0
mov IPP_Erg, 1
cmp IPP_Haddr1,112
jne Ende
mov IPP_Erg, 2
.endif
Ende:
mov eax, IPP_Erg
AsmEnd (ERG&)
End
***** Ende: ISPROFANPROG.DLL *****
***** Start: Test Programm *****
Def IsProfanProg(1) ! "ISPROFANPROG.DLL","IsProfanProg" <-- Bitte Anpassen
Declare fName$,Erg1&
Cls
fName$ = "C:\IRGENDWAT\TEST.EXE" <-- Bitte Anpassen
Erg1& = IsProfanProg(Addr(fName$))
Print
Print ("Returnwert: -2 = Dateiformat wird nicht unterstützt.
-1 = Datei nicht gefunden.
0 = ist kein Profan- Programm.
1 = ist ein Profan- Programm(32Bit).
2 = ist ein Profan- Programm(16Bit).
--> " + Str$(Erg1&) + " <--")
waitinput
End
***** Ende: Test Programm *****
|
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 01.06.2006 ▲ |
|
|
|