Benim işlemcim seninkini, benim C senin ASM yi döver.

Başlatan z, 13 Kasım 2009, 16:01:07

CLR

Alıntı yapılan: "z"
Alıntı YapYalnız asm yazma işlemini 8 bitle sınırlayamazsınız. 16 ve 32 bit işlemcilere binlerce satır kod yazılacak projelerin işlemcisi diye bakmamak lazım.

Dedim ve kusura bakma bizde gerçeklerden bahsediyoruz.

Kullandığın işlemciyi söyle biraz kafa yoralım. Bakarsın 32 satırın altına iner yada evet bunun sınırı 32 satırmış deriz.

Peki C içinde neden asm kullanılmasını yasakladın?

Merhaba,

Çünkü 16bit ve 32bit işlemciler genellikle 16K-512K aralığında değişir, 16K demek asm ile yaklaşık 16000 satıra kadar program yazılabilir demektir. Bence bunu asm ile yazan zaman israfı yapmıştır. Kendini boşuna kasmış demektir. Bu arada 16bit ve 32bit için bir kaç tane asm örneğini sitemde görebilirsin. Asm'yi sadece 16bitlerde delay ve kritik adc okumalarında kullanıyorum, gerisi için gerek yok.

Derleme işlemini ben yapmadım XXX_Cihan_XXX arkadaş yapmış ondan  kopyaladım. İlkyorumumda bu yazıyor. İşlemci ismini ondan alırsın.

Asm'yi engelledim çünkü ben C ile asm karşılaştırması yapmadım sadece C bilen ile (asm+C) bilen karşılaştırması yaptım. Yani C'ye asm mantığı ile yaklaşmaktan yoksa asm komutları kullanmaktan değil. Asm kod kullanacaksan C'nin özelliği kaybolur, taşınabilirlik özelliği, ozaman bu kodlar hiç bir işime yaramaz, aynı işlem için 8bite ayrı, 16bite ayrı, 32bite ayrı kod mu yazacağız yani?
Knowledge and Experience are Power

z

eemkutay

Projelerini ve yeteneklerini konuşmayacağız.  Programcılık illaki romu dolduran kodlar yazmak değildir. Senin uygulamaların uzun uzun kod yazmayı, benim uygulamalarım mikrosaniyelik ana döngüleri  gerektirir.

Bu durumda romu 512K olan çipi değil de 8K bilemedin 16K olanı seçer ve içine 512 Byte kod atarım geri kalanı boş kalır.  Çünkü rom uzunluğu farklı, işlemcinin bit uzunluğu farklı konulardır. Kodun kısaysa işlemcin de 8 bit olmalı denilemez. Zira hızlı kod, ya hızlı işlemcide yada bit uzunluğu yüksek işlemcide koşturulabilir. Hala yavaş kalıyorsa hızlı ve bit uzunluğu yüksek işlemcide. Oda olmadı donanımda. Eğer 16 yada 32 bit işlemcileri 16...512 K kod alanından dolayı seçiyorsan yanlış yapıyorsun.

C yi bilenlerin yazdığı kod dediğin örneği acemiler yazar.
Tabiki, burada çarpma uğruna yapılan matematik oyundan bahsetmiyorum.

Eğer amaç kod uzunluğunu yada işlem sürelerini düşürmekse o zaman  taşınabilirlik uğruna ASM kullanım özgürlüğü kısıtlanamaz.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Neyse devam edelim.

C guzeldir, anlasilirdir, tasinabilirdir.

ASM hamalliktir, anlasilirligi zordur fakat hiz isteyen uygulamalarda vazgecilmezdir.

ASM kodlamada sinir yoktur. C de sinirlar getirilir.

Iste en buyuk fark buradadir.

Her ne kadar GOTO varmis gibi soylense de aslinda elinizden alinmistir.
C de bu komutu kullanmayin derler. Halbuki C library icindeki asm kodda catir catir kullanilmistir. Cunku bu yasak asm ye değil C kullanicisinadir.

ornegin

... fonk1()
{
   ....
   ....
   goto Aradan_gir
  .....

}

.... fonk2()
{
   ....
   ....
Aradan_gir:
  .....

}

yapamazsiniz.

Halbuki asm yazimda boyle bir yasak yoktur ve bu yazim ciddi  kod kisaltmalari minik hiz arttirimlari yapar.

Macrolar microlardan olusur.

ASM icinde

           CALL  XXX
             ......

XXX:      ........
             ........
             POP AX
             JMP YALLAH


diyebilirsiniz.

C de bunlar denenirse kaza yapilir.

Bunlar asmde tehlikeli oyunlardir. Fakat Hiz zaten tehlikelidir.

C ye anlasilir, gorselligi cok iyi ASM yazimdir diyebiliriz. Cunku ASM ye cok yakindir. Sadece yaziminiza bazi sinirlamalar getirir.

Gerci benzer sinirlar Procedure  tarzi asm yazimda da karsimiza cikar.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

bigbey

@z,
evet anlaşılması gereken konulara değinmişsin,Son karşılaştırmanıza katılıyorum.
Kendi düşüncem olarak C + ASM kullanılması verimlilik ve sonuç açısından güzel olacağı düşüncesindeyim.
TA6R

z

Hiz hiz diyoruz da bunun bir adi sani tanimi olmali.

Yavas islemler.
Hizli islemler.
Cok hizli islemler.
Hiz limitindeki islemler diye kendimizce bir siniflandirma yapalim.

Belli bir zaman diliminde muhakkak tamamlanmasi gerekirken, acil kesmelere de bu arada cevap verilmesi gereken isler hizli islemlerdir.

Ornegin donanim kaynaklarinin neredeyse tamaminin aktif oldugu, interruptlarin havada ucustugu, bekletilmemesi gereken kesmelerin muhakkak cevaplandigi, bekletilebilir kesmelerin ilk firsatta cevaplanmak uzere pas gecildigi uygulamalari gosterebiliriz. Bu uygulamalarda islemcimizin tum isleri tamamlayip aylak kaldigi is olsa da yapsam dedigi zaman araliklari mevcuttur.

Kisaca 40 tilkinin 40nin da kuyruklarini birbirine deydirmeden kucucuk odada dolastirildigi uygulamalardir.

Bu hizin altindaki uygulamalarda islerin aheste aheste yurudugu, kodlar arasina bolca gecikmelerin konulabildigi uygulamalara yavas islemler diyebiliriz. Bu uygulamalari asm ile yazmanin hemen hemen hic bir mantigi yoktur.

Ornek vermek gerekirse sirali otomasyon isleri.  Bol grafikli gorsel programlar. Uzaktan kumanda uygulamalari gibi.

Yogun islem gerektiren bilimsel hesap makinesi uygulamasi bile bu yavas sinifa sokulabilir.

Eger hizli islemler yukaridaki tilki uygulamalari ise cok hizli ve hiz limitindeki uygulamalar neler olabilir?

Bunlari da sonra ele alalim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

CLR

Alıntı yapılan: "z"eemkutay

Projelerini ve yeteneklerini konuşmayacağız.  Programcılık illaki romu dolduran kodlar yazmak değildir. Senin uygulamaların uzun uzun kod yazmayı, benim uygulamalarım mikrosaniyelik ana döngüleri  gerektirir.

Bu durumda romu 512K olan çipi değil de 8K bilemedin 16K olanı seçer ve içine 512 Byte kod atarım geri kalanı boş kalır.  Çünkü rom uzunluğu farklı, işlemcinin bit uzunluğu farklı konulardır. Kodun kısaysa işlemcin de 8 bit olmalı denilemez. Zira hızlı kod, ya hızlı işlemcide yada bit uzunluğu yüksek işlemcide koşturulabilir. Hala yavaş kalıyorsa hızlı ve bit uzunluğu yüksek işlemcide. Oda olmadı donanımda. Eğer 16 yada 32 bit işlemcileri 16...512 K kod alanından dolayı seçiyorsan yanlış yapıyorsun.

C yi bilenlerin yazdığı kod dediğin örneği acemiler yazar.
Tabiki, burada çarpma uğruna yapılan matematik oyundan bahsetmiyorum.

Eğer amaç kod uzunluğunu yada işlem sürelerini düşürmekse o zaman  taşınabilirlik uğruna ASM kullanım özgürlüğü kısıtlanamaz.

Orada anlattıklarımı sen anlamamışsın ama mutlaka anlayanlar çıkacaktır, yolun açık olsun
Knowledge and Experience are Power

z

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

lojikmemo1

Alıntı yapılan: "z"Neyse devam edelim.

C guzeldir, anlasilirdir, tasinabilirdir.

ASM hamalliktir, anlasilirligi zordur fakat hiz isteyen uygulamalarda vazgecilmezdir.

ASM kodlamada sinir yoktur. C de sinirlar getirilir.

Iste en buyuk fark buradadir.

Her ne kadar GOTO varmis gibi soylense de aslinda elinizden alinmistir.
C de bu komutu kullanmayin derler. Halbuki C library icindeki asm kodda catir catir kullanilmistir. Cunku bu yasak asm ye değil C kullanicisinadir.

ornegin

... fonk1()
{
   ....
   ....
   goto Aradan_gir
  .....

}

.... fonk2()
{
   ....
   ....
Aradan_gir:
  .....

}

yapamazsiniz.

Halbuki asm yazimda boyle bir yasak yoktur ve bu yazim ciddi  kod kisaltmalari minik hiz arttirimlari yapar.

Macrolar microlardan olusur.

ASM icinde

           CALL  XXX
             ......

XXX:      ........
             ........
             POP AX
             JMP YALLAH


diyebilirsiniz.

C de bunlar denenirse kaza yapilir.

Bunlar asmde tehlikeli oyunlardir. Fakat Hiz zaten tehlikelidir.

C ye anlasilir, gorselligi cok iyi ASM yazimdir diyebiliriz. Cunku ASM ye cok yakindir. Sadece yaziminiza bazi sinirlamalar getirir.

Gerci benzer sinirlar Procedure  tarzi asm yazimda da karsimiza cikar.

Bu zaviyeden yaklaışrsan armutta da karpuz tadı yoktur. Örenkte verdiğin yöntem c dilinin doğasına aykırı henüz c dili ile ciddi uygulamalar geliştirmediyseniz lütfen kodunuzu gözden geçiriniz. C dilinde global ve local alanlar mevcut bu da programcıya büyük kolaylıklar sağlar siz örneğinizde bir local alandan diğerine ulaşmaya çalışıyor ve bunu yaparken local alanlarda kullanılan bir komut olan goto ile çalışıyorsunuz sorun asıl bu anlayışın ta kendisidir. C dilinde asm de olduğu gibi her satırın kesin bir numarası yoktur bu goto değimi bu yüzden çalışmaz c de herşey değişkenler ve fonksiyonlar üzerinden yürütülür. Hep, asm nin üstün olduğunu ve gizli özellikleri olan bir mitoloji dili olduğunu savunuyorsunuz fakat c zaten asmyi son hadde kullanır. Ayrıca c dilinin sağladığı milyon kolaylık yanısır pointer kavramını inceleyiniz derim asm bunu yapmak ne mümkün demiyeceğim fakat 30 kat fazla çalışmak ne mantıklı derim. Son olarak üzerine yüzlerce makale yazılan "readability" kavramına değinmek isterim türkçe karşılığı okunabilirlik olan bu kavram yazılan kodun ne kadar anlaşılabileceği ne kadar düzenlenebileceği gerekirse bakım onarım debug işlemleri hızı ile ilgilidir. 50000 satır asm kodunda debug yapmaktansa mikrobiyoloji okurum kafam rahat olur :) .

Sonuc olarak amacımız spor yapmak ise buyrun asm ile kafa kırınız fakat profesyonal uygulamar yapmak isterseniz c ,c++, c# konularında yardım edebilirim.

Bazı arkadaşlar demişlerki windowsun arka planında çalışan sözde prof uygulamalar asm ile iş yaparlarmış yok artık. Seri porta ulaşmak için asm lazım mış yok devenin sağ kulağı seri porta veri yazma işlemi aslında tamamen pc'nin veri yolunda adres ve ve veri bilgisini yazmaktır o kadar yani pic te portb=22 gibi bişi tabi hangi adres sorusu gelirse cevap serial port driver inf file. Windows asm ile yazıldı diyen arkadaşlara da linux os sinin(ücretsiz) kaynak kodlarını indirerek kodlarının c++ ile yazıldığını hatta gcc (ücretsiz) ile derlendiğini görerek işin doğrusunu kapabilirler.

C yavaş tır diyen ve otomobil örneği verenler ise çok yanılmaktadırlar kod doğru yazılırsa hızlı çalışır c ye hakim biri aynı programı c de yazar ve asm den hızlı hale getirir ve klavyesine sağlık arkadaş demiş ki interruplar var artık doğru demiştir artık iş asm ile amele kodu olayından çıktı artık uygulamalar event system, multithreading software interrupt.... gibi alt yapılar üzerinde çalışmakta. Keza şu an bu yazıyı okumakta olduğunuz pc de de bir işlemci var ve c ile yazılmış bir platform üzerinde olarca kat uygulamadan sonra çalışan internet explorer yardımı ile bu siteye girmektesiniz ayrıca antivürüs , onlarca service, bir sürü os rutinleri belki winamp çalışmakta varmı bir aksilik yavaşlık felan demekki neymiş dil değil dili kullanan odakta imiş, dil araçmış isteyen istediğini kullanırmış.

Herkeze iyi geceler.
İnsanlara Akılları Ölçüsünde Söz Söyleyiniz.

muhittin_kaplan

Konu "OOP" olup olmamakta sıkışacak gibi görünüyor.

XX_CİHAN_XX

Birçok fikrinize katılıyorum ancak buna değil.
Alıntı yapılan: "lojikmemo1"
C yavaş tır diyen ve otomobil örneği verenler ise çok yanılmaktadırlar kod doğru yazılırsa hızlı çalışır c ye hakim biri aynı programı c de yazar ve asm den hızlı hale getirir...
Burada hızlı kod yazmak ayrı bir konudur ve dediğiniz gibi C ye hakim olmakla doğrudan alakalıdır ancak c ile asm den daha hızlı kod yazmaktan bahsedilince olay çıkmaza girer.
Çünkü C dilide derlendikten sonra nereye döner? Tabiiki asm ye.
Hal böyleyken asm den hızlı kod yazmaktan söz etmek bana göre mümkün değildir.
C dilinde yazdığım bir kodun asm karşılığını incelediğimde ben bunu asm ile kendim yazsam en az 5-10 satır daha kısa yazabileceğim rahatlıkla görebiliyorum.

Ek olarak şunada katılmıyorum.
Alıntı yapılan: "lojikmemo1"
Ayrıca c dilinin sağladığı milyon kolaylık yanısır pointer kavramını inceleyiniz derim asm bunu yapmak ne mümkün demiyeceğim fakat 30 kat fazla çalışmak ne mantıklı derim.
Asm dilinde de pointer kavramı vadır ve sandığınız kadarda zor değildir.

Burada asm ile C yi doğrudan kıyaslamak hele hele C, asm den daha hazlıdır demek mümkü değildir. Tersi söylenebilsede uzun vadeli programlarda programın şişmesinden kaynaklanan algoritma hataları asm de daha fazla baş göstereceğinden dolayı büyük çaplı asm kodlarında programcı bazlı yavaşlık durumu oluşabilir.
C nin disiplininden dolayı C de böyle bir durum daha az yaşanır ki bunlar  tabiiki doğrudan programcı ile alakalı performans durumlarıdır. Buradan C, asm den daha hızlıdır sonucu çıkarılamaz.
Çünkü bu bir mantık hatası olur zira yazdığımız C kodu belirli bir kalıplar içersinde asm ye çevriliyordur. Biz bu kodu doğrudan asm ile hiç bir kalıba girmeden yazabiliyorsak Ancak asm, C den daha hızlı olabilir diyebiliriz.

Kişisel görüşüm bu nedenlerden dolayı asm yi iyi bilmek ve C yi bu şekilde kullanmaktan yanadır. Hatta hassas işlemleri doğrudan asm ile yapmak şüphesiz hız açısından oldukça faydalı olacaktır.
Onun dışıda C nin bütün niğmetlerinden faydalanmak gerekir elbette.
Sizinde dediğiniz gbi artık oturup sayfalarca asm kodu yazmak işkenceden başka birşey değildir. C nin disiplini, okunabilirliği, taşınabilirliği, güçlü mimari yapısı ve mükemmel kütaphanesini doyasıya kullanmak ve hız konusunda C nin sınırlarını aşmak istediğimiz nokalarda da asm nin tadını çıkarmak bana göre mükemmel olacaktır
 :)
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

lojikmemo1

Alıntı yapılan: "XX_CİHAN_XX"Birçok fikrinize katılıyorum ancak buna değil.
Alıntı yapılan: "lojikmemo1"
C yavaş tır diyen ve otomobil örneği verenler ise çok yanılmaktadırlar kod doğru yazılırsa hızlı çalışır c ye hakim biri aynı programı c de yazar ve asm den hızlı hale getirir...
Burada hızlı kod yazmak ayrı bir konudur ve dediğiniz gibi C ye hakim olmakla doğrudan alakalıdır ancak c ile asm den daha hızlı kod yazmaktan bahsedilince olay çıkmaza girer.
Çünkü C dilide derlendikten sonra nereye döner? Tabiiki asm ye.
Hal böyleyken asm den hızlı kod yazmaktan söz etmek bana göre mümkün değildir.
C dilinde yazdığım bir kodun asm karşılığını incelediğimde ben bunu asm ile kendim yazsam en az 5-10 satır daha kısa yazabileceğim rahatlıkla görebiliyorum.

Ek olarak şunada katılmıyorum.
Alıntı yapılan: "lojikmemo1"
Ayrıca c dilinin sağladığı milyon kolaylık yanısır pointer kavramını inceleyiniz derim asm bunu yapmak ne mümkün demiyeceğim fakat 30 kat fazla çalışmak ne mantıklı derim.
Asm dilinde de pointer kavramı vadır ve sandığınız kadarda zor değildir.

Burada asm ile C yi doğrudan kıyaslamak hele hele C, asm den daha hazlıdır demek mümkü değildir. Tersi söylenebilsede uzun vadeli programlarda programın şişmesinden kaynaklanan algoritma hataları asm de daha fazla baş göstereceğinden dolayı büyük çaplı asm kodlarında programcı bazlı yavaşlık durumu oluşabilir.
C nin disiplininden dolayı C de böyle bir durum daha az yaşanır ki bunlar  tabiiki doğrudan programcı ile alakalı performans durumlarıdır. Buradan C, asm den daha hızlıdır sonucu çıkarılamaz.
Çünkü bu bir mantık hatası olur zira yazdığımız C kodu belirli bir kalıplar içersinde asm ye çevriliyordur. Biz bu kodu doğrudan asm ile hiç bir kalıba girmeden yazabiliyorsak Ancak asm, C den daha hızlı olabilir diyebiliriz.

Kişisel görüşüm bu nedenlerden dolayı asm yi iyi bilmek ve C yi bu şekilde kullanmaktan yanadır. Hatta hassas işlemleri doğrudan asm ile yapmak şüphesiz hız açısından oldukça faydalı olacaktır.
Onun dışıda C nin bütün niğmetlerinden faydalanmak gerekir elbette.
Sizinde dediğiniz gbi artık oturup sayfalarca asm kodu yazmak işkenceden başka birşey değildir. C nin disiplini, okunabilirliği, taşınabilirliği, güçlü mimari yapısı ve mükemmel kütaphanesini doyasıya kullanmak ve hız konusunda C nin sınırlarını aşmak istediğimiz nokalarda da asm nin tadını çıkarmak bana göre mükemmel olacaktır
 :)


ilk olarak sanılanın aksine c kodu derlenince asmye dönme zorumluluğu yoktur istenirse derleyici (tabi bu derleyiciyi üreten firmaya göre değişir) asm çıktısı verebilir. Aslında executable yada hex dosyaları decopile edilince zaten asm çıktısına ulşılır bu dediği .net için geçerli değildir .net kendine özgü asm çıktısı üretir ve hiç bir zaman .net derleyicisi çıktıları olan exeler exe değildir bunları run time de jit derler falan falan.

ikincisi c tabikide hızlıdır sebebi ise şudur. Bir proje yapılmaya başladndığında kullanılan programlama diline göre kurulan algoritma basitleşebilir ve daha kolay bir kod ile yapılabilinmesi akıledilebilir yani algoritma gelişebilir sonuçta asm de olmayan hazır kütüphaneleri yazmak yada düzenlemek için harcanan zaman algoritma üzerinde harcanır ve daha zekice bir program yazılabilir kastedilen budur. Pointer meselesi asmde var denmiş zaten orada olmasa c de hiç olmaz fakat kullanımı tabikide zor olacaktır normal bir pointer belki kolaydır fakat pointer pointers pointer işlemi için 3 boyutlu düşünmek asm dili ile biraz zulumdür.
bunlara ek olarak dizi işleme fonksiyonel programlama global ve local değişken ve alanlar bitwise ve bytewise oparatörleri biraz üst seviyeye çıkarsak oop de bulunana method namespace class miraslık kod gizliliği falan gibi liste uzar.. bu gibi yüksek işlemleri için tek satır asm koduna gerek yoktur zaten bir çok proglama dilinde de yasak sayılır. sayılır dedim sebebi şudur mesela .net platformunda yönetilmeyen kodlarda kullanılabilir fakat bu tavsiye edilmez bu tür kodlar hafızanın herhangi bir bölgesine .net in katı kurallarını kullanmadan erişip bazı manyaklıklar yapabilirler (dizi sonunda ramdan taşma) ayrıca bu kodlar .net in çöp toplayıcısı niğmetinden de yoksundur bu tip dez avantajların olduğu kodlama türü olan unmanaged kodda asm kullanılabilir artık ne yapılacak ise fakat görüldüğü üzere astarı yüzünden pahalı olmaktadır. şunuda açıklamdan geçemeyeceğim yüksek seviyeli dillerde kesinlikle koda dayalı bir hız söz konusu değildir yani kod işleme sistemine göre bir hız olsa idi her program her bilgisyarda değişik hızda açılır kapanır örneğin photoshop açılırken gösterilen splash ekranı bir pcde 3 saniye diğer pcnin işlemcisi hızlı olduğu için 1 saniye gösterilir ve gerzek bir durum ortaya çıkardı. Aslında herkezin bildiği batak oyunu vb6 ile yazılmış onu kodlaya arkadaş muhtemelen kart dağıtılırken gecikme işlemini Stimer yerine kod ile yapmıştı zira yukarıda bahsettiğim gibi farklı pc lerde farklı hızlarda çalışmakta idi.
Kısace günümüz koşullarında asm kullanımı önmüştür (elektornikte halen yoğun bakımda diyelim) hele pc de bu iş milyonda bir durumunda gibidir o birlik rakamda zaruretten değil programcının tercihidir dediğim gibi bu tip uygulamalarda tüm zamanlamalar HWtimer ve SWtimer ler iş kanalları ve parçacıkları nam-ı diğer threats, servisler ve tabi bunların sonucu olan event sistemi üzerine kuruludur. Siz hiç pc kodunda delay fonksiyonu gördünüzmü göremezsiniz çünki pc de herşey bu even system üzerine kuruludur tıpkı insanlar gibi etki tepki olgusu vardır butona dokunursunuz pencere çıkar hatta cd yi takınca otomatik çalışsın diye autorun.inf yazarız çünki her şeyin bir tetiklemesi lazımdır.

Son sözüm hala asmnin tartışılması beni hen güldürdü hem üzdü bugün bunu yerine keçke oop olan c# .net tartışılsa hafızayönetimi veya donanımsan işlemler üzerine sorular sorulsa keşke.
İnsanlara Akılları Ölçüsünde Söz Söyleyiniz.

z

C nin disiplinli bir dil oldugunu vurgulamistim. Ardindan C de yapilamayacak yasak islemlerden de bahsettim.

ASM de bu tur sinirlarin olmadigini soylemem suc sa kusura bakmayasin.

Global ve lokal degiskenlerin bir arada islendigi fonksiyondan bir baska fonksiyona ara kacis yapma sansim varsa bu bana o kodlamamda avantaj saglayacaksa ayagima gelen bu sansi geri cevirmem ve asm de ben ziplarim.

Call ettigim yeni satirda isim bittiginde isime geliyorsa cagrildigim yere geri donmem kendime yeni bir hedef kod belirlerim.

Bunlar asmnin ozgurlukleridir.

Bunlarin getirisi nedir dersen bunlari zekanla kendin goreceksin.

Bana uzun uzun kodlama gerektiren uygulamalara ciddi uygulama yada profesyonel calisma demeyin.

Elbezi de, kazak da orgudur. Fakat minicik bir dantel senin kocaman ceketinden daha profesyonel daha ciddi olabilir.

Bana C# yada PC uygulamalarini ornek gosterirseniz ben de size gulerim.

Biz mikrolarda kod gelistiriyoruz. Eger 32 bit mikro ile elektronikcilik amaci disinda kod gelistiriyorsaniz o uygulamanin benim gozumde degeri yoktur.

Aynen cep telefonunda ses iletimi, IRDA vs disinda kalan uygulamalar gibi.

Cep telefonu elektronik bir cihaz olsada elektronikciyi ilgilendiren kismi artik azinliktadir. Asil kodlama bilgisayar yazilimcilarinin alanina girmektedir.

Ben hic bir zaman bilgisayar yazilimcisinin yapacagi kodlamalari asm ile yazmali onlari hizlandirmali demem.

Bizim derdimiz elektronik devre yazilimi. Bu noktaya odaklanin. Yoksa armutta karpuz tadini arayan siz olursunuz.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

C ve asm ile yapilan kodlamayi tuglalarla yapilan duvar orme calismasina benzetebiliriz.

C nin elinde buyuk buyuk tuglalar vardir. Asm nin elinde kum taneleri.

C duvari bir koseden baslayip diger koseye kadar cok hizli doser.

Eger satir satir ASM ile kodlayan bu duvari dosuyorsa isi gercekten cok zordur. Kan ter icinde kalir.

Ama tam duvarin bitimi olan kose var ya o kose, C orda cuvallar. Elindeki tuglalar kose icin fazla buyuk kalmistir. Orda atin ...ne kelebek kondurur.

Ama asm nakis isler gibi gec de olsa o koseyi sanatci edasiyla orer ve duvari bitirir.

Gercekte C ile duvari orup karsimiza cikan koseleri asm ile yamamak isin dogrusudur.

Buradaki duvarin PC lerdeki gibi buyuk duvar olmadigini tekrar vurgulayayim.

Bu ornege de soz soyleyecekseniz benim C asm konusunda yazmama gerek kalmaz.

Kaldiki ben C yi basindan beri kotuleyen taraf olmadim. ASM yi de yuceltmedim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

CLR

Asm'de uzman biri C'den daha az asm komut çıktısı veren program yazar. Dolayısıyla asm C'den hızlıdır ama bu göreceli kavramdır, asm'de uzman kişiden bahsettim.

Asm'de uzman olmayan, orta halli bilgiye sahip kişiye göre ansi C derleyicileri daha az asm komutlarıyla program yazabilir. Özellikle matematiksel işlemlerde veya pointer gerektiren durumlarda. Çünkü C derleyicilerinin asm macrolarını yazan veya hazırlayan adamlarda asm'de çok uzmanlaşmış insanlardır.

Benim fikrim ise, asm'ye en yakın olan C'yi kullanmak yani C'yi öyle kullanacaksınız ki backround'unda hangi asm komutlarını attığını biliyormuş gibi. Ama mecbur kalmadıkça asm kullanmamak, sadece kritik yerlerde kullanılabilir.

Yukarıda basit bir örnek verdim. Bunun nasıl yapılacağı hakkında.
X=Y*15;        // burada herşeyi C derleyicisi yapar, 
X=(Y<<4)-Y; // Burada ise  C derleyicisine ne yapması gerektiğini sen
                    // söylersin


Bu yapıya asm sadeliğinde C denir. Bu sadece bir örnek, öğrenmek isteyenler için, asm'den C'ye geçecekler için fikir olsun diye.

Kutay
Knowledge and Experience are Power

XX_CİHAN_XX

@z hocam çok güzel izah etmişsiniz durumu. Kesinlikle katılıyorum.
@eemkutay hocam sizede aynı şekilde katılmaktayım. Bende asm de C ye geçmiş birisiyim ve çoğu zaman dediğiniz gibi asm sadeliğinde kod yazmaya çalışıyorum ve üretilen asm kodlarınıda sürekli inceleyip ne şekilde kod ürettiğini iyice kavramaya çalışıyorum. Bu bana neredeyse asm sadeliğinde kod yazma imkanı sağlıyor gerçekten.
Yine dediğiniz gibi tuğlanın büyük kaldığı noktaları kumla doldurmam gereken yerlerde de asm ye geçip işimi görüyüyorum.

Şu konuda da haklısınız taşınabilirlik ve okunabilirlik açısından mümkün olduğunca az asm kullanmak gerekir. Ama asm nin zorunluğu olduğu yerlerde de kullanmaktan kaçınmamak gerekir diye düşünüyorum.
Bu sayede asm sadeliğinde, kaliteli ve hızlı bir kod üretebiliyoruz.

@lojikmemo1 hocam, @z hocam çok güzel söylemek istediklerimi izah etmiş hep PC tabanlı örnekler vermişsiniz oysaki burada konuşulan C nin hedefi mikrolar içindir. Biz duvar örmekten bahsederkin siz saray yapmaktan bahsetmişsiniz :)

Saygılar, sevgiler.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.