Belki derlenen kodlar bildiğimiz gibi işlemiyordur!
Şöyle ki:
Eğer tek bir işaretçi ile kod yazmaya başlayıp, yığından veri çekmeye kalkarsanız assembly kodu çok kısa oluyor. Ancak bu bir dizi olursa devamı gibi başlangıç karışıyor ve nedense yığına ek bilgiler tıkılıyor! Elbette dizi kurulum işleminin basit olmasını bekleyemeyiz ama fazladan kaydedici (accumulator) neden yığına yedeklenir: '???'
'
(I) Tek İşaretçi (II) Dizi İşaretçi
================ ==================
// void main() {
push EBP push EBP
mov EBP,ESP mov EBP,ESP
sub ESP,4 sub ESP,'038h' // Yığın İşaretçisi (SP) kuruluyor...
push EBX push EBX
push EDI // '???'
xor EAX,EAX
// void * pc;
mov dword ptr -4[EBP],0 mov dword ptr -4[EBP],'EAX'
// void * [10] pcs;
mov ECX,0Ah // Dizi Boyutu ayarlanıyor...
lea EDI,-028h[EBP]
rep
stosd
'
Aslında II. programda pc işaretçisini kullanmıyorum. O satırı gizlemediğimde yukarıdaki gibi oluyor ama gizlediğimde ise aşağıdaki gibi bir assembly kodu elde ediyoruz. Tabii ki -4[EBP] adresi (BasePointer - 4) sıfırlanmıyor ve sanırım üzerine dizi yazılıyor olmalı:
'_Dmain:
push EBP
mov EBP,ESP
sub ESP,028h
push EDI
mov ECX,0Ah
xor EAX,EAX
lea EDI,-028h[EBP]
rep
stosd
pop EDI
leave
ret'
Bu koda aşağıdakine denktir ve/veya DMD ile derlenmiştir:
Alıntı:
> void main() {
> void * [10] pcs;
> }
> ```
>
--
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]