Assemblerschleife

Für allgemeine Fragen zur Programmierung mit PureBasic.
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Assemblerschleife

Beitrag von Martin66119 »

Eine Frage zum Assembler!

Wie kann man denn folgendes in Assembler schreiben!


For i= 0 To 20000000

Next i

Danke schonmal!

Martin
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag 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:
Bild
Benutzeravatar
Kyoko12
Beiträge: 45
Registriert: 22.11.2004 20:56

Beitrag von Kyoko12 »

Das geht leichter!:

Code: Alles auswählen

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

Benutzeravatar
Helle
Beiträge: 566
Registriert: 11.11.2004 16:13
Wohnort: Magdeburg

Beitrag 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!
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag 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
Benutzeravatar
Kyoko12
Beiträge: 45
Registriert: 22.11.2004 20:56

Beitrag 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.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag 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 ;) )
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Kyoko12
Beiträge: 45
Registriert: 22.11.2004 20:56

Beitrag 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?
Benutzeravatar
Helle
Beiträge: 566
Registriert: 11.11.2004 16:13
Wohnort: Magdeburg

Beitrag 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.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag 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
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Antworten