Assembly hakkında

Başlatan Haydut, 27 Mayıs 2014, 18:45:03

Haydut

Merhaba

Ben PIC programcısı değilim ve bu konu hakkında hiç bir malumata sahip değilim.

Assembly hakkında forumumuzda bir tartışma okudum C ve Assembly tartışılıyordu

ben ciddi anlamda bir programlama dili öğrenmek istiyorum, internetten Assembly hakkında çok zor bir dil olduğunu ve proje hazırlanırken insanın isyan bile edeceğini bu denli zor bir dil olduğunu öğrendim

fakat uğraşmayı seven ve çabuk bıkmayan yapıya sahibim.

Assembly hakkında maalesef internette çok fazla bilgi bulunmuyor (Türkçe kaynak)

bir kitapçıdan x86 öğrenmek için kitap aldım daha elime ulaşmadı.


şimdi kitabı aldım fakat Assembly bilen üstadlar bu dil hakkında yorumları nedir ?

bana nasıl öneride bulunurlar başlangıç için ?

Ankaralıyım bu dil için kurs vs.. Öneri isterim teşekkürler.

Tagli

Hangi platformda assembly ile kod yazmaktan bahsediyorsun? Bilgisayar mı, mikrodenetleyici mi?

Şahsi görüşüm, özellikle bilgisayar tarafında aygıt sürücüsü falan yazmayacaksan, PIC tarafında ise özellikle çok hızlı yapılması gereken ama çok da karmaşık olmayan bir iş yoksa, assembly'e amaç odaklı olarak bulaşma. Bence yine temel seviyede öğren ama kullanma.

Öte yandan, amaç odaklı çalışırken, bazı uç durumlar haricinde assembly kullanmak pek mantıklı değilse de, asembly sırf eğlence için kullanılabilir, eğer yetişmesi gereken acil bir iş yoksa. Ben assembly'de kod yazmayı gazetedeki kutu bulmacaları veya Sudoku çözmeye benzetiyorum. Çok eğlenceli ama pek bir işe yaramıyor.

Dediğim gibi, aygıt sürücüsü veya işletim sistemi çekirdeğinin derinlikleri ile uğraşmayacaksan x86 assembly öğrenmek bana çok anlamsız geliyor. Tabi, eğlence olsun diye kod yazacaksan onu anlarım.
Gökçe Tağlıoğlu

z

#2
Assembly dilini bilen elemanları arayan şirketlerimiz varmıdır bilmiyorum. Yurtdışında bu tip adamlar aranıyor. Örneğin bir arkadaşım asm program yazamıyor fakat buna rağmen yazılmış programları okuyabiliyor diye tercih edildi. Crash olan programların loglarını falan inceliyor.

İşin inciğini boncuğunu öğrenmek istiyorsan asm iyidir. Her bir şeyle ilgilenmek zorunda kalırsın. Milletin yazdığı kütüphanelerle genellikle uğraşmazsın.

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

Kabil ATICI

Programlama dili sadece bir araçtır, asıl öğrenmen gereken programlamanın kendisi (mantığı) olmalı. Çünkü programlamayı öğrendiğin takdirde istediğin dile az bir gayretle öğrenebilirsin.

Her dilin kendine göre avantaj ve dezavantajları vardır. Kullanan kişiler kullandıkları programlara bağlı olarak herkes farklı bir cevap verecektir.
ambar7

Haydut

Alıntı yapılan: z - 27 Mayıs 2014, 19:20:50
Assembly dilini bilen elemanları arayan şirketlerimiz varmıdır bilmiyorum. Yurtdışında bu tip adamlar aranıyor. Örneğin bir arkadaşım asm program yazamıyor fakat buna rağmen yazılmış programları okuyabiliyor diye tercih edildi. Crash olan programların loglarını falan inceliyor.

İşin inciğini boncuğunu öğrenmek istiyorsan asm iyidir. Her bir şeyle ilgilenmek zorunda kalırsın. Milletin yazdığı kütüphanelerle genellikle uğraşmazsın.



Daha önce de belirttiğim gibi "amaç" için uğraş vermeyi severim, tükenmek bilmeyen bir sabrım mevcut. Zamanım da bol... : :)

Benden bir şeyler bekleyen bir patronum ya da birileri yok. Kariyer gibi bir takıntım da bulunmuyor, bunu "öğrenmek" için bilhassa da "zevk" için yapacağım.

Genel olarak programlama dillerinin isimleri işlevlerini yüzeysel olarak biliyorum ama hiç birini kullanmadım ve bilmiyorum. Yani 0 programlama bilgisi ile Assembly öğreneceğim.

Internetten bir kaç forum dolaşarak Assembly öğrenmeye karar verdim ve beni buna iten değer, Assembly'nin bilgisayarın doğal diline daha yakın olması ve diğer dillere yönelik daha güçlü bir dil olmasıdır.

Belki alternatif olarak öğrenilmesi ve uygulanması kolay olan programlama dilleri yüzünden Assembly'nin türkçe kaynakları üzülerek ifade ediyorum internette bulunmuyor ve ya insanlara öğretilmiyor.

Intel işlemcisi ve Windows işletim sistemi kullanan biri olarak 0 bilgi ile bu dile giriş yapacağım belki umduğumdan kolay olmayacak fakat "imkansız" değil!





RaMu

En eski dil asm ve en fazla kaynak asmde var
üzülerek kaynak yok demene gerek yok,
şuan konuda yazan arkadaşların çoğu (bende dahil)
asm program yazmayı seven mi desem fanatiğimi desem
sempatisi olanmı desem işte öyle birşey,
amacınaa hizmet etmeyecekse asm tavsiye edemiyoruz
çünkü gerçekten çok az kişiye yer olan yani ihtiyaç olan bir sektörü var
yani boşuna öğrenmiş olursun gibi birşey oluyor (yanlış anlaşılmasın açıklayacağım daha)

Şimdi bana kalırsa her programcı temel asm bilmek zorundadır,
yazılan program her halükarda asm de kullanılan komutlarla işi görür,
işin temelini bilen herzaman avantajlı olacaktır bu çok açık,
aynı zamanda asm kullanılan makinayı anlamanın en iyi yoludur
mikrodenetleyici mikroişlemci gibi düşünebilmeyi
kullanılan sistemi tamamen hissetmeyi sağlar,

Ne gerek var bunlara benim platformlarım çok güçlü zaten
c de basic te yazarım işlemci ne yaparsa ne kadar kasılırsa kasılsın
ben rahat rahat programımı yazmaya bakarım da denebilir
haklıdırda diyen, çok fazla birşey kaybetmez.

İşin özü şu,
pcye devc+ programını kur,
üniversite 1. sınıf c ders notlarını bul
aklına en yatanı en kolay bulduğunu oku devc de yaz hemen dene,
ders vidyolarıda çok yardımcı olur,
bu sayede programlama ne imiş
algoritma nasılmış kavranır,
işin temelini alttarafda ne olfuğunu merak ediyorsan
en basitinden bir pic (mikrodenetleyici, 16f84 16f628, 16f877 bunların çok fazla kaynağı var)
ile asm programlama çalış,
sonra c ile pic programla,
lazımsa pc programı yazmayada devam et,
bunlar yetmezse görsel pc programlarını yazmaya başlarsın
visual c gibi programlarla,
daha sonra html vs. internet sayfası oluşturma işleri olur,
dahada java programlama android programlamaya girersin,
olmadı iphone ipad tarafınada geçebilirsin,
hatta moda olan arduino gibi platformlarlada programlamaya başlayabilirsin,

Konu biraz geniş bilmem kafanımı karıştırdım yoksa birşeyler mi canlandırdım,
umarım faydası olur,
birde bu başlıkla aynı binlerce konu açıldı
açılmayada devam edecek,
yapabileceğin tek şey var
deneyip görmek,
fazla kurcalama başla biryerden gerisi gelir,
birşeyede fazla takılma başlangıçta dene dene
yatkın olduğun sevdiğin neyse kısa zamanda bulabilirsin.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Haydut

Tekrar merhaba Assembly kitabım dün geldi kitaba biraz göz attım şimdilik anladığım tek kısım yazmaçlardı :)



32bitlik yazmaçları destekleyen işlemcide 16 bitlik yahut 8 bitlik işlemci komutu kullanabilir miyiz ? 32 yerine kullanılan diğer yazmaçlar ne gibi etki eder programa ?

Tagli

İşlemciye göre değişir. Bazı işlemcilerde, doğal genişlik haricindeki erişimler daha yavaş olabilir. Mesela 32 bit bir makinede 16 bitlik veriye erişim daha yavaş olabilir belki.
Gökçe Tağlıoğlu

Haydut

#8
Anladım.

yazmaçları daha iyi kavrayabilmek adına basit örnek 2 uygulama istiyorum. Satın aldığım kitapta örnek mevcut ama ileri seviye....

açıklamalı olursa iyi olur ::)

1. .COM tipi ve 8 bitlik ekrana bir şeyler yazsın.
2. Yine .Com tipi 8 bitlik bilinen 2 rakamı toplasın örn7+11 gibi...

asm diğer dillere göre hakikatten zormuş fakat bıkmak yoook!

RaMu

Kullanılacak makinaya göre komutlar değişir, komut setini söylesen ona görede yazabiliriz,
ben mikrodenetleyici asm bildiğimden ona göre söyleyeyim, durum benzerdir,
microchip in 8 bitlik mdleri için;
toplama komutu 2 tane
ADDLW      K       ;add literal to w > W registerına (yazmacına) sayıyı ekle
yani K ile W toplanır sonuç W register ında olur,
burada W registerına toplanacak diğer sayı yazılması gerektiği görülüyor,
W registerına sayı yüklemekte
MOVLW   SAYI     şeklinde yapılır;
o zaman 7+11 işlemi şu şekilde yapılabilir
MOVLW  .07   ;w registerına decimal 7 yükle
ADDLW   .11   ;w registerı ile decimal 11 sayısını topla sonucu w registerına yaz.

Diğer toplama komutu
ADDWF    Fregister,(F veya W)   ;file registerı ile W reisterını topla
; , den sonra f varsa sonucu Fregister a W varsa W registerına yazar
Fregister bizim programda tanımlayıp kullandığımız ram bölgesinde bulunan genel kullanım registerlarından biridir,
o zaman
Movlw  .07                             ;W ya 07 yükle
Movwf   Fregister                  ;w içeriğini Fregister a yaz
Movlw   .11                            ;w ya 11 yukle
ADDWF  Fregister,F veya W   ;w ile f i topla
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Haydut

#10
Komutlar için teşekkür ederim.

öncelikle şu konuya açıklık getirelim benim öğrenmek istediğim ve üzerinde çalıştığım assembly 80x86
öğrenmek için satın aldığım kitap 80x86 Assembly dili diye bir kitap.

ben bu dil ile basit uygulamalar geliştirmek istiyorum, toplama, çıkartma vb... Zamanla öğrendikçe ileri seviye uygulamalarda yaparım inşallah.

şimdi benim öğrendiğim dil ile yazdığım uygulama intel işlemcili diğer makinalarda çalışacak mı ? Evetse, her işlemcinin kendine özgü komutları mı var ? Yani intel a işlemcisinde d komutu intel b işlemcisinde d değil de e mi kullanmalıyız ?

RaMu

#11
Aslında bunu söyleyebilmek için bütün işlemcilerden haberdar olmak lazım ama
3 aşağı 5 yukarı şukadarını söyleyebilirim

16 bitlik işlemcide yazdığın her komut 8 bitlik işlemcide çalışmaz
hatta 8 bitlikte yazdığın komutlarda 16 bitlikte farklı olur-olabilir
daha birde 32 bit olanlar var.

Benim asm den anladığım
tek kullanımlık kod yazarsın.

Örneğin yukarıdaki mesajda anlattığım komutların
yine microchipin 16 bitlik işlemci kullanan dspic30f2010 md si için olan hali;

MOV   #0xFFFF,W0       ;#0XFFFF DEĞERİNİ W0 A YÜKLE
MOV   W0,Fregister           ;W0 I Fregister a YÜKLE 

;8 bitlik değerle çalışmak için

MOV.B  #0X05,W2         ;#0X05 SAYISINI W2 YE YÜKLE

;dspic te w0 dan w15 e kadar geçici kullanılabilir registerlar vardır


	ADD	W13,W12,W13       ;w13 ile w12 yi topla w13 e yaz


;--------------------------
32 bit toplama çıkarma

MOV  #0x0000,W0
MOV  #0xFFFF,W2

MOV  #0xFFFF,W1
MOV  #0x0000,W3

;32BIT ADDITION
; Add two doubles (W1:W0 and W3:W2)
; Store the result in W5:W4
ADD W0, W2, W4 ; Add LSWord and store to W4
ADDC W1, W3,W5 ; Add MSWord and store to W5



;32BIT ÇIKARMA    ;   W1:W0
SUB W0,W2,W4      ; _ W3:W2
SUBB W1,W3,W5     ; ----------
                  ;   W5:W4

Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Tagli

Alıntı yapılan: RaMu - 31 Mayıs 2014, 22:39:38
Benim asm den anladığım
tek kullanımlık kod yazarsın.
Bu doğru değil aslında. ASM ile kütüphane oluşturulabilir, zaten sıklıkla da bu şekilde kullanılıyor. Genelde bu tür kütüphaneler sadece o ailedeki işlemcilerde çalışır. Örneğin, bildiğim kadarıyla Microchip'in dsPIC'ler için hazırladığı DSP kütüphanesi ASM ile yazılmış.
Gökçe Tağlıoğlu

z

@Haydut

Sanki 80x86 ailesi icin kitap aldin diye anladim. 8,16,32 bit komutlardan falan bahsediyorsun. Gelen cevaplara bakiyorum terslikler var.

Oncelikle sen hangi islemci icin asm ogreniyorsun? Yazdinda ben mi goremedim yoksa.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

speak48

her zaman diyorum
önce bir logic öğrenin sonra gerisi  gelir