Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Assembly Language ile ödev (?)


xaty

Öne çıkan mesajlar

Hakkında en ufak bir fikrim olmayan bu konuda bir ödevim var :( Bu yüzden nereden nasıl başlayacağımı bilemedim ve sizlere danışmak istedim.

Soru aşağıdaki şekilde;
said:
In 64-bit assembly language write a recursive function that calculates the N-th term of a series:

f (n) = f (n-3) + f (n-2), n> 2, f (0) = 1, f (1) = 1, f (2) = 7

In the main program, calculate the terms 3 to 15 and write the result. Use advanced instructions and registers of the chosen 64-bit architecture.


Aslında anlamadığım sorduğu şey değil de bunu benden nasıl yapmamı istediği. 0,1,2 değerlerini vermiş, geri kalanını 15'e kadar istiyor.
Ama 64-bit assembly language ile bunu nasıl yaparım? 64-bit assembly language nedir? Nerden öğrenilir? vs.vs..
Link to comment
Sosyal ağlarda paylaş

64-bit registerları kullanın demiş.

assembly bilmiyorum ama memory celleri gibi işlemcide register celleri var çok çok hızlı olan. onlar 64-bit mimarilerde farklı boyutta veya yapıda bulunuyor, onları 64-bit'e uyumlu olarak kullanarak yaz demiştir muhtemelen.

bu arada register c'deki registerlar gibi olabilir direk, onlar da aynı ama işlemcide canavar gibi hızlı çalışan celller.
Link to comment
Sosyal ağlarda paylaş

Queen said:

abi işte bi de matematik problemi var işin içinde. f recursive fonksiyon o yüzden f(0), f(1) ve f(2)'yi f(3)ü f(5)i falan hesaplamak için kullanıcaksın


Bir burasını anlamıştım zaten, sorun olan kısmı 64-bit assembly language ile nasıl yazılacağı..
Link to comment
Sosyal ağlarda paylaş

Üstünden 2 sene geçti ama hatırlayabildiğim kadarıyla yardım ediyim. Bizim derste kullandığımız MIPS assembly language'dı (32 bit sanırım). 32 bitle 64 bit arasında kodlama olarak nasıl farklar vardır, ne kullanırsın bilmem. Orda mesela 32 registerın 16'sı geçici işlemler içindi, biri bulunduğun frame, biri bulunduğun stack gibi gidiyodu. Farklarını çok bilmem ama benim kullandığım koddan bir örnek veriyim sana.

lui $3 10 //3. registera 10 sayısını yükle (memoryden yüklenmediği için lui yani load upper intermediate)
lui $4 10 //4. registera 8 yükle
add $5,$3,$4 //4 ve 3. registerları topla 5. registera koy

Şimdi bide if yerinede branch diye bişey vardı

beq $3,$4, adres //3 ve 4. registerlar eşitse "adres" yazan adrese gidiyo yoksa altından devam ediyodu.

Aklıma gelirse kalan şeyleri de yazarım ama bunları bile zor hatırladım yani :D
Link to comment
Sosyal ağlarda paylaş

Sağolun, 3 aşağı 5 yukarı bir izlenimim oldu en azından. İnternette arama yaptığımda bile doğru düzgün bulamıyorum, değişik kodlarla ön eklerle birlikte çıkıyor bir sürü şey. Bir kaç gün içerisinde asistandan kaynak istiyim en iyisi, gerçi büyük ihtimalle inteneti kaynak kullanabilirsin gibi bir şey duyacağım ondan da :(
Link to comment
Sosyal ağlarda paylaş

El-Barto anlatmis bir kismini da, kullandigin mimariye gore cok sey degisiyor. Biz 8-bit'lik kullanmistik; dogrudan memory adresine istedigin seyi kaydedemiyordun. Accumulator vardi; add dedikten sonra sonucu daima accumulator'a atiyordu. Herhangi bir sayiyi dogrudan accumulator'a ekleyebiliyordun. Sonra accumulator'daki sayiyi herhangi bir adrese kaydedebiliyordun.

Hani onun elle yazdigi komutlar var ya: lui, add gibi iste onlarin da memory'de tutuldugunu dusun. Sonra tum bu degiskenlerin de adreslerinin oldugunu dusun.
0001 lui
0010 add
0100 10
0101 8
0110 18

programin ilk hali asagidaki gibiydi:
lui $3 10 //3. registera 10 sayısını yükle (memoryden yüklenmediği için lui yani load upper intermediate)
lui $4 10 //4. registera 8 yükle
add $5,$3,$4 //4 ve 3. registerları topla 5. registera koy

Isi tamamen adreslere doktugun zaman
0001 0100 1010
0001 0101 1000
0010 0100 0101 0110
gibi bir sey cikiyor ortaya. Simdi sen bunu recursive yapacagin icin, gidip toplami 0110'a koymayacaksin da 0100'a koyacaksin. Skip if true gibi bir komut da olmasi gerek. Eger accumulator istenen degere esitse, o zaman durmasini sagliyorsun; degilse, add adimina (0010) geri donduruyorsun, boylece her seferinde 8 ekliyor (tabi bunu hocanin verdigi fonksiyon'a gore yazman gerek)
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...