c++ giriş (bölüm 1)

Cansiz

New member
Program=verilen bilgilerin bilgisayarda işlenmesidir.Bİlgisayar'a verilen emirler dizisidir.Belirli komutlar dizisinin bilgisayarda işlenmesini sağlayan yazılımdır.
Programlama dilleri üç çeşittir;
1.)Makine dili;
ikili sayma sisteminde yazılan programlardır.
001101
101010 printf writeln
100000
010001 scanf readln

2.)Assembly;
micro işlemciye ulaşan dildir.Her mikro işlemci için farklı bir assembly dili kullanılır.
3.)Yüksek seviyeli diller
;bilgisayarın ne yapmak istediğini doğru komutlarla verilirse bilgisayar çeşitli türden problemlerin çözümünü bulabilir.Yüksek seviyeli bilgisayar donanımından bağımsızdır.

fortron,visual basic,delphi,visual c.....
Yüksek seviyeli dilleri bilgisayarda çalıştırabilmek için compile(derlemek)edilir.
Programı adım adım düşünmek!!!;;
1.)Başla,
2.)ewe git,
3.)bilgisayarı açtın mı:eek:
4.)ewetse hh'ye gir,
5.)hayırsa 3'e dön,
6.)son.

Program geliştirme metodu
(1).problemi anlama problemin çözümü için hangi verilerin elde olduğu ve istendiği ii bilinmelidir.programcı programı açık olarak tanımlamalıdır.programcı herzman programı anlıomuyum sorusunu anlamalıdır.
(2)Çözüm metodu geliştirme(analiz)
problemi iyice anladıktan sonra çözümü için bir metod geliştirmek gerekir.bu metod daha önce çözülmüş olan porblemlere benzetilebilir yada yeni bir yönetim geliştirebilir.
(3)Tasarım
Somut adımlar belirlenir.programın çözümünde kullanılan komutların basamak gibi birbiri ardında sıralanmış olan argonikma (akış şeması) oluşturulur.
Akış şeması programın en önemli parçasıdır.
(4)Programı kodlama argonikma programa dönüştürülmelidir.Argonikmayı takip ederek komut yazarız.
(5)Program çalıştırılır.Hata warsa düzeltilir.
(6)Program test edilir.

tektek kendi ellerimle yazdım sorularınız warsa hemen cwp verebilirim!!!:):)
 

Cansiz

New member
yooo bir insanın bölümü bilgisayar olmasın!!:):)
eli alışıo bide msnde chat yapma alışkanlığı olmasın ya!:):)
başka soru war mı:eek::)
harbi kendim yazıom ya onlarla uğraşmaktan hh'de açılan konulara bakamıom!!!:)
 

Cansiz

New member
bu sadece alıntıdır! emertcan için açalım!

emertcan' Alıntı:
eyw saolasn da su Assembly e younluk verebilrsek ei olr.Örenmem laz :(
Assembly Nedir?

Makinanın anlayabildiği tek dil 0 1 dir. zamanında abiler delikli kağıtla programlama yaparken demişlerki hocam bu çok kasıyor. biraz bu işi kolaylaştıralım makina dilini yazmışlar. makina dili çok hızlıdır. çünkü yapılan tek işlem hex i bin e çevirmek. Assembly ise biraz daha insancıl olsun :) kafayı yicez abi deyip te makina dilinde yazılmış bir dildir. Fakat Assembly ile Makina dili arasındaki ilişki diğer diller ile makina dili arasındaki ilişkiden farklıdır. örneğin: "cmp al" nin karşılığı "3c" dir. diğer dillerde dilin türüne göre interpreter(yorumlayıcı) veya compiler(derleyici) hatta bazılarında her ikiside kullanılıyor olmasına karşılık makina diliyle "01h" nasıl "00001b" ediyorsa "cmp al" da Assemblyde "3c" eder. buda asseblynin önemsenmeyecek kadar kadar azbir hız farkıyla çalışmasını sağlar.

Makina Dili
a. Makina Dili 00001011 11010111 11010110 ....................... İkili Sistem
b. Makina Dili DF AC 12 1B 3C C8 D6 7B C8...................... Onaltılı Sistem
c. Mnemonic(Assembly Dili)
MOV AX,65
ADD BX,AX
.
.
.

Assembly Dili'nin Makina Dili ile ilişkisi bu şekildedir. Yukarıda yazılı kodlar sadece görsel bir fikir verebilmek için yazılmıştır. Çalışır program parçaları değildir.

Assembly'yi Neden Hâlâ Kullanmalıyız?

Üst düzey programlama dillerinde yazdığımız programlar platform'a bağlı (Windows, Linux, Unix vs.) çalışırlar. Biz eğer hızlı yazılım geliştirip hedefimiz bu işten para kazanmaksa üst düzey diller bu iş için idealdir. Ne zaman ki biz bu platformlardan uzaklaşalım kendimize özgü birşeylerimiz olsun dersek o zaman bu üst düzey diller bizim bu ihtiyacımıza cevap veremiyecektir. İşte bu nokta bizi yalnız bırakmayan dillerden biri C diğeride Assembly'dir. C dili Assembly diline göre insana daha yakındır. İyi de madem öyle C takılalım neden ısrarla Assembly?

C dilinde olmayan bir özelliği C diline kazandırmak istiyorsanız Assembly Dilinden faydalanırsınız. Eğer Assembly bilmiyorsanız C dilinin size sağlayacağı bir çok avantajdan mahrum kalırsınız. Eğer ikisinide bilmiyorsanız bağımsız program yazamazsınız. İşte bu iki dili diğerlerinden ayıran en belirgin fark budur.

Bu yüzden biz Assembly'yi hâlâ kullanmalıyız.

Nedir Bu Hacker, Cracker Muhabbeti?

Dikkatinizi çekmiştir etrafımızda mantar gibi ben hackerim diyen tipler dolaşmaya başladı. Bu konuyu uzatmadan kısaca geçmek istiyorum. Harbi Assembly ve C programcılarının kasıp yazdığı disassembler editörleri vb. ni internetten indirip kullanarak program kırıpda ben crackerim diye ortada dolaşanlar hiç kusuru bakmasınlar oturup kendiniz yazmadığınız sürece hiçbişeysiniz. Dallanma komutlarınının NOT'ını almakla da bu işler olmuyor. Bilmem ne trojanını kullanayım, x wormunu mail atayım fake mail göndereyim vs. ile de hacker olunmuyor. Ben 15 yıl oldu bilgisayarla tanışalı ve kaynaşalı 11 yaşımdı (1991) programcı belgemi aldığımda fakat hacker de değilim cracker da. Şu güzelim terimleri ağızlara sakız yapmayın.(Bu işin ciddiyetinin farkına varın).

Register Nedir?

Kelime anlamı olarak alırsak karşımıza Kayıtedici kelimesi çıkar. Bu kelime bu iş için gerçekten çok idealdir. Kayıt ederler. Tabi ki kafalarına göre değil. Cpu programının ve bizim programımızın istediği şeyleri kayıt eder. Daha önce 1 bitlik verinin hafızada nasıl tutulduğundan bahsetmiştik, bkz.(flip-flop konusu).

Register Çeşitleri Nelerdir?

Genel Amaçlı Registerler;

AX : A(Accumulator)X :

En genel amaçlı registerdir. Ortada ne kadar angarya iş varsa bu regiter'e kaydederiz. Eskiler bu register'e baş merkep adını takmıştır. Asıl iş bu register üzerinde döner. Diğerleri AX'e işini yapmasında yardımcı olur.

BX: B(Base)X:

Taban alınacak adresler bu registerde saklanır. Buraya koyacağınız bir taban adres üzerine koyacağınız sayıkadar sonrasındaki (veya öncesindeki) bilgiyi al derken işte bu registerde tuttuğumuz taban değerden faydalanırız.
CX: C(Counter)X:

Sayaç registeridir. Sayma işlemleri için özelleştirilmiştir. BX te bahsettiğim olay farklı yöntemlerlede yapılabilirken CX ten yardım alınması daha makbuldür.

DX: D(Data)X:

AX in taşıyamayacığı yüklerde yardımcı olan registerdir. Elinizde 1.5 byte'lık veri varsa AX 1 byte'tan fazlasını kaldıramıyorsa 0.5 byte'ını da DX'e yükler bir seferde taşırsınız.(siz yüklemiyorsunuz kendisi yüklüyor)

SI: SI(Source Index):
DI: DI(Destination Index):
Büyük verilerin bir bellek adresinden (Source), başka bir bellek adresine (destination) taşınmasında kullanılan indexli adresleme metodunda source index'in tutulduğu registerdir. DI'i de siz tahmin edin:).


BP: BP(Base Pointer):
Base adres üzerindeki belli bir noktayı işaret etmek için kullanılan registerdir.

SP: SP(Stack Pointer):
Yığıt üzerindeki belli bir noktayı işaret etmek için kullanılan registerdir.


Segmet Registerleri;

CS: (Code Segment):
Program kodlarının bulunduğu adresi tutan registerdir.

DS: (Data Segment):
Program verilerinin bulunduğu adresi tutan registerdir.
SS: (Stack Segment):
Yığıtın bulunduğu adresi tutan registerdir.
ES: (Extra Segment):
Adı üzerinde.

FS: Bilmiyorum.
GS: Bilmiyorum.

Program Durum ve Kontrol Registeri;

FLAGS: (Bayrak):
Program çalışma esnasında oluşan çeşitli durumlara göre flags registerinin bitleri 0 veya 1 halini alırlar işte bu 0 ve 1 durumlarının tutulduğu register flags registeridir.

Yönerge İşaretçisi;

IP: IP(Instruction Pointer):
Program hiyerarşisinin varlığını sağlar. Cpu programı işlerken IP registerinin gösterdiği noktadan başlar, ve sürekli IP registerinin yeni göstereceği değerleri takip eder. Bu sayede hiyerarşi bozulmamış olur. program bir dallanma komutu ile karşılaştığında IP registerine dallanılacak adres yazılır Cpu programı işlemeye IP registerine bakarak o noktadan itibaren devam eder.

Data Types: (Veri Tipleri):
Tüm programlama dillerinde olduğu gibi Assembly dilinde de veriler belli kalıplar içerisine sıkıştırılmış olmalıdır. Çünkü bellek her zaman kısıtlıdır tutulacak verilerin yerleşimi ve yeniden geri çağrılması işleminde veri depolanacak alanın verimli ve standart kullanımı bize anlaşılabilir kodlama ve en önemliside hız kazandıracaktır.

Bit: En küçük Hafıza Birimi: örnek: 1, 0 başka örneği yok. Sadece 1 yada 0.
Byte: 8 Biti yanyana koy 1 Byte eder: örnek: 10100101, 01001010.
Word: 2 Byte'ı yanyana koy 1 Word eder: örnek:yukarıdaki ikisi tek.
DWord:2 Word 1 Double Word eder.
QWord:2 Dword 1 QuadWord eder.
DQWord:2 QWord 1 DQWord eder.

Bu veri tiplerinden küçük olanlar büyük olanlara otomatik dönüştürülebilirler. Fakat büyük tiplerden küçük tiplere dönüşüm yapılmaya çalıştığında hata oluşur. bir kaba alabileceğinden fazla su koyduğunuzda taşması gibi. Üst düzey programlama dillerinde bu taşma overflow hatası ile bildirilir. Assembly dilinde ise bu tür taşmaları programcı flags registerinden faydalanarak yönetebilir.

Flags Registerine ileriki konularda ayrıntılı olarak değinilecektir.

Yukarıda anlatılanlan konular mümkün olduğunca basite indirgenmiştir. Bu yazılardaki amacım insanların sürekli Assembly ile program yazılırmı olum kafayı yersin diyerek toplumu programlamanın sadece formlar üzerine 2 tane component sürükleyip bırakmak olduğuna inandırılmaya çalışılıyor olmasıdır. Bu çabaların doğal sonucu olarak etrafımızda windowsu bilgisayar zanneden veya algoritma bilmeden program yazabileceğini düşünenleri görmek kaçınılmazdır. Bu gün .Net platform bağımsızlığını vaad etmektedir. Linux için geliştirilmekte olan Mono projesi umut vericidir. Bu proje oturduğunda hiçbir şey eskisi gibi olmayacaktır. (Örn: Ben bir oop 'ı .Net ortamında hazırlayıp Mono ile Linux için derleyebileceğim veya tam tersi.) Bu durumda işveren client makinalarınıda Linux yapabilecek. vs. Neyse konuyu fazla dağıtmayalım.
 

HTML

Üst