Assembly ve C arasındaki farklar nelerdir ?

Başlatan kaypic38, 09 Ocak 2012, 19:05:01

z

Gerbay hocam,

ARM işlemcide mem to mem komutların olmaması benimle CPU arasına bariyer girmesi anlamına gelmiyor.  Mimari o şekilde.

"ASM ile C arasındaki farklar nelerdir" sorusuna ASM nin sahip olduğu avantajı vurguladım ve bu avantajı kullanmak istiyorsan ASM öğrenmek zorundasın dedim. Tüm yazdığım bundan ibaret.  Bunun adı yönlendirmekmi?

Yönlendirme yaptığım mesajlar da var.  ARM konusunda açtığım onca başlıkta, bırakın diğer dilleri C kullanın dedim. Fakat birisi çıksa bir soru sorsa bu kez de C ile değil ASM ile yaz diyeceğim.

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

cicjoe

ben micro'ya baslarken, C bilgim vardi. "C ile yazabiliyor muyuz? o zaman tamam ya hallederiz" diyerek girdim. sonra baktim ki bisey yapamiyorum. biraz forumlari gezdim, ne deniyor bu konuda diye bakindim. bazilarinin asm bilmeden olmaz dediklerini gordum. "ne asm'si ya hangi cagdayiz" dedim (MCU'lar hakkinda bilgim yok henuz). sonra basladim asm'ye bakinmaya. "aa demek ben kodlari yazdigimda aslinda bunlar mi oluyormus" dedim. asm bakinana kadar neler olup bittigi hakkinda bir fikrim yoktu. bi daha da asm kullanmadim :D
yani burdaki hocalarimin MCU'lar uzerine bilgisi var, islerin nasil yurudugu hakkinda saglam bilgileri var. ancak yeni baslayan birisi donanima en yakindan girerse daha iyi anlar diye dusunuyorum. en azindan baslangic asamasinda. sonrasi icinse C ogrenmenin faydasi olacagini dusunuyorum.

z

#17
Hocam,

ASM öğrenmek kötü bir şey değil çok da faydalı. Matematik kadar faydalı.

Eğer kafa karıştırıyorsam, kafasını karıştırdıklarıma şu güzel sözü hatırlatmak istiyorum.

Kutup yıldızını kaybedersen ufak bir ışıltılı böcek bile aklını karıştırabilir. (Bir Türk Düşünürden)

Bir işlemcinin komut seti azaldıkça program yazmak zorlaşır fakat o kadar da çok şey öğrenilir.

Digital dünyaya yeni adım atmaya çalışan birisine C önermekle çok büyük kötülük yapıyorsunuz.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

K46

Şahsi düşüncem, C dili, hem kod okunabilirliği ve hata ayıklama rahatlığı açısından, hem taşınabilirlik ve hız açısından diğer dillere göre bariz şekilde daha avantajlı. Başlama noktası ASM olunca birçok kişinin gözü korkuyor ve uğraşmaktan vazgeçiyor. Halbuki başlangıç noktası C olsa, çok daha kısa sürede, çok daha fazla ilerleme kaydedilebilir, üstelik PC tarafında da öğrenilen dil işe yarar. İlerleyen zamanda artık C yetmeyecek kadar ustalaştıktan sonra gerekirse ASM macerasına girilebilir.
Bak, ibret al, yere düşen yaprağa, O da eskiden, yukarıdan bakardı toprağa!

ilhan_mkp

gerbay hocam c ispanyolca,ingilizce,fransızca,almanca bilen tercümanlarla avrupayı gezmek ise asm rusyada doğup ana dilini konuşup mümkünse doğduğunu şehirden çıkmamak gibi.

birde benim kullandığım basic var beş parasız afrikada dolamak gibidir  ;D


kaypic38 şu an dil kadar datasheet okuma alışkanlığı kazanmanız önemli.
pici çok iyi öğrenceğim demişsiniz bahsettiğiniz işlemciler mesela 877 eskibir mimari endütriyel ortamda güvenilirliği forumlarda en az evrim teorisi kadar tartışıldı.

pici mükemmel öğrenmek sizi ileride hayal kırıklığına ugrata bilir

bence siz c öğrenin teknoloji bizi bu yöne şartlandırıyor gibibir durum var
zaten hırslısınız çok iyi omasada bir yandan asmde çalışırız olur biter

fryrmnd

Alıntı yapılan: ilhan_mkp - 10 Ocak 2012, 23:13:54
birde benim kullandığım basic var beş parasız afrikada dolamak gibidir  ;D

+1 ;D


pici çok iyi öğrenceğim demişsiniz bahsettiğiniz işlemciler mesela 877 eskibir mimari endütriyel ortamda güvenilirliği forumlarda en az evrim teorisi kadar tartışıldı.

;D



MrDarK

Muhtemelen kısa bir süre sonra kilitlenecek olan forumda sayfalarca günlerce tartışılan örnek üzerine örnek verilen kelimelerle dans ettirilen bir türlüde kimseyi memnun edemeyen bir tartışma ürünüdür bu tartışma..

Nacizhane fikrim ; ASM ile kod yazmaya çalışan bir elektronik meraklısının yaşadığı her problemde oturur hangi ürünü kullanıyorsa o ürünün datasheet'ini okur, ürünü anlar fonksiyonu anlar direk üreticinin ağzından yapması gerekenleri öğrenir ve bunalmıs hocamızında dediği gibi mcu'ya vermesi gereken aklı tek tek komut satırı ile girer. Bunun bir çok avantajı var yukardaki msjlardada söylenmiş zaten uzatmanın manası yok. ASM dili üretilen her mcu için illa ki olacaktır, yazdığımız herhangi bir kod zaten ASM'ye dönüşmüyor mu ?

Yorumlar ; Evet ASM yapısını kafada beyinde oturtmak zorlar ama insanları düşünmeye sevk eder. Datasheet okumayı bilmeyi gerektirdiğinden üretilen her yeni ürünün içeriğini inceleme ve yönlendirmeyi üreticinin ağzından öğrenir. Kimsenin HAZIR KODUNA ihtiyacı kalmaz.

Arkadaş bu işi profesyonelce öğrenmek istiyorum diyorsa öğrenmek istediği konudaki tüm dilleri en az editleyebilecek kadar bilmelidir. Ardından istediği dilde uzmanlaşsın ona kimse karışamaz zaten.

Kendim lisede ASM öğrenerek başladı kod yaşantım. Yine lisede Ansi tabanlı pascal ile ilk basamağı attım. Ardından HTML devam etti . Ardından hayatıma üniversite yıllarımda Java girdi. Boş kalmamak adına Visual Basic , C# gibi dillere merak salıp kafamdan geçenleri yapacak kadar öğrendim. Sonra yine canım sıkıldı webmaster oldum php dilini öğrendim. İlk girdiğim şirkette Proton öğrendim. Ertesi yıl Hi-Tech C'ye terfi ettim.

Bu kadar dilden önce ASM öğrenmenin bana temel yapılar oturttuğunu düşünüyorum. Çünkü asm ile kod yazacak her kişi önce aklında bir akış diyagramı belirlemek zorunda. Belki bugün biz yeteneklerimizle alışkanlıklarımızla kodların akış diyagramını kafamızda hemen belirliyor olsakta, bu işe yeni başlayacak arkadaşa bir eğitimci adayı olarak profesyonel olmak istiyorsa bu dili öneriyorum.
Picproje Eğitim Gönüllüleri ~ MrDarK

z

Alıntı yapılan: gerbay - 10 Ocak 2012, 23:21:14
Aslında Müfit Bey bu konular ile ilgili daha fazla yazda da biz de bilgilerimizi artırsak..

Mufit beyi tanımayı çok isterim.  ASM kelimesini duyduğunda neden tüyleri diken diken oluyor? Cevap yazarsa sevinirim. Çünkü bu ilk değil.
Eğer çalıştığı iş, bazı disiplinleri ve standartlara sadık kalmayı gerektiriyor hatta ASM yazımı kesin kez yasaklıyorsa bunu anlarım fakat bu, iş yerinde kalmalı. Foruma getirilmemeli.

Müfitözen'e kişisel bir soru. Neden bu ASM düşmanlığı?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

camby

Çağa ayak uydurmalıyım endişesi , asm düşmanlığını ( genelleme yapıyorum alınmayın ) beraberinde getiriyor olabilir.

Her iki dile de ( ASM ve X dili ) hakim olup asm kesinlikle kullanmayın diyen görmedim henüz.

ASM kullanmamışlar , yada ASM ile sadece led açıp kapatıp bekleme döngüsü kurmuş olanlar , ASM kullanmayın kesinlikle diyorlar gibi.

z

Gerbay hocam,

Kesinlikle beni yanlış anlamış olmalısın.

Laf lafı açtı. Mufit beyin adı anılınca sorayım dedim.

ASM konusunda ne zaman övgüyle bahsetsem Mufit beyi karşımda buldum bu yüzden ASM düşmanlığı ibaresini kullandım.

(Eğer istersen geçmiş tarihli mesajları bulayım)

Mufit beye saygısızlık yaptığımı sanmıyorum. Sadece bende uyandırdığı bu intibanın sebebini merak ediyorum.

Bırakın kendisi cevaplasın.


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

camby

#25
Benim de gerçekten müfit beye yada başka birine laf söyleme niyetim yok ama ne zaman assembly konusu açılsa hep " asm kötüdür , asm kullanmayın , asm gereksizdir " gibi teknik eleştriler yapılıyor. ASM düşmanı olmayanların zaten yazdıklarıma alınmasına gerek yok , eğer öle iseniz bile alınmanıza gerek yok çünkü içinde hakaret yok , yaptığım bir eleştri sadece.


Bir göz gezdireyim dedim yazılanlara:

Alıntı yapılan: bunalmis - 10 Ocak 2012, 21:24:24
Assembly nin en büyük avantajı, programcı ile CPU arasına hiç bir şeyin girmemesidir. Ne yazdıysanız o derlenir ve CPU, yazdığınız kodları işletir.
Alıntı yapılan: mufitsozen - 10 Ocak 2012, 21:40:28
C nin en büyük avantajı, programcı ile CPU arasına hiç bir şeyin girmemesidir. Ne yazdıysanız o derlenir ve CPU, yazdığınız kodları işletir.
Alıntı yapılan: gerbay - 10 Ocak 2012, 21:49:34
C nin avantajı birçok işlemci mimarisi ile arana kimsenin girmemesi.. assembly de ise belli bir işlemci mimarisi ile baş başa romantik anlar yaşayabilirsiniz..

Ne diyelim bunlara... Hocam yaptığınız fanatizm değil de ne , ASM kötüdür ASM pistir kullanmayın diyorsunuz.

C'de komut yazıp derle dediğinizde MCU ile aranıza 200 kadar ilgili yazılım firmasının çalışanı girmiyor mu ? Bunun böyle olduğunu bile bile neden C ile İşlemci arasında kimse yoktur diyip farklı gösteriyorsunuz durumu insanlara. Kim bilir kaç kişi bu yüzden işlemcinin içinde binary olarak x = x+1 yazdığını düşünüyordur bu gibi yansıtmalardan dolayı.

Bu gibi teknik yorumlarınız Fanatizm değildir de nedir ?

" C ile aranıza kimse girmez ile , ASM de romantik anlar yaşarsınız " 'ın farkının teknik açıklamasını yapabilir misiniz ?


Dipnot : Ben eleştiriyorum oysa siz hakaret ediyorsunuz. Olsun ben size yine de cevap yazarım..

computerboy

#26
@kaypic38 hocam biraz okudum sen zaten 7-8 aydır assembly ile haşır neşirmissin sıra C diline geldi her iki dilide zaten öğreniyorsun C diline yoğunlaşman senin açından daha faydalı nedeni ise elektronik programcılığa giriyor olman ileride belkide büyük çaplı program yazacaksın assembly ile büyük ölçekli program yazmak adama saç baş yoldurtur lazım olduğu zaman C dilinde program yazarken içerisine assemly kod parçacıkları gömüp uygulamanı sağlamlaştırabilirsin. bende C ye yöneldim normalde basic ile istediğim algoritmaları v.b geliştirebiliyorum ama nedense "C gel beni öğren benden başkası yalan diyor" :) başarılar dilerim.

fahri-

Bildiğin yol en kısa yoldur. En iyi kullanabildiğin dil  en iyi dildir. Bence microcontrollerlarla uğraşan kişi hem asm yi hem de c yi öğrenmeli. Projesine göre birisini kullanabilir.

CLR

Bu asm ve c tartışması her zaman oldu. Herkes kendi tarafını tutuyor, herkesin bildiği kullandığı en iyi en doğru oluyor. Fakat doğru bir tanedir ve tartışılan herşey görecelidir, dolayısıyla herkes kendi penceresinden bakmak yerine biraz dışarıdan bakabilmeli.

Mesela asm ile yazılan bir program c'den kesinlikle hızlıdır. Doğru mu? Doğru , fakat bu idealde böyledir. Çünkü burada göz ardı edilen birşeyler var, asm program yazan kişinin ilgili c compiler'dan daha iyi veya en az onun kadar iyi asm bildiğini varsayarsak geçerli bir durumdur.
Asm'de çok iyi kod yazarım diyenler, bir program parçacığını değil, orta zorlukta bir programın bütününü bir hitech pro veya bir iar compiler'dan çok daha iyi yazabilir mi, böyle bir iddaa da bulunabilir mi?

Mesela bu sitede asm biliyorum diyen 20 kişiye al kardeş şu programı yaz desek, eminim en az 15-16 çeşit kod çıkacaktır. Herkes kendi bildiği ölçüde daha opmimize kod yazacaktır. Fakat c ile aynı şeyi yapsak bu çeşitlilik çok daha az olacaktır çünkü compiler çoğu yapıyı tanıyacak ve en optimize haline dönüştürecektir.

Asm bilen bir arkadaş sadece lcd menülü, triyaklı bir kombi tarzı ısıtıcı için 20bin satır asm yazdım diye övünürdü bende kırmayayım diye bişey demezdim ama bana göre eminim çok gereksiz yapılar içeriyordu. Çünkü bende o ısıtıcıya göre çok daha fonksiyonel endüstriyel klima tasarlamıştım, CO2, nem, hava kalite sensörü, 3 tane sıcaklık sensörü falan içeriyordu, fonksiyonel lcd menülüydü ve asm ile 2k'lık işlemciye sığdırmıştım. Burada benim yeteneklerimden bahsetmiyorum eminim benden daha iyi asm kod yazacak kişiler vardır. Sanırım anlatmak istediğim anlaşılmıştır. Sonuçta her asm bile işi layıkıyla yapıyor demek yanlış olur.

Bu C içinde geçerli ama şimdi compilerler akıllı kullanıcı hatalarını bile düzeltiyorlar. Daha ilginç bişeyler söylüyeyim bir kaç firmada hiç elektronik ve asm bilmeyen insanların sadece çok iyi derecede C bilerek kaliteli cihazlar çıkardığını gördüm. Hatta yazan adamlar donanımın D'sini bile bilmiyor. Yazdıkları programlarıda inceledim düz bilgisayar programlama tarzında yazıyorlar, asm ile yazsanız eminim 3 ayda belki yazarsınız ama adam 3-4 günde dev programı yazıyor. Bilgisayar programcısı olduğu için gereksiz ram kullanımı tavan yapmış, bir asmci görse o ramlere kıyamaz, kalp krizi geçirir. Gereksiz global tanımlamalar vs. Fakat donanımı tasarlayan kişi çok iyi tasarladığı için yazılımda pek sorun çıkmıyor.

Benim bu konuyu açan arkadaşa önerim ise, şöyle 1-2 ay kadar işlemciyi tanımak babında asm ile giriş yapsın ve paralelinde C ile de aynı programları yazsın. Sonrasında sadece C yeterli olur. 
Knowledge and Experience are Power

tuggy

Alıntı yapılan: uicroarm - 11 Ocak 2012, 10:55:02
Benim bu konuyu açan arkadaşa önerim ise, şöyle 1-2 ay kadar işlemciyi tanımak babında asm ile giriş yapsın ve paralelinde C ile de aynı programları yazsın. Sonrasında sadece C yeterli olur.

Bende aynı şeyi önereceğim yeni başlayanlara. Basit bir 8-bit MCU ile hem ASM hem C de aynı işi yapan programları yazarak ilerlemeli. O zaman buraya yazılan önerilerin de amaçlarını daha iyi anlar. İkisi de bence çok gerekli.

Teşbihte hata olmaz;

C: Bir çiftçinin elindeki kocaman ve son model bir toprak sürme makinası
ASM: Çapa (Bildiğiniz manuel toprak didikleme aracı)

Minik bir tarla sürecekseniz , o koca makineyi bu tarlaya soktuğunuzda bazı yerler gerektiği gibi sürülemeyecekse, ektiğiniz fidanların diplerine olduğunca yaklaşıp tam bir "didikleme" gerekiyorsa "Çapa" kullanmalısınız.

Çukurova'da 100 lerce dönüm araziyi sürecekseniz hemen o büyük makineden alın. (ARM larda C) Ama o büyük tarlanın bazı yerleri engebeli-girintili filansa büyük makine düzgün yapamıyorsa işini, o kısımlara hala "Çapa" gerekecek düzgün bir sonuç isteniyorsa.

Hiç çapa kullanmadan çiftçilik yapan var mıdır? Bence çok! Ama eminim babadan kalma tarla çoktur. Arada ziyan olsa da bir kısmı zoruna gitmez.

Hiç makine kullanmadan çiftçilik yapan var mıdır? Bence artık kırsalda tek tük. Ama her çapa vuruşta "Şöyle 100 dönüm dümdüz tarla olacak bir de kocca makine" diyordur kanımca:)


Bu işin alfabesi 8-bit MCU lar olduğu için ASM ile başlayıp aynı işleri MCU ya C ile de yaptırarak ilerlemeli. Zaten 8 bit bir MCU iyice kurcalanıp her özelliği hem ASM hem C ile kullanıldıktan sonra aradakiler atlanıp C ile ARM türü büyük işlemcilere geçilebilir. Gerektiğinde ASM kullanabilirsin böyle ilerlersen. Belki de çok az ihtiyaç duyacaksın ama ne zaman ihtiyacın olduğunu bilirsin en azından :)