Jump to content

Programcılar için: "Bellek"


Önerilen İletiler

Bilgisayar ne olursa olsun; ister kolunuzdaki kol saati, ister önünüzdeki laptop, avucunuzdaki mouse ya da cep telefonu, veya kocaman bir süperbilgisayar... Tümünde az veya çok, hızlı veya yavaş birçok "bellek" kullanılır.
Temelde bellek sadece "0" ve "1" değerini alabilen, "bit" adı verilen hücrelerden oluşur. Bilgisayarda bu bitler kullanılırken, sekizerli gruplar halinde kullanılır ve buna da byte (=bayt) denir. Eğer "ikili sayı sistemi" ve "onaltılı sayı sistemi" bilmiyorsanız, 20-25 sene önce yazdığım şu makaleye bir göz atıp geri dönün.

Bellekte bu byte'ların alt alta durduğunu düşünün:
11101001
11010010
00110101
gibi.
Bunlara bir de ad ya da adres vermemiz gerek ki, tanımlayabilelim. En üstten 0'dan başlayarak isim verebiliriz. Örneğin 100 tane byte'ımız varsa, bunlara 0'dan 99'a kadar isim verebiliriz. Bu "isim"lere "adres" denir. Bu kelimeye çok rastlayacağız. İngilizcesi de "Address"
Her byte, 8 tane 0 veya 1 içerdiğine göre, her bir byte aslında 0 ile 255 arasında bir değer alabiliyor demektir. Neden 0 ile 255 arasında olduğunu anlamadıysanız yukarıda linkini verdiğim makaleyi tekrar gözden geçirin.

Peki, bu bellek nerededir?

Bilgi içeren her yer. Mesela bilgisayarınızın diski. Ya da RAM belleği, USB bellek, hard disk, bunların tümü "bellek" içerir. Daha önemlisi, haberleşmedeki sinyaller de aynı şekilde bilgi içerdiğinden bu sinyallerin de bir nevi "bellek" olduğunu düşünebiliriz. Wi-fi, fiber kablo, kablosuz mouse'un sinyalleri, Bluetooth ya da ADSL. Buradan giden bilgileri de bellek gibi düşünebiliriz. Yani "bilgi" içeren her yerde bu sıfır ve birlerden oluşan byte'lar söz konusudur.

Bellekte bir resim, bir video, bir yazı, bir bilgisayar programı, android uygulaması, bir ses olabilir. Ama ne olursa olsun bu bilgiler daima sekiz tane 1 ve sıfırdan oluşan BYTE'lar ile ifade edilir.

Örneğin bir byte'taki bitler 01000000 şeklinde ise, bu bitler 64 sayısını, @ işaretini, z-80 adlı mikroişlemci için "b kaydedicisini bir arttırma komutu"nu ya da sesteki minik bir ânı, görüntüdeki bir pikselin bir parçasını, yahut 17236 sayısının bir parçasını ifade edebilir.

İletiye bağlantı
Sitelerde Paylaş

0 ile 255 arasında değer alabilen bir byte'ın farklı anlamlara gelebileceğini yukarıda söylerken 64 sayısının @ işaretine karşılık gelebileceğini ya da b kaydedicisini arttırma komutu veya 64 sayısı yahut 17236 sayısının bir parçası olabileceğini yazdım. 64 sayısı neden X harfine değil de @ işaretine karşılık geldi? Ya da biriktiriciye sayı yükleme komutu olduğunu nereden biliyoruz?
"Bu böyle olsun" diye bir kabul yapmışız. Demişiz ki: "64 sayısı, @ karakteri olsun". Tamamen keyfi. Birisi "ASCII tablosu" diye bir tablo yazmış ve 0'dan 255'e kadar sayıların her birinin karşısına bir karakter
yazmış. İşte, bu tabloda 64'ün karşısında @ karakteri var. Ama bu ASCII tablosunu yazan "birisi", Amerika'nın bu konudaki otoritesi olduğundan tüm dünya bu tabloyu kullanıyor. Ama bu, söz konusu tablonun "tamamen keyfi" seçildiği gerçeğini değişmiyor. Fakat artık bunlar bir "kanun" gibi artık. Altmış küsür senedir kemikleşmiş.

Peki, z-80 adlı mikroişlemci için "b kaydedicisini bir arttırm komutu" olduğunu nereden bileceğiz?
Bilmemiz gerekmiyor. Bu, çok özel bir bilgi. Eğer z-80 mikroişlemcisine makine dilinde bir program yazmayacaksak ihtiyacımız yok. Zaten artık makine dilinde pek program yazılmıyor. Ama şunu biliriz ki, bir bir program yazıp onu derlediğimizde, derleyicinin ürettiği koddaki her byte, bunun gibi, işlemci tarafından bir komut olarak anlaşılacaktır. Derleyicinin ürettiği bu kod, işlemci tarafından okunup çalıştırılacak bir şeydir. Bunun içeriğini özel durumlar dışında bizim anlamamız gerekmiyor.
Peki bu kod sanki bir metinmiş gibi, ASCII karşılıklarına bakarsak ne görürüz? Karman çorman harfler. Örneğin bir yerde işlemcinin b kaydedicisi 1 arttırma komutu varsa, orada @ işareti göreceğiz. Örneğin, mikroişlemcinin işleyeceği gerçek bir koda bir metinmiş gibi baktığımızda şöyle bir şeyler görebiliriz:

Alıntı

MZ       ÿÿ  ¸       @                                   è   º ´    Í!¸LÍ!This program cannot be run in DOS mode.

$       Öî[(’5{’5{’5{µI[{“5{µIH{“5{µIX{‚5{µIN{–5{äN{—5{’4{¾5{µIG{5{µII{“5{µIM{“5{Rich’5{        PE  d† ¡[<K        ğ #      Ò              @                             ëb   €                                           ü#  d    P  T   @  Ì    â  `          °!                                                 €                          .text   W                           `.rdata  ü       
                 @  @.data   ø   0                    @  À.pdata  Ì    @                    @  @.rsrc   T   P   Ä                 @  @                                                                                                                                                                                                                                                                                                                                        H옠  H‹ò  H3ÄH‰D$PHT$0I‹ÈH‰œ$   ÇD$0    ÿ,  ƒ|$0H‹Øt ¹g  ÿ·  ÌH‰´$€   H‹0H‰|$xH=  ¹   fó§t ¹g  ÿŠ  ÌL‹HL‰d$pHT$@HL$8A¸
   L‰l$hL‰t$`HÇD$
   ÿŸ  HL$@ÿŒ  L‹KHT$@HL$8A¸
   D‹èHÇD$
   ÿn  HL$@ÿ[  L‹KHT$@HL$8A¸
   D‹ğHÇD$
   ÿ=  HL$@ÿ*  L‹K HT$@HL$8A¸

Aaynen bu makaleyi işlemciye bir programmış gibi işletmeye kalktığımızda işlemcinin anlamlı bir şey yapamayacağı gibi. Bu kodu bir ses, müzik gibi dinlemek istersek bir gürültü duyacağız muhtemelen. Ya da bir resimmiş gibi bakarsak şöyle bir şey görebiliriz:
bb.png.f75dbdd9716939276bd394d449c56cc6.png
 

İletiye bağlantı
Sitelerde Paylaş

Şimdi sayılara gelelim:

Bir hücreye sadece 0 ile 255 arasında sayılar yazabiliriz. Peki büyük sayılar nasıl yazılır?
Onlar için de kimi kurallar konmuş. Mesela bu hücrelerden iki tanesini kullanırsak, 0 ile 65535 arası sayılar yazabiliriz. Her bir hücre 0-255 arasında değer alabileceği için, iki byte'a "256'lı sayı sisteminde 2 rakamlı sayılar" yazabiliriz. Bu da 0 ile 65536 sayılar anlamına gelir. "256'lı sayı sistemi" nedir anlamış olduğunuzu umuyorum.
Örneğin ard arda 35 ve 43 sayılarını koyarsak 9003 olur. ASCII karakter olarak 35 '#' karakteri, 43 ise '+' karakteridir. Ama asıl bomba şurada: Mesela ard arda 46 ve 56 gelirse, bu yukarıdaki "iki hücreye 0-65535 arası sayı yazma" yöntemine göre 11832 olur. ASCII karakter olarak ise 46 '1' karakterini, 56 ise '8' karakterini ifade eder. Sonuçta rakamlar da karakterdir. Yani ardışık iki bellek hücresinde "18" yazdığında, bu; 11832 anlamına gelebilir. "Ben 18 yazdım ama 11832 geldi, sorun nedir ki" demeyelim. :)

Lütfen sorularınız varsa sorun.

İletiye bağlantı
Sitelerde Paylaş
Misafir
Bu konuyu yanıtla

×   Yapıştırdığınız içerik biçimlendirme içeriyor.   Biçimlendirmeyi Temizle

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Önceki içeriğiniz geri yüklendi.   Editör içeriğini temizle

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Yeni Oluştur...

Önemli Bilgilendirme

Facebook / Twitter / Google hesabınızla kolayca kaydolup cevap verebilir, soru sorabilir, istekte bulunabilirsiniz.
Devam etmeniz, forum kurallarını kabul ettiğiniz anlamına gelir.            Forum Kuralları