Şimdi Ara

assembly programlama dili nasıl öğrene bilirim

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
44
Cevap
2
Favori
24.690
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 123
Sayfaya Git
Git
sonraki
Giriş
Mesaj
  • çok zor bir programlama dili ama öğrenmem gerekiyor nerden baslamalıyım yada nerden ders ala bılırım bide assembly programlama dili nı bıraz acıklarmısınız :D cok sevinirim



    < Bu mesaj bu kişi tarafından değiştirildi $layer -- 4 Temmuz 2013; 15:18:50 >



  • Asm prog. dili değil önce bunu öğren. Ayrıca hangi asm? Ve niçin öğrenmen gerekiyor?
  • quote:

    Orijinalden alıntı: gandalff

    quote:

    Orijinalden alıntı: Tugrul_512bit

    Programlama dili değil, makina dilidir ve makinaya özgü komutları olur. 8080 simülatörüyle başlayıp temelleri kavradıktan sonra x86 ya geçiş yaparsın(tasm nasm yasm fasm gibi şeylerle) daha sonra SSE ve AVX gibi vektörsel hızlandırıcı komutlarına geçersin aynı zamanda işletim sistemlerine özgü komutları kullanmayı da öğrenirsin. Bunları da geçtikten sonra fpga programlamayı öğrenebilirsin.

    Kısaca 8-16 bit -----> 32 bit -------> 64 bit -------> fpga

    hocam iyi biliyor gözüküyorsunuz, yaptığınız veya üzerinde çalışıyor olduğunuz projeler var mı?neler yapıldığını merak ettim

    Hocam iyi bilmiyorum, sadece birkaç c++ fonksiyonunun asm sürümünü yeniden yazıp hızlandırdım o kadar(mesela string boyunu bulan fonksiyonu biraz hızlandırdım). Eminim fpga ilerde çok daha ün kazanacaktır belki cpu ların yerini alacak çünkü bir program ile işleyişini değiştirebiliyorsun mesela "2 çekirdek olsun 1 MB önbellek olsun" mantığında bir program gönderiyorsun tık tık ayarlıyor ve istediğin oluyor, sonraki gün baktın 8 çekirdek gerekti ver programı al çekirdekleri. En güzel özelliklerinden biri de girdi çıktı olayının sabit hızlı olması yani hiç kasıntı yaşamaması.




  • Fpga sıradan yazılım geliştiricilerin yapabileceği şey değil. Bir kere kendi gömülü donanımınız olacak. Fpga çipleri mcu lardan çok daha pahalı. Üzerine kod yazma mikroişlemcilerden tümüyle farklı. Çekirdek falan yok, yazdığınız kod sentezlenip fpga üzerinde lojik bağlantıları oluşturuyor ve üzerindeki mantık kapılarının elverdiği sürece paralel olarak çalışabiliyor. Yani kod aslında yazılımsal değil donanımsal olarak çalışıyor. Verimli olabilmek için lojik devre dizaynı hakkında da bilgi sahibi olmanız gerek. Burada söz edilmesi mantıksız. Yeter ki o kadar ağır algoritma çalıştıracak ihtiyacınız olsun. Çözüm bir şekilde bulunur. Sanki proje varda işlemci sorun oldu.
  • Arkadaşlar merhaba, 16F877 ile işlere başladım. Sonra ARM veya FPGA programlamaya geçmeyi düşünüyorum. Doğru mu yapıyorum sizce ?

    Elektrik-Elektronik Müh. 3.sınıfa geçtim
  • kitap al en iyisi
  • Siz aynı şeyden mi bahsediyorsunuz?
  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • Eğer ingilizce bilginiz varsahttp://www.tutorialspoint.com/assembly_programming/assembly_introduction.htm benim favorilerimde ekli böyle bir site var.Umarım işinize yarar.
  • Kolay değil api lerle iç içe olman lazım.
    ingilizce bilmek zorundasın çünkü yeterli türkçe kaynak yok
    http://crackmes.de bu sitede biraz örnekleri incele.
  • Assembly çok zordur hocam .Allah kolaylık versin . Türkçe kitap pek bulamazsın . Bulsanda emir kodlarını verir ama bir program nasıl yazılır pek değinmez. Nette simulatörler var . Yabancı kaynaklar en iyisi

    Ne için öğreneksin acaba ?
  • Assembly Aslında basitttir.
    Gören Kişi Değerlerin ne işe yaramadığını bilmeyince zor diyebilir.
    Aslında ben eski bir kitap ve 80 sayfalık bir pdf çıktısından öğrendim Assembliy i.Zor Değil .Ve şimdi işletim sistemi yapıyorum kendi çapımda.Eğer Assemblye Başlayacaksan Netwide Assembler (Nasm) Kullan Bence.Diğerleri Daha Zor Ve Boş.
  • acaba o pdf i bulma şansımız varmı yada sızde varsa bize atabılırmısınız
  • Assembly programlama dili değildir diyen arkadaşlar şayet Bilgisayar Mühendisliği okuyor veya mezunlarıysalar , diplomalarını yırtabilir veya kayıtlarını sildirebilirler.
    "An assembly language is a low-level programming language for a computer, or other programmable device, in which there is a very strong (generally one-to-one) correspondence between the language and the architecture's machine code instructions." -Wikipedia

    He daha akademik bir alıntı istiyorsanız , Assembly alanında artık bir başucu kitabı haline gelen (Tıpkı Knuth'un The Art of Computer Programming serisi gibi) , Randall Hyde'a ait The Art of Assembly Language kitabının adına bakabilirsiniz. Kitabın adı zaten Assembly Language içeriyor. Kitaptan küçük bir alıntı yapalım ;
    "What’s Wrong With Assembly Language
    Assembly language has a pretty bad reputation. The common impression about assembly language
    programmers today is that they are all hackers or misguided individuals who need enlightenment."

    Assembly , alçak seviye bir programlama dilidir. (Şöyle el kaldırıp hayıııır alçak seviye dil dediğin C diiiir diye zıplayacak arkadaşlar için bknz : Tanenbaum Hiyerarşisi)
    Öncelikle Assembly öğrenecekseniz , hangi işlemci mimarisini ve ailesini hedef alacağınızı belirlemelisiniz. Zira , donanıma oldukça yakın olan bir dil olarak , aynı mimariyi kullanan farklı işlemci ailelerinde bile farklılıklar gösterir.

    Söz gelimi , Intel'in x86 mimarisinde Assembly öğrenmek istiyorsunuz. Şimdi ikinci basamak , bir Assembler belirlemektir. Basit şekliyle söylemek gerekirse bir Assembler , Assembly dilinde yazılmış kodu executable (.exe) koda çeviren yazılımdır. İçerisinde Linker , Compiler , Loader gibi yapılar barındırır (Loader esasen OS'a ait ama neyse.). Her assemblerın sentaksı az çok farklılık gösterir.

    Örnek vereyim ;

    TASM'de (veya MASM); MOV AX , Degisken1 ile yapacağınız işlemi
    NASM'de , MOV AX , [Degisken1] ile yaparsınız. (NASM otomatik offset tanımlama gibi yardımcı elemanlar kullanıyor. Güya siz kolay programlayın diyeymiş ama hiç bulaşmayın derim.)

    Bu aşamayıda geçtik. Artık öğrenmeye başlayabiliriz.

    1)İşlemci ailesi belirledik
    2)Assembler seçtik
    3)Önemli. Seçtiğiniz işlemci ailesinin organizasyonunu ve mimarisini (farklı kavramlar) en azından başlangıç seviyesinde öğrenin. (General Purpose registerlar kaç tane , shift registerlar kaç tane , ALU kaç bitlik , little endian mı big endian mı , coprocessor var mı , FPU var mı , single cycle mı - multi cycle mı , pipeline var mı , superscalar mı vb...)

    Mimari ve organizasyonu da az çok kavradık.

    4)İyi bir Assembly kitabı edinin. x86 ailesi için önerilerim ,

    80X86 IBM PC and Compatible Computers: Assembly Language, Design and Interfacing Vol. I and II (3rd Edition) Mazidi ailesinin muhteşem kitabı.
    Assembly Language for x86 Processors Irvine Kip'in , MASM kullanan modern kitabı.
    IBM PC Assembly Language and Programming - Peter Abel bulabilirseniz okuyun nadir bir kitap

    ve başlıkta bahsettiğimiz , The Art of Assembly Programming Randall Hyde.


    Çalışırken , "bu da detay bilgi artık" diyerek hiçbir bilgiyi atlamayın. Peter Abel ve tüm ASM programcıları , sık sık belirtirler : Assembly programcılığı detaycı bir iştir. Sözgelimi , bir 8086'lı bilgisayarın , klavye bufferının başlangıç adresi , size detay gibi gelebilir. Ama değildir.



    NOT : ASCII tablosunu ve 16lık sayı sistemini akıcı bir şekilde bilmenizde fayda var. Özellikle 16lık sayı sistemi kısmı çok önemli.
    NOT2: 8086 işlemcisinde program yazmak ve denemek için emu8086 programını deneyebilirsiniz. 8086 işlemcisinin çalıştığı bir sanal makine emülasyonudur.

    Bunun dışında merak ettiklerin için özel mesaj atabilirsin.




  • Madem ki FPGA'den bahsedilmiş biraz ona da değinelim. FPGA'ler , ülkemizde malesef pek satılmıyor. Uygun fiyatla satan bir Çizgi Tagem vardı onu da kapattılar. Yurt dışından getirme şansınız varsa Academic Discount (öğrenci indirimi) ile yaklaşık 200 TL'ye , başlangıç seviyesinde bir FPGA alabilirsiniz.

    FPGA'lerin programlanması öyle önce şunları şunları yap daha oraya çok var şeklinde bir programlama değildir. FPGA'ler söz konusu olduğunda işin içine Hardware Description Language'lar girer. Bu diller , programlama dili gibi kodlar yazarak , FPGA üzerindeki lojik kapı dizilerini istediğiniz şekilde kombine etmenizi sağlar. Bu yolla , FPGA içinde istediğiniz donanımı tasarlarsınız yazılımsal olarak. Sentaksı C'ye benzeyenler de var , Pascal'a benzeyenler de. VHDL , JHDL , Verilog vb.

    Mesela Verilog ile bir flip flop yazacaksınız ;
    module flop (clk, d, q);
    input clk, d;
    output q;
    reg q;

    always @(posedge clk)
    begin
    q <= d;
    end
    endmodule

    Bu pozitif kenar tetiklemeli bir flip flop oluşturacaktır FPGA içerisinde. Ortalama bir donanım bilgisine sahip birisi olarak , çalışarak ve tasarlayarak öğrenebilirsiniz. FPGA'ler özellikle prototip tasarımında önem arz ediyor. Fakat öte taraftan , tek başına yeterli değil. FPGA'lerde tasarlanan donanımların entegresi üretilirken çok fazla sahtecilik oluyor. Wafer teknolojisi hala kilit önem taşıyor.


    Bu arada yukarıda gördüm ki Assembly'nin makina dili olduğu iddia edilmiş. Fakat değildir. Örnek verelim ;

    000000 00001 00010 00110 00000 100000 solda , MIPS mimarisine ait R tipi , makina dilinde yazılmış bir kod görüyoruz. Assembly gibi gözüküyor mu ? Hayır. Reg1 ve Reg2'deki sayıları toplayıp Reg6'ya yazan bir kod bu. İnanmayanlar , hadi şu kitabı açın bu kitabı açın demiyorum ama , Google'a "Machine Language" yazarlarsa sevinirim*.


    *Ben google'a güvenmem madem çok bir halt biliyorsun referans ver diyenler için : Herhangi bir Bilgisayar Organizasyonu veya Assembly kitabı. Ama kitap olacak. Bloglardaki tutoriallar değil. Bilgisayar Bilimleri hocaları tarafından yazılmış olacak.

    *http://en.wikipedia.org/wiki/Machine_code



    < Bu mesaj bu kişi tarafından değiştirildi spartico -- 28 Temmuz 2013; 5:19:01 >




  • Ben mühendis değilim ama assembly nin programlama dili olmadığı biliyorum. Verdiğin tanımda geçen "(generally one-to-one) correspondence between the language and the architecture's machine code instructions." ifadesinin ne anlama geldiği gayet açık.

    Makina dili ile sembolik makina dili (assembly) arasında fark yok. Bu C' de #define ile sembolik sabit tanımlama gibidir. Ha sabiti direkt yazmışsın ha semboliğini. Makina kodu yazmak için belleğe opcode girmeye gerek yok. Asm de bal gibi makina kodudur. Daha da ikna olmayan varsa derleyici ve çevirici kavramlarına göz atsın. Assembly compiler diye birşey yoktur, assembler vardır.
  • Fizik mühendisiyim ama diplomamı alalı çok olmadı yırtmayayım

    Bir sorum olacaktı: sanal makine kurup içine 16 ya da 32 bit bir işletim sistemi kurduktan sonra assembly öğrenirken sistemi çökertirsek gerçek işletim sisteminin de çökme olasılığı var mı?



    < Bu mesaj bu kişi tarafından değiştirildi Tugrul_512bit -- 28 Temmuz 2013; 13:09:37 >
  • Tugrul_512bit kullanıcısına yanıt
    evet onuda cokertırsın
  • elektro_gadget , Assembly'nin programlama dili olarak sayılmadığı tek bir kitap gösterebilirseniz hepimiz aydınlanmış oluruz. Bilgisayar Bilimleriyle ilgili akademik camiayı aydınlatmış olursunuz.
    Tuğrul Bey , eğer bahsettiğiniz Virtual Box veya VMWare gibi programlar ise , hayır. Deneyimle sabittir , Oracle'ın Virtual Box'una kurduğum FreeBSD'yi , kerneline saldıracak bir rootkit yazarak çökerttim. Hiçbir sorun yok. Zaten , sanal makine sistemlerinin temel amacı budur , soyutlama sağlamak. Ve fakat , donanıma vereceğiniz zararlar konusunda yorum yapamam. Ama çoğu profesyonel yapay makine yazılımı , gerçek (host) işletim sistemi ve donanım ile aranıza geçilmez bir bariyer koyar. Geçmenize zaten izin vermez.

    elektro_gadget'a gelince ;

    "An assembly language is a low-level programming language for a computer, or other programmable device, in which there is a very strong (generally one-to-one) correspondence between the language and the architecture's machine code instructions."

    Türkçesi : "Bir assembly dili , bir bilgisayar veya başka bir programlanabilir cihaz için alçak seviyeli bir programlama dilidir. Bu dil ile mimarinin makine dili komutları arasında çok güçlü (genellikle bire bir) bir uyuşma vardır."

    Burada kast edilen , mimarinin instructionları ile assembly dilinin mnemoniclerinin birbirlerini karşılamasıdır. Assembly "programlama dili" , makine dilinin insan tarafından kolay anlaşılabilmesi için geliştirilmiş bir mnemonic programlama dilidir.



    "How Does Assembly Language Relate to Machine Language?
    Machine language is a numeric language specifically understood by a computer’s processor (the CPU). All x86 processors understand a common machine language. Assembly language consists of statements written with short mnemonics such as ADD, MOV, SUB, and CALL." Irvine Kip , Assembly Language for x86 Processors 6th Ed. Sayfa 4.

    Türkçesi : "Assembly Dili'nin Makine Diliyle ilişkisi nedir?
    Makine dili , özellikle bilgisayarın CPU'su tarafından anlaşılan bir nümerik dildir. Tümm x86 işlemcileri ortak bir makine dili ile çalışır. Assembly dili , ADD , MOV , SUB gibi mnemoniclerle yazılmış ifadeler(statement)'den oluşan bir dildir."



    Resimde görülen kısım , Mazidi'nin 80x86 için Assembly kitabından. Ne diyor ? "Assembly Language is referred to as a low-level programming language..."

    Okulunu okumadıysak da , kitabını okuyalım. Oradan buradan toplama bilgilerle sallamayalım. Yanlış biliyorsak da , öğrenelim , hatamızı kabul edelim.





  • Konuya yaklaşımınız ilginç gerçekten. Asm nin prog. dili olduğunun kanıtı kitaplarda geçen "low level programming language" ifadesi midir? Bu kadar tecrübeden sonra bunu kendiniz yorumlayamıyor musunuz?

    Asm ye prog. dili denmesinin sebebi muhtemelen herkes tarafından anlaşılması içindir ve böylece dile yerleşmiştir. Bundan emin değilim tabi. Emin olduğum şey assembly nin bir dil olarak diğer prog. dilleri arasına girmeyeceği. Yani birisi size birkaç tane prog. dili say dese ve sizde;
    C
    Java
    Delphi
    Assembly
    ...
    derseniz hata etmiş olursunuz. Asm, bir prog. dilinde olması gereken özelliklerin neredeyse hiçbirini karşılamaz. Prog. dilleri uygun bir derleyici veya yorumlayıcı ile istenilen sistemde çalıştırılabilir. Asm sadece kendi cpu sunda çalışır. Prog. dillerinde a = b gibi en basit ifadenin bile hangi instruction lara tekabul ettiği önceden bilinemez. Asm de bu açıkça önceden bellidir (adı bu yüzden sembolik makina dili). Prog. dillerinde bellek ve yazmaçlar ile ilgilenilmez. Soyut nesneler kullanılır ve bunların bellekteki karşılığı derleyiciyi ilgilendirir bizi değil. Asm de bir prog. dilinde olması gereken dil bilgisi (grammar) yoktur. Sadece syntax vardır.

    Bunlar aklıma gelenler. Yani ben neyin prog. dili olup neyin olmadığını anlamak için kendi bilgimi mi yorumlayacam yoksa kitaplardaki terimlere mi takılacam?




  • quote:

    Orijinalden alıntı: elektro_gadget

    Konuya yaklaşımınız ilginç gerçekten. Asm nin prog. dili olduğunun kanıtı kitaplarda geçen "low level programming language" ifadesi midir? Bu kadar tecrübeden sonra bunu kendiniz yorumlayamıyor musunuz?

    Asm ye prog. dili denmesinin sebebi muhtemelen herkes tarafından anlaşılması içindir ve böylece dile yerleşmiştir. Bundan emin değilim tabi. Emin olduğum şey assembly nin bir dil olarak diğer prog. dilleri arasına girmeyeceği. Yani birisi size birkaç tane prog. dili say dese ve sizde;
    C
    Java
    Delphi
    Assembly
    ...
    derseniz hata etmiş olursunuz. Asm, bir prog. dilinde olması gereken özelliklerin neredeyse hiçbirini karşılamaz. Prog. dilleri uygun bir derleyici veya yorumlayıcı ile istenilen sistemde çalıştırılabilir. Asm sadece kendi cpu sunda çalışır. Prog. dillerinde a = b gibi en basit ifadenin bile hangi instruction lara tekabul ettiği önceden bilinemez. Asm de bu açıkça önceden bellidir (adı bu yüzden sembolik makina dili). Prog. dillerinde bellek ve yazmaçlar ile ilgilenilmez. Soyut nesneler kullanılır ve bunların bellekteki karşılığı derleyiciyi ilgilendirir bizi değil. Asm de bir prog. dilinde olması gereken dil bilgisi (grammar) yoktur. Sadece syntax vardır.

    Bunlar aklıma gelenler. Yani ben neyin prog. dili olup neyin olmadığını anlamak için kendi bilgimi mi yorumlayacam yoksa kitaplardaki terimlere mi takılacam?

    Bir programlama dilinde olması gerek şeylerin bir kısmı "high-level assembler" denilen şeylerde var gibi gözüküyor. Mesela HLASM ve Linoleum. Bunlarda döngü ve muhakeme ifadelerinin yanında makrolar ve değişkenler de var. Bunlar sayılabilir mi?




  • 
Sayfa: 123
Sayfaya Git
Git
sonraki
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.