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...


Anmelden zum Antworten