Gå til innhold

Anbefalte innlegg

Jeg ønsker å sette opp en stack, og har lest at instruksjonen LSS er tingen å bruke.

Har prøvd å finne noen eksempler i praksis av denne instruksjonen, men jeg har ikke funnet noe så langt.

 

Jeg arbeider i realmode.

Hvis jeg har 2 konstanter STACK_SEGMENT og STACK_POINTER.

Jeg ønsker å sette %SS til STACK_SEGMENT og %SP til STACK_POINTER.

 

Som dere sikkert skjønner bruker jeg AT&T / GAS syntax, og ikke nasm.

 

lss     ($STACK_SEGMENT),%sp    

Denne kompilerer, men her får jeg bare med STACK_SEGMENT, hvordan får jeg med STACK_POINTER?

 

Og har jeg forstått instruksjonen rikig? Vil den nå kopiere minneaddressen STACK_SEGMENT .., eller kopierer den en 32bits verdi som BEFINNER SEG i minneaddressen vi oppgir som source?

Endret av Drogin
Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet+9871234

Kjenner ikke LSS. Generelt kunnskap om ASM for Intel prosessoren:

  1. Meget lett å tildele en stakk.

Skulle vel ikke være vanskeligere å implementere en stakk peker. En stakk er jo et minneområde og dermed skulle en stakk peker være en minnereferanse, en segment adresse + en offset i Intel's 88 terminologi.

 

Merk at Intels steinaldergamle 88 prosessor er 86 seriens minste felles multiplum, så optimalisering for denne prosessoren gir vanligvis svært effektiv kode også for senere prosessorer i 86 serien (prosessorene ihvertfall i 86 serien er med andre ord bakover kompatible). Det kan også gi effektiv kode for noen andre prosessorer. Dette bør vel være relevant for deg siden du bruker real mode. Alle intel prosessorer før 386 opererte kun i real mode om jeg ikke husker aldeles feil.

 

Det aller viktiste / vanskeligste ved assembler programmering slik jeg ser det er å vite hvor man er.

Lenke til kommentar

LSS gjør slik jeg har forstått det å lese inn en 32bit minne-addresse og kopierer high og low word inn i %ss og %sp/%esp, dvs setter opp en stack slik du nevner.

 

Sliter bare litt med å klare å spesifisere det 32bits minneområdet på en lovlig måte.

Lenke til kommentar

Og har jeg forstått instruksjonen rikig? Vil den nå kopiere minneaddressen STACK_SEGMENT .., eller kopierer den en 32bits verdi som BEFINNER SEG i minneaddressen vi oppgir som source?

Det siste er riktig. Fant en webside som beskrev lss, men finner den ikke igjen. Står vel sansynlig vis i intel sin manual.

 

Er forsåvidt ikke nødvendig å benytte lss.

 

inf3151? :)

Lenke til kommentar

Og har jeg forstått instruksjonen rikig? Vil den nå kopiere minneaddressen STACK_SEGMENT .., eller kopierer den en 32bits verdi som BEFINNER SEG i minneaddressen vi oppgir som source?

Det siste er riktig. Fant en webside som beskrev lss, men finner den ikke igjen. Står vel sansynlig vis i intel sin manual.

 

Er forsåvidt ikke nødvendig å benytte lss.

 

inf3151? :)

Stemmer det...inf3151 :p

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...