Frage zum Assembler Buch
-
-
Nein. Das Buch hat den falschen Titel, es sollte vielmehr "Das x86 Buch" heißen. Du suchst wohl mehr ein Buch, was dir x86 Assembler Programmierung mit MASM oder NASM beibringt. Dafür ist es jedoch absolut das falsche Buch.
-
Hallo,
ich kenne das Buch (die Bücher, da muss noch ein grünes als Referenz der Befehle mit dabei sein).
Meine Meinung zu den Kleinigkeiten ist, nein, sie musst du nicht von Anfang an lernen. Man lernt sie vielmehr, indem man versucht, etwas lauffähiges zu programmieren.
Und ich finde, das Buch ist gar nicht falsch. Ich würde von den Tutorials die Finger lassen, sind sowieso alle zu oberflächlich.
Du merkst wahrscheinlich schon, dass es gar nicht so trivial ist, ein ganzes Programm in Assembler zu schreiben... nur so in Anlehnung an mein Kommentar im vorigen Thread.
Welchen Assembler benutzt du eigentlich, ich meine masm, nasm, GNU as?
-
Ja ich benutzt das Assembler Buch von Trutz Eyke Podschun.
@melkfett Naja will eh erstmal die Grundlagen lernen, außerdem sollten die Codes die da drinen sind mit MASM und TASM arbeiten (aber iwie funken die nur mit TASM^^)
@abc.w Ich hab mich noch net ganz entschieden, ich hab mir mal die drei großen ASM's geladen: MASM, TASM und NASM. Ich versuch momentan das ganze über RadASM zum Laufen zu bringen, TASM und MASM funken da super, doch NASM überhaupt net, das Ding will immer eine nasmw.exe und einen bin ordner im NASM Verzeichnis, den es net gibt.^^Ich werd dann wohl jetzt erstmal anfangen ein paar Dinge zum Laufen zu bringen, aber noch eine Frage:
Hat jemand zufällig Erfahrung mit RadASM? Würde nämlich gern NASM zum Laufen bringen bzw. NASM32, weil ich gelesen hab, dass nasm+RadASM die beste Kombination ist.^^
[e] Ahja das Assembler lernen läuft besser als ich dachte, ich versteh schon sehr viel, jedoch würde ich das sicherlich net so schnell nachschreiben könne, hier ein Beispiel:
.386 .model flat,stdcall option casemap:none include Basics2.inc .code start: invoke GetModuleHandle,NULL mov hInstance,eax invoke GetCommandLine invoke InitCommonControls invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT invoke ExitProcess,eax WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD LOCAL wc:WNDCLASSEX LOCAL msg:MSG mov wc.cbSize,SIZEOF WNDCLASSEX mov wc.style,CS_HREDRAW or CS_VREDRAW mov wc.lpfnWndProc,OFFSET WndProc mov wc.cbClsExtra,NULL mov wc.cbWndExtra,DLGWINDOWEXTRA push hInst pop wc.hInstance mov wc.hbrBackground,COLOR_BTNFACE+1 mov wc.lpszMenuName,OFFSET MenuName mov wc.lpszClassName,OFFSET ClassName invoke LoadIcon,NULL,IDI_APPLICATION mov wc.hIcon,eax mov wc.hIconSm,eax invoke LoadCursor,NULL,IDC_ARROW mov wc.hCursor,eax invoke RegisterClassEx,addr wc invoke CreateDialogParam,hInstance,addr DlgName,NULL,addr WndProc,NULL invoke ShowWindow,hWnd,SW_SHOWNORMAL invoke UpdateWindow,hWnd .while TRUE invoke GetMessage,addr msg,NULL,0,0 .BREAK .if !eax invoke TranslateMessage,addr msg invoke DispatchMessage,addr msg .endw mov eax,msg.wParam ret WinMain endp WndProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM LOCAL buffer[128]:BYTE ;/* our local variable for reading from the textfile, acces local variables with: addr */ mov eax,uMsg .if eax==WM_INITDIALOG push hWin pop hWnd invoke GetMenu, hWnd ; Get handle to main menu mov hMenu, eax .elseif eax==WM_COMMAND mov eax,wParam and eax,0FFFFh .if eax==IDM_FILE_EXIT jmp Exit .elseif eax==IDM_HELP_ABOUT invoke ShellAbout,hWin,offset AppName,offset AboutMsg,NULL .elseif eax==1001 invoke EnableMenuItem, hMenu, 0, MF_DISABLED or MF_BYPOSITION or MF_DISABLED invoke EnableMenuItem, hMenu, 0, MF_DISABLED or MF_BYPOSITION or MF_GRAYED .elseif eax==1002 invoke EnableMenuItem, hMenu, 0, MF_ENABLED or MF_BYPOSITION or MF_ENABLED .elseif eax==1003 Exit: invoke MessageBox,hWin,offset Quit,offset AppName,MB_YESNO .if eax == IDNO ret .endif invoke SendMessage,hWin,WM_CLOSE,NULL,NULL .elseif eax==1004 ;/* NOTE: This sample is not the best way to read and write from text, its the easiest for this demo */ ; Create a new file, overwrite any existing file. invoke CreateFile, offset szFile, GENERIC_WRITE, FILE_SHARE_WRITE, 0, CREATE_ALWAYS, 0, 0 .if eax!=INVALID_HANDLE_VALUE ;if file exists ... then mov hFile, eax ; Write our string the the file invoke WriteFile, hFile, offset WriteString, sizeof WriteString, offset WriteSize, 0 ; Close handle to file invoke CloseHandle, hFile .else invoke MessageBeep,MB_OK .endif .elseif eax==1007 ; Create a new file, overwrite any existing file. invoke CreateFile, offset szFile, GENERIC_READ,FILE_SHARE_READ, 0,OPEN_EXISTING, 0, 0 .if eax!=INVALID_HANDLE_VALUE ;if file exists ... then mov hFile, eax ; Write our string the the file invoke ReadFile,hFile,addr buffer,sizeof buffer,offset WriteSize,0 invoke MessageBox,hWin,addr buffer,offset AppName,MB_OK ; Close handle to file invoke CloseHandle, hFile .else invoke MessageBeep,MB_OK .endif .elseif eax==1008 invoke CreateDialogParam,hInstance,2000,hWin,offset NewDlgProc,FALSE .elseif eax==1006 invoke SendDlgItemMessage,hWin,1005,SB_SETTEXT,0,offset AppName .endif .elseif eax==WM_CLOSE invoke DestroyWindow,hWin .elseif uMsg==WM_DESTROY invoke PostQuitMessage,NULL .else invoke DefWindowProc,hWin,uMsg,wParam,lParam ret .endif xor eax,eax ret WndProc endp NewDlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM mov eax,uMsg .if eax==WM_INITDIALOG .elseif eax==WM_COMMAND mov eax,wParam mov edx,eax shr edx,16 and eax,0FFFFh .if edx==BN_CLICKED .if eax==2001 invoke SendMessage,hWin,WM_CLOSE,NULL,NULL .endif .endif .elseif eax==WM_CLOSE invoke EndDialog,hWin,NULL .else mov eax,FALSE ret .endif mov eax,TRUE ret NewDlgProc endp end start
-
ich kann deine frage aufgrund mangelnder erfahrung mit radasm leider nicht beantworten, möchte aber an dieser stelle nochmal auf yasm als alternative hinweisen

-
sothis_ schrieb:
ich kann deine frage aufgrund mangelnder erfahrung mit radasm leider nicht beantworten, möchte aber an dieser stelle nochmal auf yasm als alternative hinweisen

Danke, aber ich schätze, dass ich in Zukunft MASM und/oder NASM verwenden werde

-
Ist das Beispiel wirklich aus dem oben genannten Buch? Kann mich irgendwie nicht erinnern... vielleicht verwechsele ich da irgendwas. Ist nämlich eine reine WinAPI-Applikation für Windows. Ist auch egal... viel Spass damit.
-
abc.w schrieb:
Ist das Beispiel wirklich aus dem oben genannten Buch? Kann mich irgendwie nicht erinnern... vielleicht verwechsele ich da irgendwas. Ist nämlich eine reine WinAPI-Applikation für Windows. Ist auch egal... viel Spass damit.
Ne, das oben ist net von dem Buch, wäre zu schön um wahr zu sein.
Das Beispiel hab ich von einem MASM-Example, wollte damit nur sagen, dass ich den Code eigentlich schon verstehe, aber wahrscheinlich net selber schreiben kann.^^
[e] Im Buch steht leider nur so Zeug:DATA SEGMENT WORD 'DATA' Msg DB 13,10,'Hallo, Welt!',7,13,10,'$' DATA ENDS CODE SEGMENT WORD 'CODE' ASSUME CS:CODE, DS:DATA Start: mov ax,DATA mov ds,ax mov dx,OFFSET Msg mov ah,009h int 021h mov ah,04Ch int 021h CODE ENDS END Start(lässt sich leider nur mit TASM assemblieren, obwohl im Buch steht, dass es auch mit MASM geht, wahrscheinlich meinte er damit nicht die Version 9, sondern eher die Version 6.^^)
-
In dem Buch wird doch erstmal auf de ersten 500 Seiten bis ins kleinste Detail der ganze x86 Kram durchgekauft mit LTD und GTD und dem ganzen descriptor Krempel etc. Fande ich für einen totalen Newbie nicht sehr hilfreich. Das checkt kein Mensch, wenn er nicht vorher Bücher über Arbeitsweise von Prozessoren gelesen hat. Und wer will sich diesen ganzen Intel Mist auch schon freiwillig antun...Wenn ich mich jetzt richtig erinner, war in dem Buch auch alles vollkommen durcheinander und man musste ständig hin und her blättern, also ich war damals nicht sehr begeistert!!
-
melkfett schrieb:
In dem Buch wird doch erstmal auf de ersten 500 Seiten bis ins kleinste Detail der ganze x86 Kram durchgekauft mit LTD und GTD und dem ganzen descriptor Krempel etc. Fande ich für einen totalen Newbie nicht sehr hilfreich. Das checkt kein Mensch, wenn er nicht vorher Bücher über Arbeitsweise von Prozessoren gelesen hat. Und wer will sich diesen ganzen Intel Mist auch schon freiwillig antun...Wenn ich mich jetzt richtig erinner, war in dem Buch auch alles vollkommen durcheinander und man musste ständig hin und her blättern, also ich war damals nicht sehr begeistert!!
Genau so ist es, zum Glück hab ich noch andere Literatur zum Thema Assembler und ein paar gute Webseiten.
Naja meine Frage wäre somit beantwortet.
