Home > MCU > Küçük – BÜYÜK Harf Dönüşümü (Assembler + HEYCAN VERİCİ)

Küçük – BÜYÜK Harf Dönüşümü (Assembler + HEYCAN VERİCİ)

Posted on 16 Şubat 2007 | 8 Yorum

Assembler dili ile uğraşanlar için ufak bir kod ile küçük karakterdeki harflerin NASIL BÜYÜK KARAKTERE dönüştürüldüğüne bir bakalım.

ASCII tablosunu incelerseniz küçük harflerin hexadecimal olarak 0x61den başladığını, BÜYÜK harflerin de 0x41den başladığını göreceksiniz. 0×61="a" ve 0×41="A" karakterlerine denk gelmektedir. Bu iki karakter arasındaki fark

0×61-0×41 = 0×20 (Ondalık olarak 32)’dir .

Yani elimizdeki veri değerine göre decimal 32 eklememiz (BÜYÜK -> küçük) veya çıkarmamız (küçük->BÜYÜK) dönüşüm için yeterli olacaktır.

Küçük bir örnek ile bunu uygularsak; Kullandığımız assembler dili AVR işlemciler için geliştirilmiş olan dildir;

// R16 = 0x62   karakter karşılığı Küçük "b" harfi
ldi R16, 0x62
// R16 = R16 - 0x20 karakter karşılığı BÜYÜK "B" harfi
subi R16, 0x20

Yada ikinci bir yol olarak, asembler yapısına daha fazla hakim olan ve işlemci mantığını bilenlere yapancı gelmeyecek, çok daha heycanlı bir kod parçası olarak;

// R16 = 0x62,	R16 = "b" harfi
ldi R16, 0x62
// R16 = R16 & (~0x20), R16 = "B" harfi
andi R16, (~0x20)

Bu ikinci kod parçacığında işlemcinin sevgilisi olan "1 ve 0" mucizesini kullanıyoruz. İşlemcilerde "Çıkarma" işlemi aşina olduğumuz, okullarda gördüğümüz şeklinden çok daha farklı bir algoritma ile çözülür. Nedir bu algoritma? Çıkarılacak olan sayı (yukarıdaki örnek için 0×20) önce ikilik sistemdeki TERSİNİ ALMA işlemine sokulur (~ bu işaret tersini al demek, yani 1 ler 0, 0 lar 1 yapılır) ve elde edilen değer (yukarıdaki örnek için 0×20′nin tersi 0xDF) ve çıkartma işlemini yapacağımız sayı ile VE (AND) işlemine tabii tutulur. Bunun sonucunda fark elde edilir.

Nasıl çok heycan verici değil mi?

» Tags: , , ,

8 Yorum

  • At 2007.02.16 21:51, Anonim said:

    Son yaptığın gerçekten ilginç….

    • At 2007.02.16 22:33, Mustafa KUTLU said:

      Gerçekte çıkarma işleminin çalışma şekili bu ama biz bunu okullarda öğrendiğimiz şekilde uyguluyoruz bilgisayarda. Fakat derleyici arkaplanda bunu bu algoritma ile işliyor. İşlemci bunu daha hızlı çalıştırıyor. Aslında assembler bilmek yüksek seviye programlama dillerini kullanırken çok faydalı oluyor. Gerçekleşen olayları daha iyi anlıyorsunuz tabii bunun yanında bilgisayarı daha iyi yorumluyorsunuz. Bence bilinmesi gereken bir dil.

      • At 2007.02.20 13:32, salo said:

        yaw bu tür çocuk işlerini anlatmaktan vazgeçip daha doğru düzgün bişiler anlatın artık

        • At 2007.02.20 13:39, Mustafa KUTLU said:

          Kimse çocuk olmadan büyüyemez

          • At 2007.02.24 13:36, Ertugrul KARA said:

            Bir rivayete gore meyve veren agac meyveyi veremeyen agaclarin sahibince taslanirmis.

            • At 2007.02.24 15:23, Mustafa KUTLU said:

              :)

              Meyve veren ağaçlardan olabilmemiz duasıyla…

              • At 2007.09.28 18:19, Selo said:

                Sen anlatta senden okuyalım salo.

                • At 2007.10.03 16:21, Berkant said:

                  ben bu çıkarma işlemini anlamadım. bu çıkarılacak sayının tersnin alınıp bulunan değerin çıkarma işlemi yapılacak sayı ile and yapılması işlemini anlamadım.
                  burda örneğin 2-1 nasıl hesaplanıyor?
                  10 and not(01)
                  10 and 10
                  10
                  gibimi

                  birisi açıklayabilirmi?

                  (Required)
                  (Required, will not be published)

                  Switch to our mobile site