tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
638
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    engelmarkus engelmarkus ist offline Mitglied Brokat
    Registriert seit
    Sep 2007
    Beiträge
    473
    Guten Abend zusammen!
    Ich habe hier ein sehr merkwürdiges Problem, ich weiß nicht, woher das kommt.
    In meinem Code habe ich eine kleine Schleife, mit "loop" gibts eine Access Violation, mit einer "selbstgeschriebenen" Schleife, die meiner Meinung nach exakt dasselbe tut, funktioniert es.

    Code :
    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
    
    section .data
      titel db 'Hallo du!', 13, 10, 0
      titelL equ $ - titel-1
     
    section .code
      global main
      main:
        push byte 1            ; Verschiebung
        push word titelL-2  ; Länge
        push dword titel   ; Text
        call CaesarVerschluesselung
        ....
      ret
     
    CaesarVerschluesselung:
      push ebp
      mov ebp, esp
     
      mov esi, [ebp+8]  ; Text
      mov edi, esi
     
      mov cx, [ebp+12] ; Länge
     
      mov dl, [ebp+14] ; Verschiebung
      xor dh, dh
     
      @schleife:
       lodsb
     
       add ax, dx
     
       stosb
     
    ;   dec cx
    ;   cmp cx, 0
    ;  jnz @schleife
    loop @schleife
     
     mov esp, ebp
     pop ebp
    ret 7

    So wie er im Moment oben ist, funktioniert der Code nicht. Wenn man stattdessen das "loop" auskommentiert und dafür das mit cmp und jnz dazunimmt, geht es.
    Geändert von engelmarkus (28.04.09 um 22:13 Uhr)
     

  2. #2
    Avatar von Marschal
    Marschal Marschal ist offline Großer Enumerator
    Registriert seit
    May 2008
    Ort
    Lohfelden (bei Kassel)
    Beiträge
    363
    WElchen Kompiler benuzt du? Kann sein, dass deiner Noch die älteren Assembler befehle hat und das loop für ihn neu ist.
     


    " Gehirn: ein Organ, mit dem wir denken, daß wir denken. "
    Ambrose Bierce

  3. #3
    engelmarkus engelmarkus ist offline Mitglied Brokat
    Registriert seit
    Sep 2007
    Beiträge
    473
    Ich benutze den nasm Version 2.06rc2 unter Windows Vista.
    Was heißt, dass er noch die älteren Assembler-Befehle hat? Gibts von loop verschieden Versionen oder so?
     

  4. #4
    Avatar von Marschal
    Marschal Marschal ist offline Großer Enumerator
    Registriert seit
    May 2008
    Ort
    Lohfelden (bei Kassel)
    Beiträge
    363
    Hm.. tut mir leid, mit deinem Kompiler kenn ich mich nicht aus. Nun es ist so, das man heute deutlich mehr Asm Operationen hat als früher. Bin mir nicht sicher welche, Aber ich mein heute kann man den Processor auch multiplizieren lassen, wass man früher nur durch schleifen lösen konnte

    Es kann auch sein, dass deine ALU (oder was genau den Asm code umrechnet) älter ist, und deswegen den loop befehl nicht kennt. Als tip, versuch mal das gleiche auf einem anderen Rechner zu starten (der auch evtl etwas neuer ist)

    Mich würd das auch interessieren
     


    " Gehirn: ein Organ, mit dem wir denken, daß wir denken. "
    Ambrose Bierce

  5. #5
    engelmarkus engelmarkus ist offline Mitglied Brokat
    Registriert seit
    Sep 2007
    Beiträge
    473
    Ich hab den Fehler gefunden.
    Ich programmiere ja unter Windows, das heißt, ich hab 32-bit breite Register. Und "loop" dekrementiert dann auch ecx, nicht wie ich angenommen hatte, cx.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    Function CaesarVerschluesselung
      mov esi, [ebp+8]
      mov edi, esi
      
      movzx ecx, word [ebp+12]
      movzx dx, byte [ebp+14]
      
     .schleife:
      lodsb
      
      add ax, dx
      
      stosb
     loop .schleife
    EndFunction 7

    So funktioniert es dann doch mit loop.
     

  6. #6
    Avatar von Marschal
    Marschal Marschal ist offline Großer Enumerator
    Registriert seit
    May 2008
    Ort
    Lohfelden (bei Kassel)
    Beiträge
    363
    na siehste Alles banaler, als ich spekuliert hatte- erledigt -
     


    " Gehirn: ein Organ, mit dem wir denken, daß wir denken. "
    Ambrose Bierce

  7. #7
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    Zitat Zitat von Marschal Beitrag anzeigen
    Hm.. tut mir leid, mit deinem Kompiler kenn ich mich nicht aus.
    Das ist kein Kompiler, eher ein Assembler.

    Zitat Zitat von Marschal Beitrag anzeigen
    Nun es ist so, das man heute deutlich mehr Asm Operationen hat als früher.
    Das kommt ganz auf die verwendete Architektur an. Es gibt auch RISC-Prozessoren.

    Zitat Zitat von Marschal Beitrag anzeigen
    Bin mir nicht sicher welche, Aber ich mein heute kann man den Processor auch multiplizieren lassen, wass man früher nur durch schleifen lösen konnte
    Das ist aber schon verdammt lange her dann. Multiplizieren konnte sogar der 8086/8088 schon.

    Zitat Zitat von Marschal Beitrag anzeigen
    Es kann auch sein, dass deine ALU (oder was genau den Asm code umrechnet) älter ist, und deswegen den loop befehl nicht kennt. Als tip, versuch mal das gleiche auf einem anderen Rechner zu starten (der auch evtl etwas neuer ist)
    Der Assembler-Quellcode wird vom Assembler in Maschinencode umgesetzt, nicht von der ALU. Auch LOOP konnte der 8086/8088 schon, es ist also unwahrscheinlich dass irgendeine heutige x86-Desktop-CPU mit diesem Opcode nichts anfangen kann...

    Nichts für ungut, aber Halbwissen ist immer etwas gefährlich

    Grüße, Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  8. #8
    Avatar von Marschal
    Marschal Marschal ist offline Großer Enumerator
    Registriert seit
    May 2008
    Ort
    Lohfelden (bei Kassel)
    Beiträge
    363
    Nichts für ungut, aber Halbwissen ist immer etwas gefährlich
    Ich kenn jmdn, der würde jezt sagen: Unwisser Geheimnisse
    Nun gut Habe versucht das was von meinem Schulwissen über Assembler noch übrig war mit reinfliesen zu lassen. Ich schätze die Sache mit dem Multiplizieren, hatte ich nun etwas durcheinander gebracht Wir hatten damals mit kleineren Robotern gearbeitet, und deren CPU's konnten nix
     


    " Gehirn: ein Organ, mit dem wir denken, daß wir denken. "
    Ambrose Bierce

Ähnliche Themen

  1. Edge Loop Problem
    Von elstefane im Forum 3D Studio Max
    Antworten: 1
    Letzter Beitrag: 15.01.10, 20:40
  2. Assembler Problem
    Von tsukasa02 im Forum Sonstige Sprachen
    Antworten: 3
    Letzter Beitrag: 29.04.07, 21:52
  3. XML Loop - onRelease-Problem
    Von oaki im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 23.09.06, 20:49
  4. Problem bei MP3 Loop
    Von laor im Forum Flash Plattform
    Antworten: 7
    Letzter Beitrag: 03.08.05, 23:57
  5. Problem mit LOOP-Musik o0
    Von mydox im Forum Flash Plattform
    Antworten: 6
    Letzter Beitrag: 22.08.04, 13:37