Assembler - Unerklärlicher Schwerer Rechenfehler

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
FosJonas
Beiträge: 121
Registriert: 12.11.2008 19:31

Assembler - Unerklärlicher Schwerer Rechenfehler

Beitrag von FosJonas »

Guten Tag,

Habe mal wieder ein Problem mit Assembler in Purebasic:

Folgender Code:

Code: Alles auswählen

Global Tabelle.i = AllocateMemory(3600)
For X = 0 To 3600
  PokeB(Tabelle+X,X)
Next

!Push rax
!Push r12
!Push AX
!mov AL,r12b
!Push AX
!mov AL,r11b
!Push AX

!mov rax,[v_Tabelle]
;!mov r12b,[rax+r12]
!Or AX,AX
!mov AL,r11b
;!div r12b
!mov r12b,AL

!Pop AX
!mov r11b,AL
!Pop AX
!mov r12b,AL
!Pop AX
!Pop r12
!Pop rax
Funktioniert zwar, aber sobald ich die auskommentierten 2 Zeilen hinzunehme (bzw. nur eine davon) gibt es einen Schweren Rechenfehler bei der For Schleife.
Nur ist das für mich völlig unerklärlich, ich Sichere ja alle Variablen, und selbst wen ich das nicht täte wäre die For Schleife ja vor dem Einfluss des Assembler codes und müsste doch damit gar keinen Zusammenhang haben?

Bin hierbei ziemlich ratlos was den Fehler erzeugt, hoffe das jemand von euch weiter weis.

Danke im Vorraus für eure Hilfe.
Purebasic 5.10 | Kubuntu 12.04 (64 bit) | Opera 12.01 | Nvidia GT 9800
Xubuntu 12.04 (64 bit) | Intel HD Graphis (Onboard)
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Assembler - Unerklärlicher Schwerer Rechenfehler

Beitrag von Thorium »

Was ist das denn für ne komische Pushorgie da? Die Register brauchst du nicht sichern. Ausserdem werden immer 8 Byte unter x64 auf den Stack gepusht, push ax sollte nicht verwendet werden. Überhaubt solltest du davon absehen 16bit Registerzugriffe zu verwenden, da diese viel langsamer als 8, 32 oder 64 bit Zugriffe sind. 16 Bit wird nicht mehr benötigt und wird daher nicht mehr optimiert von den CPU-Herstellern.

Und der Fehler scheint mir ziemlich offensichtlich:

Code: Alles auswählen

;!mov r12b,[rax+r12]
Ich sehe dich nirgendwo r12 mit einem Offset füllen.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
FosJonas
Beiträge: 121
Registriert: 12.11.2008 19:31

Re: Assembler - Unerklärlicher Schwerer Rechenfehler

Beitrag von FosJonas »

Danke für die Schnelle Hilfe,

Soweit ich weiß muss man Register doch sichern wen man vorher und nachher Purebasic befehle nutzt, das war in diesem verkürzten code zwar nicht der Fall aber im richtigen Code schon.

Dachte wen ein Register sofern nicht anders angeben immer 0 ist, da lag ich wohl falsch habe ich korregiert.

Gut ich werde statt 16 bit die 32bit Register nutzen, die machen in der tat weniger Probleme als die 16bit.

Damit wären meine Probleme wohl gelöst, danke für die Hilfe.
Purebasic 5.10 | Kubuntu 12.04 (64 bit) | Opera 12.01 | Nvidia GT 9800
Xubuntu 12.04 (64 bit) | Intel HD Graphis (Onboard)
Antworten