[x86 ASM] Varför gör inte mov som jag vill?

Trädvy Permalänk
Medlem
Plats
\o/
Registrerad
Aug 2004

[x86 ASM] Varför gör inte mov som jag vill?

Hej

Jag sitter och sliter med en Assembleruppgift, men det blir inte riktigt som jag tänkt mig.
Problemet är att jag använder instruktionen movl för att kopiera en adress till en buffer till tre olika variabler i rad, men värdena blir lustiga efter den första movl-instruktionen.

.data Buffer: .space 80 SPos: .word 0 # Starting position in buffer CPos: .word 0 # Current position in buffer LPos: .word 0 # Last position in buffer .text [...] movl $Buffer, SPos movl $Buffer, CPos movl $Buffer, LPos

Om jag sedan skriver ut de tre olika variablerna så har de helt olika värden, som inte stämmer. Tar jag bort de två sista movl-instruktionerna så fungerar det. Jag trodde att movl bara kopierar ett värde, dvs. att Buffer borde vara oförändrad. Har jag tänkt fel?

"The devil will find work for idle hands to do."

Trädvy Permalänk
Medlem
Plats
Laholm
Registrerad
Okt 2005

mov flyttar väl ändå saker?

ASP.NET programmerare i C#
Twitter: http://www.twitter.com/hagbarddenstore

Trädvy Permalänk
Medlem
Plats
Sverige igen
Registrerad
Mar 2002

Kanske kan det vara så att movl = move long =32 bitar men dina variabler är bara 16 bitar?

www.filipsprogram.tk - lite freeware
"Delight, herregud. Talang är bara förnamnet."

Trädvy Permalänk
Medlem
Plats
\o/
Registrerad
Aug 2004
Citat:

Ursprungligen inskrivet av Delight
Kanske kan det vara så att movl = move long =32 bitar men dina variabler är bara 16 bitar?

Ja självklart. Tack! Ett word = 16 bitar. Jag bytte ut mina words mot longs och nu fungerar det. Lustigt att inte assemblern gnäller, men den kanske bara ser en variabel utan specifik storlek? Det gäller att passa sig.

"The devil will find work for idle hands to do."