Seite 1 von 2

Assemblerschleife

Verfasst: 07.01.2005 15:08
von Martin66119
Eine Frage zum Assembler!

Wie kann man denn folgendes in Assembler schreiben!


For i= 0 To 20000000

Next i

Danke schonmal!

Martin

Verfasst: 07.01.2005 15:13
von MVXA
Für Assembler bist du hier etwas im falschem Forum, denoch hier eine Antwort aus dem PB ASMOutput:

Code: Alles auswählen

; For i= 0 To 20000000
  MOV    dword [v_i],0
_For1:
  MOV    eax,20000000
  CMP    eax,dword [v_i]
  JL    _Next2
; 
; Next i 
_NextContinue2:
  INC    dword [v_i]
  JMP   _For1
_Next2:

Verfasst: 07.01.2005 15:45
von Kyoko12
Das geht leichter!:

Code: Alles auswählen

mov ecx, 2000000 ;oder ne andere Zahl
dein_label:
;mache hier was du willst
loop


Verfasst: 07.01.2005 19:59
von Helle
Hände weg von loop! PB quittiert das schon mal mit "error: relative jump out of range", obwohl das Sprungziel eigentlich sogar "short" wäre.
Immer
DEC (e)cx
JNZ l_marke
verwenden!

Verfasst: 07.01.2005 20:18
von Laurin
Oder kürzer:

Code: Alles auswählen

XOR AX, AX
MOV CX, 100 ; oder was auch immer
REP INC AX
Als Ergebnis müsste AX = 100 rauskommen. Die SChleifenkonstruktion eignet sich aber nur für Operation, die nur ein Mnemoric benötigen.


Greetz Laurin

Verfasst: 07.01.2005 21:31
von Kyoko12
mein, es kommt 101 raus,
xor ax, ax
macht ax zu 1
or ax, ax
macht ax zu 0

und ich rede ja nciht von PB, er sagt ASM-Schleifen, nicht Schleifen im PB InlineASM.

Verfasst: 07.01.2005 21:50
von Deeem2031
Kyoko12 hat geschrieben: xor ax, ax
macht ax zu 1
or ax, ax
macht ax zu 0
Seit wann das denn ? :?

xor ax, ax
macht ax zu 0
or ax, ax
macht ax zu ax (was sehr sinnvoll ist ;) )

Verfasst: 07.01.2005 22:47
von Kyoko12
seit immer schon, oder warum meinste setzt man beim OS-Dev bei der bootloaderentwicklung statt
mov ax, 0

or ax, ax ein

nur demit der code kleiner wird und er in einem Sektor passt?

Verfasst: 07.01.2005 23:37
von Helle
XOR ax,ax setzt natürlich ax auf Null; mit OR ax,ax wird GETESTET, ob ax
Null ist (verändert aber nicht ax). OR ax,ax ist schneller als CMP ax,0.

Verfasst: 08.01.2005 00:23
von Deeem2031
Helle hat geschrieben:XOR ax,ax setzt natürlich ax auf Null; mit OR ax,ax wird GETESTET, ob ax
Null ist (verändert aber nicht ax). OR ax,ax ist schneller als CMP ax,0.
Genauso seh ich das auch.
Und wer "mov ax, 0" durch "or ax, ax" ersetzt, hat keine Ahnung.. :P