1 ve 0 makine dili bilgisayarın hangi programına yazılır?

Eğer yanlış anlamadıysam yapmak istediğin şey pek de mantıklı değil. Evet, yazdığın Python kodu toplamda 1.008 bit yapabilir fakat Python yorumlayıcısının bu kodu arka planda çalıştırmak için yaptığı çok ve çok daha fazla işlem var.

Yani hiçbir bilgisayar programcısı ya da mühendis bu şekilde yazılım geliştirmiyor. Kullandığımız işletim sistemleri, derleyiciler ve yorumlarıcılar işin zor olan kısmını bizim için hallederler.

Çok basit bile olsa sadece 0 ve 1 yazarak yürütülebilir bir program mı yapmayı istiyorsun? Bunu yapmak çok daha kolay. Sadece iki şeye ihtiyacın var:
Neden DOSBox ve Hex editörü nedir?

Programımız 16-bit´lik bir x86 DOS uygulaması olacak çünkü olabildiğince küçük olmasını istiyoruz ve bu nedenle çalıştırabilmemiz için DOSBox emulatörü lazım.

Makine kodunu Notepad gibi bir metin editörüyle yazamayız. Metin dosyaları bizim bildiğimiz şekilde, yani text modunda açılırlar, okunurlar ve yazılırlar. Yürütülebilir ikili dosyaların ise binary modda açılması gerekir. Bunun için de Hex editörleri lazım.

Ben GNU/Linux ortamında Bless Hex editörünü kullanıyorum. Eğer Windows kullanıyorsan aşağıdaki Hex editörlerinden istediğin bir tanesini kullanabilirsin:
Hangi Hex editörü kullandığın fark etmez. İşine yarayan bir tanesini seçebilirsin. Gerekli kurulumları yaptıktan sonra tercih ettiğin Hex editörünü açıp aşağıdaki ifadeleri aynen yaz:

bless.png


Kopyala-yapıştır yapmak istersen diye kodu aşağıya ekliyorum:

[CODE title="Makine kodu (hexadecimal mod)"]ba0b 01b4 09cd 21b4 4ccd 2148 656c 6c6f
2c20 576f 726c 6421 0d0a 24[/CODE]

Eğer kendine daha fazla eziyet etmek istiyorsan :) kullandığın Hex editöründe eğer varsayılansa hexadecimal modu binary moda alıp sadece 0 ve 1 kullanarak da aynı programı yazabilirsin. Aynı programın binary (ikili) görünümü de bu şekilde:

[CODE title="Makine kodu (binary mod)"]10111010 00001011 00000001 10110100 00001001 11001101
00100001 10110100 01001100 11001101 00100001 01001000
01100101 01101100 01101100 01101111 00101100 00100000
01010111 01101111 01110010 01101100 01100100 00100001
00001101 00001010 00100100[/CODE]

Makine kodu olduğu için kodu başka herhangi bir işlemden geçirmemize gerek yok. Bundan sonra yapmamız gereken tek şey dosyayı HELLO.EXE adıyla kaydedip DOSBox emülatörü ile açmak:

dosbox.png


Tebrikler! Makine koduyla ilk programınızı yazdınız ve çalıştırdınız. 🙃

Program aslında x86 Assembly ile yazıldı ve NASM ile assembling edildi:

[CODE title="Assembly kodu"]org 100h
mov dx,msg
mov ah,9
int 21h
mov ah,4Ch
int 21h
msg db 'Hello, World!',0Dh,0Ah,'$'[/CODE]

Assembling etmek için: nasm -f bin HELLO.ASM -o HELLO.EXE
 
Hepinize teşekkür ederim sorumun cevabını aldım. @detista hocam hex editör olarak HxD indirdim. Hexadecimal'dan binary' e bir türlü geçiş yapamadım sağdaki binary bölümü sadece tek tek kabul edip hexadecimal bölümüne yazıyor. Dosyayı direk binary olarak nereden açabilirim?
 

Dosya Ekleri

  • Ekran Alıntısı.PNG
    Ekran Alıntısı.PNG
    57,7 KB · Görüntüleme: 88
Benim Python'da 126 Byte'lık (1008 Bit) büyüklüğünde bir dosyam var. Bu dosyayı çalıştırdığımda 1'den 10'a kadar tüm sayıları sırayla çarpıp ekrana yazıyor. Şimdi bu kodlar toplamda 1008 Bit yani 1008 tane 0 ve 1'den oluşuyor. Benim aynı bu şekilde 1008 tane 1 ve 0 yazıp aynı işlevi gören bir kodlar dizisi yazmam mümkün mü?
Yazarsam bilgisayarın hangi programına yazacağım? (mesela metin belgesi açıp 100101010101 falan mı yazacağım?)
Not: Bunu örnek amaçlı verdim daha küçük bir kod dizisi yazarım, onu 1 ve 0'larla yazmaya çalışırım merak ettiğim için denemek istiyorum bir de o kodları çalıştırmak için Python kullanmam gerektiğini biliyorum daha sonra onda çalıştıracağım ben sadece bu veriyi oluşturmak istiyorum. Son olarak Python'da yazdığım kodu 1 ve 0'lara dönüştüren bir program vb. bir şey var mı?
Artık, kullandığımız bilgisayarlar saklı yazılım bilgisayarı (Stored-program computer) olduğundan direkt olarak elektriksel sinyal şeklinde programlama yapamazsın her bir işlemci komutu hex düzende ascii olarak şifrelenir ve işlemci içinde çözülür, ayrıca python yorumlanan bir programlama dilidir ve kendi sanal makinesi vardır yani python'da yazdığın şeyler ilk önce baytkod'a oradan da python sanal makinesi yardımıyla işlemci komutuna dönüştürülür ve veri beslemesi yapamazsın.
 
Son düzenleme:
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Yeni konular

Geri
Yukarı