Ein bisschen assmebler hello_world
-
section .data ;section deklarieren msg db "Hello, world! 2",0xa,0 ;der String len equ $ - msg ;länge section .text global _start ;für ld ;@param:ecx - msg,edx - len string_ausgeben: push ebx ;Werte sichern push eax ;dito mov ebx,1 ;erster Parameter mov eax,4 ;Nummer des Systemaufrufes int 0x80 ;Kernelaufruf pop eax ;Register wiederherstellen pop ebx ret ;@param : ebx - string ;@return : eax - len strlen: push ebx ;Register sichern mov eax,0 loopm: cmp [ebx],0 je loopende inc eax inc ebx jmp loopm loopende: pop ebx ;Register wiederherstellen ret _start: ;string ausgeben (stdout) mov ecx,msg ;zweiter Parameter mov edx,len ;dritter Parameter call string_ausgeben mov ebx,msg call strlen ;und Programm beenden... mov ebx,eax ;Exitcode mov eax,1 ;Nummer des Systemaufrufes int 0x80 ;Kernelaufruf
Fehler:
hello_world2.asm:27: error: operation size not specified
Ohne strlen gings, jetzt wollt ich ein paar andere Befehle ausprobieren...
Versuche das unter Linux mit nasm zu übersetzen.
Toll, das syntax-highliting sagt mir grad, dass loope ein kommando ist
-
Inzwischen habe ich herausgefunden, dass es wohl cmp byte [ebx],0 heißen muss. Nun habe ich aber eine Endlosschleife gebaut...
Wo? Ich hab doch ein Nullbyte angehängt. Vmtl. stimmt irgend was mit der addressierung net...