Assembler Befehls übersicht / schleifenin Assembler

JOat
Hatt jemand irgendwo ne koplette überischt über die ganzen Assemblerbefehle (mov,add,subb,....usw)


und ausserdem such ich noch ne beschreibung wie schleifen in assembler aufgebaut sind (for while do.... usw.)


THX
ThiefMaster
Aus einem Assembler-Tutorial:

Zitat:
*-- 11. Loops (Schleifen)

Was sind Schleifen ? Wenn ihr schonmal in einer höheren Sprache programmiert habt,
kennt ihr sicherlich 'do while' oder 'loop until' schleifen. Wenn nicht, dann erklär
ich euch was eine Schleife macht: Eine Schleife führt einen bestimmten Codeabschnitt
solange aus, bis eine vorher festgelegte Bedingung erfüllt ist. Bei uns verwenden wir
den Register CX als Zähler für die Schleife. Wir setzen also in CX den Wert, der
die Anzahl der Durchläufe enthält. CX wird mit jedem Durchlauf automatisch um eins
vermindert.

------(LoopIT.asm)------
.model tiny
.code
org 100h

START:
mov cx, 3h ;wir setzen den Zähler auf 3
Schleife:
lea dx, MSG1 ;das gleiche wie mov dx, offset MSG1
mov ah, 9h
int 21h
loop schleife ;zurück zum Label Schleife


ENDE: ;schönes Label oder ?

mov ah,4ch ;4Ch zum Beenden
INT 21h ;Beende !

MSG1 db 'Schleife ..1,2,3.. ',10d,13d,'$' ;Ein String..

END START ;hier ist das ganze zuende..
----------ende-----------

Hiermit zeigen wir den Text 3 mal.. Man kann Schleifen auch ineinander
Verschachteln, man muss dann allerdings darauf achten, das man CX speichert (push/pop)
Flamesword
Du hast die rep-Schleife vergessen :

Zitat:
-- 12. Repeat it...

Was aber, wenn man nur ein Commando wiederholen will ?
Lohnt sich der Aufwand mit loop ? Nein, dafür haben wir nämlich das REP-Kommando.
Auch hier setzen wir wieder die Anzahl in CX und schreiben dann hinter das REP
unseren Befehl, den wir mehrfach ausführen wollen... Augenzwinkern

--8<---(REP.asm)------
.model tiny
.code
org 100h

START:
mov cx, 3h ;wir setzen den Zähler auf 3
rep call write ;wiederhole den call zu write 3 mal..

ENDE: ;schönes Label oder ?

mov ah,4ch ;4Ch zum Beenden
INT 21h ;Beende !

Write:
lea dx, MSG1 ;das gleiche wie mov dx, offset MSG1
mov ah, 9h
int 21h
ret


MSG1 db 'Schleife ..1,2,3.. ',10d,13d,'$' ;Ein String..

END START ;hier ist das ganze zuende..
ciruZ
Ih, is ja wiederlich, ist ja MASM (Microsoft Assembler). Damit kann man doch noch nichtmal ne flat binary machen, oder? Naja, ich nehm NASM.

Ich poste mal ein einfaches Hallo Welt in ner Schleife für Linux (interupt 80h oder auch im GNU As 0x80)

In Intel Sytax (z.B. für NASM):
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
section text
msg   db    'Hallo Welt',0Ah
msg   equ   $ - msg
global _start

_start:
   mov   eax,   4
   mov   ebx,   1
   mov   ecx,   msg
   mov   edx,   len
   int   80h

   jmp   _start

AT&T Syntax (z.B. für GAS):
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
.data
msg:
   .ascii "Hallo Welt\n"
   len = . - msg
.text
.global _start

_start:
   movl   4,   %eax
   movl   1,   %ebx
   movl   $msg,   %ecx
   movl   $len,   %edx
   int   $0x80

   jmp   _start


Du siehst also, schleifen sind in beiden Syntaxen ziemlich gleich.

Wenn du vorher ein CMP verwendet hast kannst du jmp ersetzen durch:
- jz > Nur springen, wenn es zutrifft
- jne > Nur springen, wenn es nicht zutrifft

Wenn du sonst noch Infos brauchst melde dich, z.B. Infos wie du es machst wenn du unter keinem Betriebssystem bist, also z.B: dein eigenes OS codest, da ist es nicht viel anders.

// Edit:
Ach ja, über loop etc. schleifen machen find ich zum kotzen großes Grinsen ...
Zumal das von der Speed glaub ich auch nicht grade das wahre ist Augenzwinkern
ThiefMaster
Der Code ist für TASM Zunge raus
ciruZ
Zitat:
Original von ThiefMaster
Der Code ist für TASM Zunge raus

Dann ist der genau so schlimm wie MASM Zunge raus ...
NASM [KEIN Tippfehler] gefällt mir da gleich viel bessa großes Grinsen ...

MASM = Microsoft Assembler
NASM = Netwide Assembler

Gibt beide und das is blöd wenn man sich vertippt großes Grinsen
Chris Hunter
hier gibts na ganz gute sammlung von ASM zeugs, dort sollten auch alle asm befehle mov push pop nop evt zu finden sein...

http://www.tu-chemnitz.de/informatik/RA/educ/mop/
jap
kommts nicht drauf an welche prozessorfamilie?
ihr mischt hier eure sachen so durcheinander....

gängiger befehlssatz für die 8051 µcontroller-familie:

http://home.ea.rbs.schule.ulm.de/~goe/download/down.html

gruss
ciruZ
jap: Ich glaub die meisten hier reden vom Intel 80386 - 80686 Prozessoren Augenzwinkern
Klar, könnte auch Sparc oder PPC sein, aber die meisten haben ja leider Intel Prozessoren, von daher sagt man eigentlich nur noch Assembler an Stelle von ia32 Assembler. smile