ERLEDIGT
JA
JA
ANTWORTEN
7
7
ZUGRIFFE
638
638
EMPFEHLEN
-
28.04.09 22:11 #1
- 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)
-
28.04.09 22:19 #2
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
-
29.04.09 20:59 #3
- 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?
-
29.04.09 22:20 #4
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
-
29.04.09 23:01 #5
- 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.
-
29.04.09 23:15 #6
na siehste
Alles banaler, als ich spekuliert hatte
- erledigt -
" Gehirn: ein Organ, mit dem wir denken, daß wir denken. "
Ambrose Bierce
-
Das ist kein Kompiler, eher ein Assembler.
Das kommt ganz auf die verwendete Architektur an. Es gibt auch RISC-Prozessoren.
Das ist aber schon verdammt lange her dann. Multiplizieren konnte sogar der 8086/8088 schon.
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
-
29.04.09 23:25 #8Ich kenn jmdn, der würde jezt sagen: Unwisser GeheimnisseNichts für ungut, aber Halbwissen ist immer etwas gefährlich

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
-
Edge Loop Problem
Von elstefane im Forum 3D Studio MaxAntworten: 1Letzter Beitrag: 15.01.10, 20:40 -
Assembler Problem
Von tsukasa02 im Forum Sonstige SprachenAntworten: 3Letzter Beitrag: 29.04.07, 21:52 -
XML Loop - onRelease-Problem
Von oaki im Forum Flash PlattformAntworten: 1Letzter Beitrag: 23.09.06, 20:49 -
Problem bei MP3 Loop
Von laor im Forum Flash PlattformAntworten: 7Letzter Beitrag: 03.08.05, 23:57 -
Problem mit LOOP-Musik o0
Von mydox im Forum Flash PlattformAntworten: 6Letzter Beitrag: 22.08.04, 13:37





Zitieren


Login





