Life Hunter
Lapis Toplayıcısı
- Mesajlar
- 930
- En iyi cevaplar
- 0
- Beğeniler
- 480
- Puanları
- 980
C++ eğitim serisinin 2. kısmına hepiniz hoş geldiniz. Bu ders makine kodu nedir biraz ondan bahsedeceğiz.
Makine Kodu:
Öncelikle bilmemiz gereken şey, Programları çalıştıran merkezi işlemcilerdir(CPU). Baktığınızda işlemcinin gerçekleştirebileceği işlemler oldukça basit yapıdadır. Örneğin bir önceki dersteki kodumuzda cout komutu gönderdik ve ekrana bir değer çıktı. Halbuki işlemci böyle bir komutu anlamaz, böyle kompleks bir işi yapacak tek bir komutu yoktur işlemcinin. Bir sürü komutunu birleştirip cout komutunun gerçekleştirdiği işlemi gerçekleştirebilir ama tek bir komutla bu tarz komplike işlemleri gerçekleştiremez. Mimarisi gereği çok basit bir yapıda tutulmuştur işlemci. En azından komutları çok basit yapıdadır. Peki bu basit komutlar neler?
Bu basit işlemler birleştirile birleştirile daha kompleks işlemler elde edilir. Yeni elde edilen kompleks işlemler birleştirilerek de çok daha kompleks işlemler elde edilir.
Aslında bu bilgisayar dünyasının katmanlı mimarisini gösteriyor.Biz bu katmanlı mimarinin bayağ üstündeyiz C++ kullandığımız için. Mimarinin en altında ise makine kodu var.
İşlemciler mimarileri gereği sadece ikili sayı sistemi(0 ve 1)ile gönderilen komutları anlarlar. Yani onlara "int" gibi bir komut gönderme şansınız yok. Ve ya karakter gönderme şansınız yok, ve ya 5 sayısını gönderme şansınız yok. Bu tür şeyleri göndermenin tek yolu ikili kod olarak göndermenizdir.(0 ve 1) Çünkü ikili sayı sistemi ile çalışıyor elektronik devreler. Hangi komut olursa olsun, işlemciye ikili sayı sistemi ile gönderilmesi gerekir. Örneğin toplama işlemi yaptıracaksınız, toplama işleminin ikili bir kod(0 ve 1) karşılığı vardır ve işlemciye o ikili kodu göndermeniz gerekir.
Dolasıyla işlemciler yüksek seviyeli diller(C,C++,Java vb.) ile yazılmış komutları işletmezler.
Şu C++ kodunu işlemciye direk olarak yollasanız işlemci hiçbir şey anlamaz. Zaten bu şekilde yollayamazsınız çünkü işlemciye ulaştıracağınız veri yoluda ikili sayı sistemi ile çalışıyor.
Makine Kodunun tam olarak tanımını yapmak gerekirse:
İşlemcilere ikili sayı sistem ile gönderilen tüm komutlara makine kodu adı verilir.
Diyelimki elimizde a++; adlı bir kod var. Değişkenlere ilerde değineceğiz ama kodun ne yapığını anlatmam gerekirse. "a" adlı bir değişken var ve "a" değişkeninin değeri 1 artırılıyor. Mesela "a" nın değeri 5 ise 6 oluyor, 1 ise 2. "a" nın değeri her şey olabilir ona değer vermek size kalmıştır.(ileride bu konuya detaylı olarak değineceğiz)
Basit bir kod olarak gözüküyor ama bu işlemi gerçekleştirecek makine kodu 3 tanedir:
Bir makine kodu ile bu işlemi gerçekleştiremezsiniz. Burda yapılan 3 işlem ise :
tabii ki bu 16 bitlik olası makine kodu karşılığıdır normalde 0 ve 1 kombinasyonu böyle değildir. Ben sadece görsellik olsun diye yazdım.
Her işlemcinin gerçekleştirebileceği belirli sayıda komut bulunmaktadır. Tabi eski işlemcilerin komutları çok azdı çok basit işlemler yapabiliyorlardı, Şu an ki işlemciler eskilere göre çok daha fazla işlem yapabiliyor ama genede bunlar yüksek seviyeli dillere göre çok basit işlemler.
Bir işlemcinin gerçekleştirebileceği bütün komutlara komut seti adı verilir. Özellikle araştırdığım kadarıyla üniversitede bilgisayar mühendisliği bölümünün mikro işlemciler dersinde komut seti çok kullanılan bir kavrammış. Ayırca işlemcilerin çıktığı zaman bu komut setlerini içeren dökümanlar çıkar ki programcılar ona göre komutlarını yollayabilsin.
Bu ders bu kadar anlamadığınız kısım varsa sorabilirsiniz.
Makine Kodu:
Öncelikle bilmemiz gereken şey, Programları çalıştıran merkezi işlemcilerdir(CPU). Baktığınızda işlemcinin gerçekleştirebileceği işlemler oldukça basit yapıdadır. Örneğin bir önceki dersteki kodumuzda cout komutu gönderdik ve ekrana bir değer çıktı. Halbuki işlemci böyle bir komutu anlamaz, böyle kompleks bir işi yapacak tek bir komutu yoktur işlemcinin. Bir sürü komutunu birleştirip cout komutunun gerçekleştirdiği işlemi gerçekleştirebilir ama tek bir komutla bu tarz komplike işlemleri gerçekleştiremez. Mimarisi gereği çok basit bir yapıda tutulmuştur işlemci. En azından komutları çok basit yapıdadır. Peki bu basit komutlar neler?
- Hafızanın bir hücresinden başka bir hücresine veri taşıma(mov)
- İki sayıyı toplama(add),Çıkarma(sub),Çarpma(mul) vb. Yani aritmetik işlemler yapma.
Bu basit işlemler birleştirile birleştirile daha kompleks işlemler elde edilir. Yeni elde edilen kompleks işlemler birleştirilerek de çok daha kompleks işlemler elde edilir.
Aslında bu bilgisayar dünyasının katmanlı mimarisini gösteriyor.Biz bu katmanlı mimarinin bayağ üstündeyiz C++ kullandığımız için. Mimarinin en altında ise makine kodu var.
İşlemciler mimarileri gereği sadece ikili sayı sistemi(0 ve 1)ile gönderilen komutları anlarlar. Yani onlara "int" gibi bir komut gönderme şansınız yok. Ve ya karakter gönderme şansınız yok, ve ya 5 sayısını gönderme şansınız yok. Bu tür şeyleri göndermenin tek yolu ikili kod olarak göndermenizdir.(0 ve 1) Çünkü ikili sayı sistemi ile çalışıyor elektronik devreler. Hangi komut olursa olsun, işlemciye ikili sayı sistemi ile gönderilmesi gerekir. Örneğin toplama işlemi yaptıracaksınız, toplama işleminin ikili bir kod(0 ve 1) karşılığı vardır ve işlemciye o ikili kodu göndermeniz gerekir.
Dolasıyla işlemciler yüksek seviyeli diller(C,C++,Java vb.) ile yazılmış komutları işletmezler.
Kod:
int main()
{
cout << "Merhaba" << endl;
}
Makine Kodunun tam olarak tanımını yapmak gerekirse:
İşlemcilere ikili sayı sistem ile gönderilen tüm komutlara makine kodu adı verilir.
Diyelimki elimizde a++; adlı bir kod var. Değişkenlere ilerde değineceğiz ama kodun ne yapığını anlatmam gerekirse. "a" adlı bir değişken var ve "a" değişkeninin değeri 1 artırılıyor. Mesela "a" nın değeri 5 ise 6 oluyor, 1 ise 2. "a" nın değeri her şey olabilir ona değer vermek size kalmıştır.(ileride bu konuya detaylı olarak değineceğiz)
Basit bir kod olarak gözüküyor ama bu işlemi gerçekleştirecek makine kodu 3 tanedir:
Kod:
0000110001111000
1010111010100011
0101000011001100
- Öncelikle "a" değişkenin değeri işlemciye çekilir.
- daha sonra çekilen değer 1 arttırılır.
- En son, elde edilen yeni değer "a" değişkenine aktarılır.
tabii ki bu 16 bitlik olası makine kodu karşılığıdır normalde 0 ve 1 kombinasyonu böyle değildir. Ben sadece görsellik olsun diye yazdım.
Her işlemcinin gerçekleştirebileceği belirli sayıda komut bulunmaktadır. Tabi eski işlemcilerin komutları çok azdı çok basit işlemler yapabiliyorlardı, Şu an ki işlemciler eskilere göre çok daha fazla işlem yapabiliyor ama genede bunlar yüksek seviyeli dillere göre çok basit işlemler.
Bir işlemcinin gerçekleştirebileceği bütün komutlara komut seti adı verilir. Özellikle araştırdığım kadarıyla üniversitede bilgisayar mühendisliği bölümünün mikro işlemciler dersinde komut seti çok kullanılan bir kavrammış. Ayırca işlemcilerin çıktığı zaman bu komut setlerini içeren dökümanlar çıkar ki programcılar ona göre komutlarını yollayabilsin.
Bu ders bu kadar anlamadığınız kısım varsa sorabilirsiniz.