C++ Ders 2[Makine Kodu]

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?

  • 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.
Eminim çoğunuzun kafasında şu soru oluştu: Peki işlemcilerin yaptığı komutlar bu kadar basitse nasıl oluyorda bilgisayarlar bu kadar karmaşık işlemleri gerçekleştiriyor?

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;
}
Ş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:

Kod:
0000110001111000
1010111010100011
0101000011001100
Bir makine kodu ile bu işlemi gerçekleştiremezsiniz. Burda yapılan 3 işlem ise :
  1. Öncelikle "a" değişkenin değeri işlemciye çekilir.
  2. daha sonra çekilen değer 1 arttırılır.
  3. En son, elde edilen yeni değer "a" değişkenine aktarılır.
Gördüğünüz gibi 3 işlem yapılması gerekir ve 3 işleminde makine kodları yukarda gördüğünüz gibi dir.
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.
 


Life Hunter

Lapis Toplayıcısı
Mesajlar
930
En iyi cevaplar
0
Beğeniler
480
Puanları
980
Arkadaş anlamamış da, 0'dan programlamaya başlayan birisi için çok karmaşık girdin :(
Şahsen 0'dan başlayana C++'da önermem ya neyse*
Bu serinin ilk dersleri daha çok bilgisayarın nasıl çalıştığı ile ilgili. Yani arkaplanda neler oluyor biz kod girince onları anlatan dersler. Zaten üniversite de bilgisayar mühendisliği bölümünde önce bu konuları anlatıyorlar. Ve öğrettikleri dilde C/C++ dır üniversite de. Yani arkadaş üniversiteye gidince demi zorluk çekecek eğer bilgisayar mühendisliği okursa?
 

GodofMilker

Nether Yerlisi
Mesajlar
2,196
En iyi cevaplar
0
Beğeniler
2,562
Puanları
6,790
Bu serinin ilk dersleri daha çok bilgisayarın nasıl çalıştığı ile ilgili. Yani arkaplanda neler oluyor biz kod girince onları anlatan dersler. Zaten üniversite de bilgisayar mühendisliği bölümünde önce bu konuları anlatıyorlar. Ve öğrettikleri dilde C/C++ dır üniversite de. Yani arkadaş üniversiteye gidince demi zorluk çekecek eğer bilgisayar mühendisliği okursa?
Hayır anlatmaya çalıştığım yeni başlayan birisi için çok karmaşık, üniversitede anlatılanı bilmiyorum, belki daha alt seviyede anlatılmıştır, ve zaten öyle bir bölüme gidecek ilgisi varsa büyük ihtimal daha önce programlamayla uğraşmıştır :C
Not: Bundan sonra açacağın konulara etiketlersen hoş olur yani :(
 

Life Hunter

Lapis Toplayıcısı
Mesajlar
930
En iyi cevaplar
0
Beğeniler
480
Puanları
980
Hayır anlatmaya çalıştığım yeni başlayan birisi için çok karmaşık, üniversitede anlatılanı bilmiyorum, belki daha alt seviyede anlatılmıştır, ve zaten öyle bir bölüme gidecek ilgisi varsa büyük ihtimal daha önce programlamayla uğraşmıştır :C
Not: Bundan sonra açacağın konulara etiketlersen hoş olur yani :(
Şöyle bir durum var, Üniversite de puanı yüksek diye bilgisayar mühendisliğini kazanan ve daha önce hiç programlama yapmamış insanlar var türkiyede. En az %60 bu durumda. Yani seni o bölüme alırken yetenek sınavı felan yapmazlar amerika değil burası.
 

GodofMilker

Nether Yerlisi
Mesajlar
2,196
En iyi cevaplar
0
Beğeniler
2,562
Puanları
6,790
Şöyle bir durum var, Üniversite de puanı yüksek diye bilgisayar mühendisliğini kazanan ve daha önce hiç programlama yapmamış insanlar var türkiyede. En az %60 bu durumda. Yani seni o bölüme alırken yetenek sınavı felan yapmazlar amerika değil burası.
Yetenek sınavı gibi bir şeyden bahsetmiyorum. Adam o bölüme girmişse ya ilgisi vardır ya da puanı yetiyordur en uygun bunu görmüştür. Her şekilde bir yatkınlığı oluyor yine programlamaya.
 

Life Hunter

Lapis Toplayıcısı
Mesajlar
930
En iyi cevaplar
0
Beğeniler
480
Puanları
980
Yetenek sınavı gibi bir şeyden bahsetmiyorum. Adam o bölüme girmişse ya ilgisi vardır ya da puanı yetiyordur en uygun bunu görmüştür. Her şekilde bir yatkınlığı oluyor yine programlamaya.
İnan bana hiç öyle değil. Bilgisayar mühendisliği türkiye de çok tercih edilen bir bölüm ama insanların programlamayı sevdiğinden değil. Adam iyi puan alıyor sınavdan. Bakıyor hangi meslekte iyi para var. Bilgisayar mühendisliğinde olduğunu öğreniyor. Hemen yazıyor 1.tercihe bilgisayar mühendisliği. Ve ya ismi hoşuna gidiyor, yazıyor bilgisayar mühendisliği. 19 yaşında 0 bilgi ile işe başlıyor. Sadece sınavları geçmek için ders çalışıyor. Onun dışında programlama ile hiç uğraşmıyor. Böyle kişiden ne beklersin? Nereden mi biliyorum? Bilgisayar mühendisliği okuyan tanıdıklarım var(tabi onlar gerçekten programlamayı seven kişiler) onların hepsine sordum sınıfınızdakilerin programlamaya ilgisi var mı diye, hepsinin verdiği cevap aynıydı. "Buradakilerin programlama ile ilgisi yok, para olduğunu düşündükleri için tercih etmişler." @GodofMilker yani anlıyacağın, Türkiyede bilgisayar mühendisliği okuyan kitlenin %60 hatta 70 i para olduğunu düşündükleri için bölüme geliyorlar. Programlamayı çok sevdiklerinden değil.
 

GodofMilker

Nether Yerlisi
Mesajlar
2,196
En iyi cevaplar
0
Beğeniler
2,562
Puanları
6,790
İnan bana hiç öyle değil. Bilgisayar mühendisliği türkiye de çok tercih edilen bir bölüm ama insanların programlamayı sevdiğinden değil. Adam iyi puan alıyor sınavdan. Bakıyor hangi meslekte iyi para var. Bilgisayar mühendisliğinde olduğunu öğreniyor. Hemen yazıyor 1.tercihe bilgisayar mühendisliği. Ve ya ismi hoşuna gidiyor, yazıyor bilgisayar mühendisliği. 19 yaşında 0 bilgi ile işe başlıyor. Sadece sınavları geçmek için ders çalışıyor. Onun dışında programlama ile hiç uğraşmıyor. Böyle kişiden ne beklersin? Nereden mi biliyorum? Bilgisayar mühendisliği okuyan tanıdıklarım var(tabi onlar gerçekten programlamayı seven kişiler) onların hepsine sordum sınıfınızdakilerin programlamaya ilgisi var mı diye, hepsinin verdiği cevap aynıydı. "Buradakilerin programlama ile ilgisi yok, para olduğunu düşündükleri için tercih etmişler." @GodofMilker yani anlıyacağın, Türkiyede bilgisayar mühendisliği okuyan kitlenin %60 hatta 70 i para olduğunu düşündükleri için bölüme geliyorlar. Programlamayı çok sevdiklerinden değil.
Programlamaya yatkın olmak için sevmek önemli demedim zaten, oradan sonuçta yeterli puan almış ki bu da yeterli seviyede matematiği (veya o bölüm her neye giriyorsa*) olduğunu gösterir. Puanı vs. nasıl bilmiyorum ama o puanı alması için o dersi anlaması lazım sonuçta, ki bu da programlamayı öğrenebileceğine uygun olduğu anlamına gelir genelde. Tabii ki seven işini daha iyi yapar ya ayrı konu.
 

Life Hunter

Lapis Toplayıcısı
Mesajlar
930
En iyi cevaplar
0
Beğeniler
480
Puanları
980
Yoksa ülkenin hali böyle mi olurdu? Bilişim
Programlamaya yatkın olmak için sevmek önemli demedim zaten, oradan sonuçta yeterli puan almış ki bu da yeterli seviyede matematiği (veya o bölüm her neye giriyorsa*) olduğunu gösterir. Puanı vs. nasıl bilmiyorum ama o puanı alması için o dersi anlaması lazım sonuçta, ki bu da programlamayı öğrenebileceğine uygun olduğu anlamına gelir genelde. Tabii ki seven işini daha iyi yapar ya ayrı konu.
Matematiği yapan herkes programlamayı sevecek diye bir şey yok. Ayrıca türkiye de öğretilen matematik matematik değil zaten. Bir kişinin matematik sınavından iyi alması onun matematiğinin iyi olduğunu göstermez? matematik nedir sence? Sadece sayılarmı? Hayır, matematik analitik düşünebilme dir aynı zamanda. Senin birine trigonometriyi öğretmeden önce, nasıl mantık kurulduğunu anlatman gerekir. Türkiyenin eğitim sisteminde ise bu durum hiç öyle değil. Matematiğin mantığı anlatılmaya çalışılmıyor matematik ezberletilmeye çalışılıyor. matematik öğretimi çok iyi olsa bile kişinin programlamayı seveceği anlamına gelmez bu. Sana soruyaim o zaman, Türkiyedeki bilgisayar mühendisliği bölümüne tercih çok fazla ama türkiyedeki bilişim sektörü berbat. Hiç iyi değiliz şu an bu sektörde. Sence neden böyle?
 

GodofMilker

Nether Yerlisi
Mesajlar
2,196
En iyi cevaplar
0
Beğeniler
2,562
Puanları
6,790
Yoksa ülkenin hali böyle mi olurdu? Bilişim

Matematiği yapan herkes programlamayı sevecek diye bir şey yok. Ayrıca türkiye de öğretilen matematik matematik değil zaten. Bir kişinin matematik sınavından iyi alması onun matematiğinin iyi olduğunu göstermez? Matematik nedir sence? Sadece sayılarmı? Hayır, matematik analitik düşünebilme dir aynı zamanda. Senin birine trigonometriyi öğretmeden önce, nasıl mantık kurulduğunu anlatman gerekir. Türkiyenin eğitim sisteminde ise bu durum hiç öyle değil. Matematiğin mantığı anlatılmaya çalışılmıyor matematik ezberletilmeye çalışılıyor. Matematik öğretimi çok iyi olsa bile kişinin programlamayı seveceği anlamına gelmez bu. Sana soruyaim o zaman, Türkiyedeki bilgisayar mühendisliği bölümüne tercih çok fazla ama türkiyedeki bilişim sektörü berbat. Hiç iyi değiliz şu an bu sektörde. Sence neden böyle?
1- Sevmekten bahsetmedim x2* :( Öğretilenin düzgün öğretilmediğini de biliyorum :( ama yine de anlamak için bir şeyler gerekiyor yine öğretileni, ki bu da az buz programlamaya hazırlık sağlıyor. Kalanı sadece çaba, sevmek veya sevmemek değil. Dersten geçmek için çaba, çok verimli bir şey değil ya neyse.
Gelişmeyişine gelince* Türkiye'de yönetim tarafından önem verilen bir sektör olmayışı. Destek olmayınca kimse de riskli yatırım yapmak istemiyor tabii ki. Doğru düzgün bilişime adanmış, Türkiye'de şirket göremedim fazla şu ana dek. Doğal olarak bu da eğitimini etkiliyor.
2- Sonuç olarak genel anlatılanlardan daha karmaşık bir anlatım. Şimdi bu şekilde burada ilkokul matematiği anlatsan ilkokullu çocuk anlayabilir. Çünkü daha anlatış biçimlerini görmemiştir. Ama ortaokul-lise matematiği anlatsan o yaştaki büyük ihtimalle anlamaz. Çünkü basit olana alışkındır, karmaşık olan itici gelebilir.
Anlatıma lafım yok sadece 0'dan başlayan birisi için karışık diyorum, biraz daha basite indirgesen, daha çok uygulamaya yönelsen daha az bilgi versen daha kolay ve yakın gelir. Ha bilgi vermeyeceksin diye bir şey de yok. Burada bir şeyi 10 cümlede açıklıyorsan 1 örnekle gösteriyorsan orada 2 örnekle gösterir 8 cümlede açıklarsın.
 

Life Hunter

Lapis Toplayıcısı
Mesajlar
930
En iyi cevaplar
0
Beğeniler
480
Puanları
980
1- Sevmekten bahsetmedim x2* :( Öğretilenin düzgün öğretilmediğini de biliyorum :( ama yine de anlamak için bir şeyler gerekiyor yine öğretileni, ki bu da az buz programlamaya hazırlık sağlıyor. Kalanı sadece çaba, sevmek veya sevmemek değil. Dersten geçmek için çaba, çok verimli bir şey değil ya neyse.
Gelişmeyişine gelince* Türkiye'de yönetim tarafından önem verilen bir sektör olmayışı. Destek olmayınca kimse de riskli yatırım yapmak istemiyor tabii ki. Doğru düzgün bilişime adanmış, Türkiye'de şirket göremedim fazla şu ana dek. Doğal olarak bu da eğitimini etkiliyor.
2- Sonuç olarak genel anlatılanlardan daha karmaşık bir anlatım. Şimdi bu şekilde burada ilkokul matematiği anlatsan ilkokullu çocuk anlayabilir. Çünkü daha anlatış biçimlerini görmemiştir. Ama ortaokul-lise matematiği anlatsan o yaştaki büyük ihtimalle anlamaz. Çünkü basit olana alışkındır, karmaşık olan itici gelebilir.
Anlatıma lafım yok sadece 0'dan başlayan birisi için karışık diyorum, biraz daha basite indirgesen, daha çok uygulamaya yönelsen daha az bilgi versen daha kolay ve yakın gelir. Ha bilgi vermeyeceksin diye bir şey de yok. Burada bir şeyi 10 cümlede açıklıyorsan 1 örnekle gösteriyorsan orada 2 örnekle gösterir 8 cümlede açıklarsın.
Genel anlatınlardan daha karmaşık bir anlatım değil. Sadece türkçe kaynaklar direk uygulama dan giriş yapıyorlar işin arka planında ne olduğunu anlatarak değil. Bu da ilk gören kişiye tuhaf gelebilir tabii ki. Yeni başlayan biri anlamakta zorlanabilir belki haklısın ama gerçekten anlamak isteyen kişi anlayacaktır. Benim de ilk okuyuşta anlayamadığım yerler oldu(ve halen bazen oluyor) Ama o yeri tekrardan daha dikkatli okuyup üzerine kafa yorunca anlayamadığım yer olmadı, ki burada öyle bir durum söz konusu değil çünkü burası forum. Kişi anlıyamadığı kısmı bana buradan sorabilir bende elimden geldiğince o kişinin anlıyacağı anlatım şeklinden anlatmaya çalışırım. Tabi programcılar ikiye ayrılır. Araştırmacı programcı ve uygulamaya önem veren programcı. Araştırmacı programcı için arka planda ne olduğunu önemlidir ama adam arka planda ne olduğunu merak etmeyip, sadece uygulama öğrenmek istiyorsa uygulamaya önem veren programcı oluyor. Uygulamaya önem veren kişiler içinde en son yazdığım dersler uygulamaya yönelik zaten.
 

Üst