Salih hocam orada yaptığımız işlemi adım adım anlatıyorum.
*OPERAND adreslerini alıp bir dizi içerisinde saklıyoruz.
*Rh.newOp ile byte dizimize veri yazıyoruz.
**Orada yazdığımız veri operand ve operand değeri
***Operand = OP.LOAD (1 yani)
***Operand verileri: Operand 2 parametr alıyor. Bunlar sırasıyla (Register, veri). Operandın veriyi yazacağı yer REG0 yani 1.register bu kodlarda registerlar ile alakalı birşey yok sadece olduğu takdirde işlemlerin ne kadar süreceğini test etmek maksatlı yazdım. Sürekli ++ yapılması ve adresi diziden okumamız hızı olumsuz etkiliyor. Registeri yazdık şimdi ise veriyi yazıyoruz. Esas olay burada önce veri türü yani DT.STRING (2) daha sonra veri string olduğu için string uzunluğu (Daha sonra veriyi tekrar elde etmek için lazım) ve stringin içindeki her charı sırasıyla yazıyoruz. Tabi bunların hepsini byte a çevirerek yapıyoruz.
**Daha sonradan bu byte dizisini compile işlemimiz için kayıt ediyoruz. (Burada yorum satırı)
**Ve byte dizisi işlenmeye başlanıyor. Okunan veri operand yani 1 diziden operand adresi alınıyor ve o adrese gidiliyor. Operand kendisine 2 veri geleceğini biliyor (Başka operanda bir tane gelir başkasına hiç gelmez veriler zaten bu bilinerek yazılıyor) ve ona göre de verileri okuyor. Önce veri türü (string) okunuyor. Sonra ise byte dizisinde char dizisinin başladığı adresten itibaren dilimleme yapılıyor ve uzunluk için de char dizisi başlamadan önceki veri okunuyor o da bu yazdığım kodlarda 8 oluyor. Sonradan cur içerisinde saklanan adresimizin değeri uzunluk için 1, char dizimizin uzunluğu için de direk adresteki uzunluk okunup arttırılıyor.
Salih hocam umarım karışık anlatmamışımdır. Anlamadığınız bir yer varsa tekrar anlatabilirim.
Ali Hocam daha önceki yaptığım yapıyı tamamlamak istedim :) Emplace olayına da geleceğim. Yazdığınız dersi anlamaya çalışıyorum :) Ama okuduğumu anlamayla ilgili bir sıkıntım var :)
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]