2010-04-06 6 views
11

Bir bayt'ı doğrudan Intel Pentium'un yığınına itemeyeceğinizi öğrendim, bunu bana açıklayan var mı lütfen? esp kaydının kelime adreslenebilir olduğu için bana verilenNeden bir baytı Pentium IA-32 üzerindeki bir yığına zorlamak mümkün değil?

nedenidir (veya, bu bizim modelinde varsayımdır) ve bir "dahi ele" olmalıdır. Bazı 32-bit ikili sayıların değerinin düşürülmesini kayıtların hizalanmasıyla karıştırmazdım, ama görünüşe göre yeterince anlamadım.

Bazı NASM testlerini denedim ve bir değişken (bite db 123) bildirir ve onu yığının üzerine itirsem, esp 4 (bu 32-bit itmiş olduğunu gösterir) ile azalır.

test.asm:: 10: hata: Desteksiz olmayan 32 bit ELF taşınma

Her Kelime Ama "itme bayt ısırık" (değişken adları benim seçim için üzgün) bir tür hata ile sonuçlanır Bu sıkıntılı dönemde bilgelik çok takdir edilecektir. Bunlardan herhangi birindeki naifliğim için çok üzgünüm.

cevap

4

Onun:

The address-size attribute of the stack segment determines the stack pointer size (16, 32 or 64 bits). The operand-size attribute of the current code segment determines the amount the stack pointer is decremented (2, 4 or 8 bytes).

In non-64-bit modes: if the address-size and operand-size attributes are 32, the 32-bit ESP register (stack pointer) is decremented by 4. If both attributes are 16, the 16-bit SP register (stack pointer) is decremented by 2.

Kaynak: http://www.intel.com/Assets/PDF/manual/253667.pdf

pg. 4-320 Vol. 2B

sadece da ilginç bir okuma kılavuzunu yığınlar bölümü olduğunu belirtmek için istediği düzenleme, ayrıca yığın segmenti oluşturmak açıklayacaktır. Bu mantıklı olsa

http://www.intel.com/Assets/PDF/manual/253665.pdf

Bölüm 6.2

+0

Çok bilgilendirici, ancak maalesef şu andaki bilgimle kavrayabildiğimin üzerinde. –

+0

@Tim - Anlaşılabilir. Belki de hızlı bir okumaya değer. –

+0

Bekleyin, bekleyin. Her bellek konumu 32 bit genişliğindedir, bu nedenle bir değeri zorlarsanız, yığının 4 bayt kadar azalması gerekir, çünkü 4 * 8 32 bittir ve eğer 2 ile azalırsa, o zaman denenmemiş ve denenmemiş olur Oku, evreni mi yıkıyor? Bu doğru mu? Eğer öyleyse, puanları aldınız, PDF harika (2. bir). –

0

yığın işaretçisi olabilir (bir iyileştirmesi nedenlerle) 4B hizalanmış olmalıdır -> dört (ve, bundan dolayı, son 2 bit sahip sıfır) ile bölünebilir olması gerekir.

+0

, Yully cevabı baştan aşağıya açıklıyor. Yine de teşekkürler :) –

8

Bazı durumlarda onun işi yapmak için yığın işaretçisi değil mümkün yapacağız. örneğin, bir byte'ı yığının üzerine iten ve ardından başka bir işlevi çağıran bir işleviniz olduğunu söyleyebilirsiniz. Arama, yığının üzerine yanlış hizalanmış bir geri dönüş adresi yazmayı dener ve sonuçta bir hataya neden olur. Eğer ne yapmak istediğini

+0

Mükemmel, teşekkür ederim :) –

0

Eğer başlangıç ​​bit pozisyonlarına geri döndürülmüş kadar kayıt içine bir seferde 8 bit yerleştirerek, her 32 bit bellek konumu sayesinde döndürmek için biraz rotasyon opcodes kullanmaktır. Şimdi 32 bitlik kayıtta yan yana dizilmiş 4 adet 8 bitlik bir miktar olmalıdır. şimdi onu yığının üstüne it ve işin bitti. yığını nasıl oluşturulduğuna bağlı olarak

+0

Üzgünüm, bu bana pek bir şey ifade etmiyor. –

İlgili konular