Autor Thema: Stack funktioniert nicht (rmode)  (Gelesen 1674 mal)

Cjreek

  • Beiträge: 104
    • Profil anzeigen
Gespeichert
« am: 03. June 2009, 23:25 »
Hi,

Ich bins mal wieder  :-D

Ich hab irgendwie ein Problem mit meinem Stack.... Beim poppen bekomm ich nur scheiße zurück -.-

Ich zeig euch mal etwas Code:

    mov ax, 0    ; etwas ungünstig aber andere segmente gehn auch nicht
    mov ss, ax
    mov sp, 0xFFFF

jetzt der eigentliche Code:
mov dx,1
mov al,1
call floppy_read
; ...

floppy_read:
xor cx,cx
mov es,cx     
mov bx,0x7E00

push dx
call lba_to_chs
; ...
ret

lba_to_chs:
    pop ax
;   Hier kommt nur müll raus ==> 0x7C5A statt 0x0001
;   ...
    ret

 :?
« Letzte Änderung: 03. June 2009, 23:27 von Cjreek »
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Krendor

  • Beiträge: 19
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 03. June 2009, 23:38 »
Hihi, den Fehler hatte ich auch schon gemacht.  :-D

Bei einem call wird die Rücksprungadresse auf den Stack gelegt.
Den Rest kannst du dir ja zusammen reimen...

Viele Grüße
Sebastian

Jidder

  • Administrator
  • Beiträge: 1 624
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 03. June 2009, 23:40 »
0x7C5A ist die rücksprungadresse. Die wird von dem call auch auf den Stack gelegt.

Du kannst also mit pop nicht (brauchbar) auf den Parameter zugreifen, weil diese im Weg ist.

Stattdessen solltest du indirekt über sp auf den Stack zugreifen. In [sp] sollte die Rücksprungadresse liegen, und in [sp + 2] dann dein Parameter.
Dieser Text wird unter jedem Beitrag angezeigt.

Cjreek

  • Beiträge: 104
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 03. June 2009, 23:45 »
Argh -.-^^

Danke für die Aufklärung... 0x7C5A kam mir schon irgendwie verdächtig vor. Hat mich irgendwie an die Startadresse meines Codes erinnert  :roll:

Auf die Idee mit der Rücksprungadresse bin ich natürlich nicht gekommen  :-P
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Cjreek

  • Beiträge: 104
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 03. June 2009, 23:51 »
Sorry für den Doppelpost..

Aber seltsamerweise funktioniert [sp+2] nicht. allerdings auch nur beim stackpointer. Erhalte beim compilieren folgende Meldung von nasm

Zitat
boot.asm:39: error: invalid effective address
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Jidder

  • Administrator
  • Beiträge: 1 624
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 03. June 2009, 23:59 »
Jo, dann musst du sp in ein anderes Register laden.  bp bietet sich dafür an, weil es ebenfalls relativ zum Stacksegment (SS) adressiert.
Dieser Text wird unter jedem Beitrag angezeigt.

 

Einloggen