Volkan Atasever

mühendislik, edebiyat, retro computer, yazılım, şiir, nümismatik, bilişim, podcast ve daha bir çok yazılarım...

Assembly Öğreniyorum -1

clock Ekim 14, 2015 10:35 by author Volkan Atasever

Eğer benim siteme ve bu yazıya rastladıysanız bilişim ve bilgisayar bilimleri ile ilgileniyorsunuz demektir.

Alt seviyeli programlama olan assembly ile işlemcinin de komut setini kullanarak yapamayacağını bir şey yoktur. en alt seviye programlama olduğundan assembly dilini bilgisayar bilimlerinde uzmanım diyen birisinin mutlaka bilmesi gerekir. Normal hayatında uygulamıyorsa dahi en azından assembly dili ile program yazmış veya yazabilecek düzeyde olması beklenir. Bir bilgisayarın mimarisini başka türlü kavrayamaz ve hakim olamazsınız.

Yapacağımı küçük bir yazı dizisi olmasına rağmen ilk yazımda sizlere assembly nedir assemler nedir gibi kavramların üzerinde durmayacağım. Bununla ilgili çok sayıda kaynak var. Wikipedia veya bir sürü sitede 80'lerden beri olan kaynaklara rastlayabilirsiniz. Ben size pratik olarak nasıl assembly dilinde program yazabileceğimizi anlatıyor olacağım.

 

Wikipedia'ya göre assembly dilleri; https://tr.wikipedia.org/wiki/%C3%87evirici_diller

Assembly dilinin özel kullanım alanları vardır. Bunlar;

 1- Bilgisayar sistemini yakından tanımak için, 

2- Device driver (cihaz sürücüleri) yazmak için, 

3- Chip’lere program yüklemek için (PIC, microcontroller gibi...) 

4- İşletim sistemlerinin yapımında (OS), 

5- Şifre kırma ve Hacking işlemleri için, 

6- Virüs programları yazmak için, 

7- Elektronik tablo’lama (Excel gibi) programlarında.

kaynak:(Csharpnedir - eren erener)

Birkaç assembly örneği yaparken kullanacağım Arm işlemci olacaktır. Bunun için Texas Instrunmentsin geliştirme kitini kullanacağız. Kullanacağım kitin modeli Texas Instruments Tiva™ C Series EK-TM4C123GXL Geliştirme Kiti'dir.

Size 3 adet register ve ramde iş yapan assembly kodunu paylaşacağım. Bu assembly programlarını yazarken ve test ederken Texas Instrumentsin kendi geliştirme ortamını değil keil isimli geliştirme ortamını kullandım.

Keil ortamını kurmak için: www.keil.com adresini kullanabilirsiniz.

Şu anda temel assembly örnekleri vereceğim. daha sonra bu kodların geniş açıklamasını ve yeni örnekleri de sizinle paylaşıyor olacağım. Arm işlemciler ile assembly öğreniyorum küçük bir yazı dizisiz olacağından siz aşağıdaki assembly kodlarını incelerken serinin diğer yazıları hazırlanıyor olacaktır.

İlk Assembly Örneğimiz:

AREA main_kod, CODE, READONLY

ENTRY

 

EXPORT SystemInit

EXPORT __main

EXPORT __use_two_region_memory

 

__use_two_region_memory EQU 0

 

SystemInit

BX LR

 

__main 

 

LDR R0,=SAYI1

LDR R1,=SAYI2

 

LDR R3,[R0]

LDR R4,[R1]

 

ADD R5,R3,R4

SAYI1DCD 5

SAYI2DCD 8

 

 

END

 

İkinci Assembly Örneğimiz:

AREA main_kod, CODE, READONLY

ENTRY

 

EXPORT SystemInit

EXPORT __main

EXPORT __use_two_region_memory

 

__use_two_region_memory EQU 0

 

SystemInit

BX LR

 

__main 

 

LDR R0,=SAYI1

LDR R1,=SAYI2

 

LDR R3,[R0]

LDR R4,[R1]

 

ADD R5,R3,R4

 

LDR R5,=SONUC

STR R6,[R5]

 

SAYI1DCD 5

SAYI2DCD 8

 

DONGU

B DONGU

 

AREA bellek, DATA,READWRITE

SONUC DCD 0

 

END

 

Üçüncü Assembly Örneğimiz:

AREA main_kod, CODE, READONLY

ENTRY

 

EXPORT SystemInit

EXPORT __main

EXPORT __use_two_region_memory

 

__use_two_region_memory EQU 0

 

SystemInit

BX LR

 

__main 

 

LDR R0,=SAYI1

LDR R1,=SAYI2

 

LDR R3,[R0]

LDR R4,[R1]

 

ADD R5,R3,R4

ADD R7,R3,R4, LSL #2

 

LDR R5,=SONUC

STR R6,[R5]

STR R5,[R0, #4]

 

SAYI1DCD 5

SAYI2DCD 8

 

DONGU

B DONGU

 

AREA bellek, DATA,READWRITE

SONUC DCD 0

 

END

 

Bir sonraki yazımızda register, komutlar, ram bölgesi vb. kavramları anlatırken aynı zamanda bu uygulamalarımızın adım adım ne yaptığını açıklayacağız.

 



AngularJS Başlangıç İpuçları

clock Temmuz 29, 2015 07:59 by author Volkan Atasever

Bu kategoride angularjs ipuçları vermeye çalışacağım. ilk vereceğim ipucu genel ve yeni başlayanlar için olacaktır. Zaman buldukça angulajs kategorisini ipuçları ve örneklerle geliştireceğim.

AngularJS kullanmaya yeni başladıysanız fakat öncesinde javascript veya jquery ile geliştirme yaptıysanız hiç zorlanmayacağınızı söyleyebilirim. 

Angularjs ile html tarafında bir değişkenin değerini almak için {{değer}} parantezlerini kullanabilirsiniz.

Angularjs'i projenize eklemek için;

<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>

taglerini kullanabilirsiniz.

ng-init, ng-model,ng-disable,ng-hide,ng-click, ng-bind, ng-repeat gibi direktifler öncelikle işinizi görecektir. scope'lara dikkat etmek gerekir. O an çalıştığını scopetaysanız bir değeri $scope.degerismi veya doğrudan degerismi olarak çağırabilirsiniz. Eğer değişken üst scopetaysa $parent kullanmanız gerekir.

 



Güneş Doğuş ve Batış Saatlerini Hesaplama

clock Temmuz 29, 2015 07:37 by author Volkan Atasever

Bazen yaptığımız projelerde spesifik işlerle karşılaşabiliyoruz. Şu anda üzerinde çalıştığım işte güneş doğuş ve batış saatlerini dünyanın herhangi bir yerinin koordinatlarını vererek bulmak gerekti. Bildiğiniz gibi koordinatlar latitude ve longitude değerleri olarak gelmekte. Bunun için daha önce yapılmış bir C# sınıfı buldum fakat bu sınıf sadece derece, dakika ve saniye cinsinden değerlerle çalışıyordu. bunun için latitude ve longitude değerlerinide derece, dakika ve saniye cinsine çevirmem gerekti. hemde North, West, East ve South değerleriyle vermemiz gerekiyor. North- South ve East-West ikilileri koordinatın - ile gelip gelmemesine göre değişmektedir.

Öncelikle Sunset ve Sunrise yani gün doğumu ve gün batımı değerlerini aldığım kodu açıklayacak ardından üstüne geliştirdiğim lat ve long değerlerini derece,dakika ve saniye cinsine yaptığım çevrimi ve ek özelliği paylaşacağım.

Bu işlemin önemi eğer bir lokasyondaki gün doğumu ve batımı saatlerine ihtiyacınız olursa bunun için çoğu kişi web servis kullanıyor. Bu hazır sunulan web servisler ya bazen down oluyor ya da doğru sonucu vermiyor. bu sınıf ve geliştirdiğim ek özellik sayesinde bir web servise ihtiyacınız olmadan lokal olarak bu özelliği kullanabileceksiniz. GMT'ye dikkat etmeyi unutmayın.

Sınıfdaki metotun kullanımı aşağıdaki şekildedir;

SunTimes.Instance.CalculateSunRiseSetTimes(new SunTimes.LatitudeCoords

                       (latDegreeValue, latMinuteValue, latSecondValue, SunTimes.LatitudeCoords.Direction.South),

                                    new SunTimes.LongitudeCoords

                       (longDegreeValue, longMinuteValue, longSecondValue, SunTimes.LongitudeCoords.Direction.East),

                                    date, ref sunrise, ref sunset,

 

                     ref isSunrise, ref isSunset);

 

Geliştirdiğim özellik latitude ve longitude üzerinden çevrim aşağıdaki gibidir;

        static void Main(string[] args)

        {

            double lat = 40.266864;

            double lng = 29.063448;

 

            DateTime date = DateTime.Today;

            bool isSunrise = false;

            bool isSunset = false;

            DateTime sunrise = DateTime.Now;

            DateTime sunset = DateTime.Now;

 

            string strLatitude = lat.ToString();

            string strLongitude = lng.ToString();

            int latitudeRoute = 0;

            int longitudeRoute = 0;

 

            if (strLatitude[0] == '-')

            {

                latitudeRoute = 0;

            }

            else

            {

                latitudeRoute = 1;

            }

 

            if (strLongitude[0] == '-')

            {

                longitudeRoute = 0;

            }

            else

            {

                longitudeRoute = 1;

            }

 

            bool latDegreeFinish = false;

 

            int latMinuteCounter = 0;

            string latDegree = "";

            string latMinute = "";

            string latSecond = "";

            bool degreeFlag = false;

            

            for (int i = 0; i < strLatitude.Length - 1; ++i)

            {

                if (strLatitude[0] == '-')

                    continue;

 

                if ((strLatitude[i] != '.' && strLatitude[i] != ',') && latDegreeFinish==false)

                {

                    latDegree += strLatitude[i];

                }

                else if(degreeFlag==false)

                {

                    latDegreeFinish = true;

                    degreeFlag = true;

                    continue;

                }

 

                if (latDegreeFinish == true && latMinuteCounter < 2)

                {

                    latMinute += strLatitude[i];

                    latMinuteCounter++;

                }

 

                if (latMinuteCounter >= 2 && latMinuteCounter < 4)

                {

                    latSecond += strLatitude[i];

                    latMinuteCounter++;

                }

            }

 

            bool longDegreeFinish = false;

            string longDegree = "";

            string longMinute = "";

            string longSecond = "";

            int longMinuteCounter = 0;

            degreeFlag = false;

 

            for (int i = 0; i < strLongitude.Length - 1; ++i)

            {

                if (strLongitude[0] == '-')

                    continue;

 

                if ((strLongitude[i] != '.' && strLongitude[i] != ',') && longDegreeFinish == false)

                {

                    longDegree += strLongitude[i];

                }

                else if(degreeFlag==false)

                {

                    longDegreeFinish = true;

                    degreeFlag = true;

                    continue;

                }

 

                if (longDegreeFinish == true && longMinuteCounter < 2)

                {

                    longMinute += strLatitude[i];

                    longMinuteCounter++;

                }

 

                if (longMinuteCounter >= 2 && longMinuteCounter < 4)

                {

                    longSecond += strLongitude[i];

                    longMinuteCounter++;

                }

            }

 

            int latDegreeValue = Convert.ToInt32(latDegree);

            int latMinuteValue = Convert.ToInt32(latMinute);

            int latSecondValue = Convert.ToInt32(latSecond);

            int longDegreeValue = Convert.ToInt32(longDegree);

            int longMinuteValue = Convert.ToInt32(longMinute);

            int longSecondValue = Convert.ToInt32(longSecond);

 

            if (latitudeRoute == 0 && longitudeRoute == 0)

            {

                SunTimes.Instance.CalculateSunRiseSetTimes(new SunTimes.LatitudeCoords

                       (latDegreeValue, latMinuteValue, latSecondValue, SunTimes.LatitudeCoords.Direction.South),

                                    new SunTimes.LongitudeCoords

                       (longDegreeValue, longMinuteValue, longSecondValue, SunTimes.LongitudeCoords.Direction.West),

                                    date, ref sunrise, ref sunset,

                     ref isSunrise, ref isSunset);

            }

            else if (latitudeRoute == 0 && longitudeRoute == 1)

            {

                SunTimes.Instance.CalculateSunRiseSetTimes(new SunTimes.LatitudeCoords

                       (latDegreeValue, latMinuteValue, latSecondValue, SunTimes.LatitudeCoords.Direction.South),

                                    new SunTimes.LongitudeCoords

                       (longDegreeValue, longMinuteValue, longSecondValue, SunTimes.LongitudeCoords.Direction.East),

                                    date, ref sunrise, ref sunset,

                     ref isSunrise, ref isSunset);

            }

            else if (latitudeRoute == 1 && longitudeRoute == 0)

            {

                SunTimes.Instance.CalculateSunRiseSetTimes(new SunTimes.LatitudeCoords

                       (latDegreeValue, latMinuteValue, latSecondValue, SunTimes.LatitudeCoords.Direction.North),

                                    new SunTimes.LongitudeCoords

                       (longDegreeValue, longMinuteValue, longSecondValue, SunTimes.LongitudeCoords.Direction.West),

                                    date, ref sunrise, ref sunset,

                     ref isSunrise, ref isSunset);

            }

            else if (latitudeRoute == 1 && longitudeRoute == 1)

            {

               bool err= SunTimes.Instance.CalculateSunRiseSetTimes(new SunTimes.LatitudeCoords

                       (latDegreeValue, latMinuteValue, latSecondValue, SunTimes.LatitudeCoords.Direction.North),

                                    new SunTimes.LongitudeCoords

                       (longDegreeValue, longMinuteValue, longSecondValue, SunTimes.LongitudeCoords.Direction.East),

                                    date, ref sunrise, ref sunset,

                     ref isSunrise, ref isSunset);

                Console.WriteLine(err);

            }

            else

            {

                ;

            }

 

            Console.WriteLine(sunset.ToString());

            Console.WriteLine(sunrise.ToString());

            

 

            Console.ReadLine();

 

        }

 

Uygulamanın bir gün için verdiği güneş batım ve doğum saatleri;

 

 

Uygulamanın C#kodları:

sunrisesunset.zip (52,96 kb)

 

Uygulamanın Sunrise ve Sunset Calculator sınıfı için baz aldığım referans: http://www.codeproject.com/Articles/29306/C-Class-for-Calculating-Sunrise-and-Sunset-Times

 



C# 6.0 Kitabım Çıktı!

clock Mayıs 14, 2015 10:57 by author Volkan Atasever

 

Önemli: Kitap hakkında yorumlarınızı ve sonraki baskılarda olmasını veya daha fazla üstünde durulmasını istediğini konuları bu postun altına yazabilirsiniz.

 

Kitabı sipariş vermek için SİPARİŞ LİNKİ - Kitapyurdu

Kitabı sipariş vermek için SİPARİŞ LİNKİ - Hepsiburada

Kitabı sipariş vermek için SİPARİŞ LİNKİ - D&R

 

YAYINEVİ: LEVEL KİTAP       YAZAR: VOLKAN ATASEVER  DİZİ EDİTÖRÜ: Uğur GELİŞKEN KİTAP ADI: C# 6.0 ISBN: 9786056567902 SAYFA SAYISI: 526 EBAT: 16,5*23,5 cm KÂĞIT: 1. Hamur KAPAK TASARIMI: Yunus Karaaslan DAĞITIM TARİHİ: 20.05.2015

C# 6.0 programlama dilini baştan sona size öğreten ve uygulayan bir kitabı elinizde tutmaktasınız. Visual Studio 2015 sürümünde gelen Cross Platform desteği ile Microsoft teknolojileri daha fazla değer kazanmıştır. iOS ve Android uygulamalarını Visual Studio 2015 ile birlikte geliştirebilmektesiniz. Bu programlama dilinin yükselişini gösterirken, aynı zamanda bu programlama dilini bilerek okulunuzda veya iş yaşamınızda bir adım daha öne geçeceksiniz. C# programlama dili Nesne Yönelimli bir dil olduğu için bu kavramlar ve nasıl uygulanacağı size ayrıntılarıyla anlatılmıştır. C# programlama dilini hem görsel hem de kodsal olarak öğrenebilmeniz hedeflenmiştir. Veri tabanı programlama ile temel veritabanı işlemlerinizi gerçekleştirebilirsiniz. REST ve SOAP web servisleri bu kitapta ayrıntılarıyla ele alınmıştır. Büyük bir uygulama geliştirmek için fazla beklemenize gerek yok; hemen C# 6.0 programlama dilini öğrenerek büyük projeler içine girebilirsiniz.

 

•C# Nasıl Doğdu ve Nasıl Gelişti

• Visual Studio 2015'i İnceleme ve Tanıma

•Windows Form Bileşenlerini Tanıma

•Temel Veri Tipleri ve Değişkenler

•Operatörler, Döngüler ve Deyimler

•Diziler ve String'ler

•Test ve Hata Yakalama

•Sınıflar, Nesneler ve Metotlar

•Kalıtım

•Indeks'leyiciler ve Özellikler

•Interface, Structure ve Enumaration

•Grafik Programlama

•I/O (Input/Output) İşlemleri

•Delegeler ve Olaylar

•Jenerik Koleksiyonlar, StringBuilder, Regular Expression, Bellek Yönetimi

•Çok kanallı, Asenkron ve Paralel Programlama

•Internet ve Ağ Uygulamaları

•Veri Tabanı İşlemleri

•XML ve Web servisleri ile çalışmak

•LINQ (Language Integrated Query)

•Java ile C# arasındaki benzerlik

•TFS Kullanımı

•Mobil Programlama

•C# ile Algoritma Örnekleri

 

Kitaptaki konuların ana başlıkları:

1. Bölüm: C# Nasıl Doğdu ve Nasıl Gelişti?.

2. Bölüm: Visual Studio İnceleme ve Tanıma

3. Bölüm: Windows Form Bileşenlerini Tanıma ve Kullanma

4. Bölüm: Temel Veri Tipleri ve Değişkenler

5. Bölüm: Operatörler, Döngüler ve Deyimler

6. Bölüm: Diziler ve String’ler

7. Bölüm: Test ve Hata Yakalama

8. Bölüm: Sınıflar, Nesneler ve Metotlar

9. Bölüm: Kalıtım

10. Bölüm: Indeksleyiciler ve Özellikler.

11. Bölüm: Interface, Structure ve Enumaration

12. Bölüm: Grafik Programlama

13. Bölüm: I/O (Input/Output) İşlemleri

14. Bölüm: Delegeler ve Olaylar

15. Bölüm: Jenerik Koleksiyonlar, StringBuilder, Regular Expression, Bellek Yönetimi

16. Bölüm: Çok Kanallı, Asenkron ve Paralel Programlama

17. Bölüm: Internet ve Ağ Uygulamaları

18. Bölüm: XML ve Web Servisleri ile Çalışmak

19. Bölüm: LINQ (Language Integrated Query)

20. Bölüm: Java ile C# Arasındaki Benzerlik.

21. Bölüm: C# ile iOS ve Android Uygulamaları Geliştirme

 

Yazar Hakkında: 

Volkan ATASEVER

Yazarımız, Bilgisayar Mühendisi olup Proje Yöneticisi, Eğitmen ve Danışman olarak iş hayatına devam etmektedir. Birçok üniversitede eğitim ve seminer vermiştir. PCWorld ve T3 dergilerinde köşe yazarlığı yapmış, daha önce de iki kitap yazmıştır. www.volkanatasever.com adresinden yazarı takip edebilirsiniz.



C# 6.0 ktiabım çok yakında sizlerle...

clock Mayıs 10, 2015 22:33 by author Volkan Atasever

Uzun süre üstünde çalıştığım C# 6.0 kitabı çok yakında sizlerle olacaktır. Kitapta sektörde kazandığım deneyimleri de sizlerle paylaştım.

 

 



Volkan Atasever Kimdir ?

E-Mail: volkan(et)volkanatasever.com

Kurucu&Genel Müdür/Software4Galaxy Ltd.
Bilgisayar Mühendisi
Eğitmen ve Danışman, Teknoloji Yazarı, Şair, Araştırmacı, Girişimci, Amatör Telsiz Operatörü, Amatör Denizci, Akvarist, Nümismat, Filatelist, Bilim İnsanı

Genel Duyurular

-Yakın bir zamanda Amatör Telsiz ve Amatör Denizcilik adında yeni iki kategori ile bilgilerimi paylaşıyor olacağım.

-DVTFL 9. ve 10. Sınıf Bilgisayar Bilimi dersini alan öğrencilerim ders panosunu kontrol ederek dönem projelerini seçmek zorundadır. açıklamayı okuyup ardından mail atınız.

-RC Araçlar kategorisi ilgi alanımdadır artık bu konuda da araştırmalar yapıp zaman buldukça projelerimi paylaşacağım.

-Üç yeni kitap çalışmasına başladım 2019 senesi içinde 3 yeni kitabım geliyor olacak. bu kitap sayısı maksimum dört adete çıkabilir. yoğun bir tempo gerekiyor.

Yasal Bilgi

Sitedeki yazıları,kodlar ve diğer materyaller Volkan Atasever'e aittir. Yazarı ve siteyi kaynak göstererek yazıları paylaşabilirsiniz.  Copyright(c)2004-2019

Sign In