PDA

Tam Sürümünü Görmek İçin : Assembly


yildizib
01/07/2004, 12:39
Assembly dili bilmiyorum.Bu dil makina dili diye geciyor değil mi?

Bir kaç sorum var ve bu konuyu merak ettim.
1-Kimi assembler diyor doğrusu ne?
2-Ceviz'deki artikel'de "makina dilinin(CPU’ya has özel bir alfabe) ingilizce kıslatmalara dönüştürülerek oluşturulmuş bir dildir.".Bu sözden anladığım assembly makina dili demek değil.Bir tür kısaltmalardan oluşan dil olduğu söyleniyor.
3-exe işlemciye hasmıdır?yoksa işletim sistemine has mı?


Euclides
01/07/2004, 13:11
3.
işletim sistemi+işlemci

Ansugo
01/07/2004, 13:13
Assembler derleyicisinin adi. Dilin adı assembly.

Assembly makine kodu demek degildir.

Exe isletim sistemine has birsey.

yildizib
01/07/2004, 13:32
Euclides;fakat sen bir yazında şunu diyordun,
"Crack'in mantığı çok basittir.Eğer işlemci okuyabiliyorsa bende okurum."
exe'ler makina kodu değil mi?
Bir de, 2.sorum senin artikelin ile alakalı idi.

Euclides
01/07/2004, 14:47
Ceviz.Net'eki yazımdan bir alıntı:
Assembly, makina dilinin(CPU’ya has özel bir alfabe) ingilizce kıslatmalara dönüştürülerek oluşturulmuş bir dildir. Bu özelliğinden ötürü tüm programlar (hangi dil ile yazılmış olusa olsun) bu dile dönüştürülebilir.(Disassembly).
Exe mimarisini 2. yazımda uzun uzun anlatacağım ama hafif bir gireyim.zaten exe demek windows demek.
Exe'ler 2 tane bilgi barındırır.
1.Windowsun bu program için nereye ne kadar bellek ayırması gerektiği, hangi DLL'lere bu programın ihtiyaç duyacağı. vb...
2.Programın kendisi. makina dilindeki kod.

Bundan yola çıkarak şunu söyleyebilirmiyiz ? Her program Assembly dilinde ifade edilebilecek bir şekle dönüştürülebilir.
Şimdi en tepedeki koyu yazılılı tekrar okuyalım. Buradanda şunu çıkartabilirmiyiz ? Eğer bir program CPU tarafından anlaşılıp çalıştırılabiliyor ise bizler tarafından da anlışılabilir.

acemi
01/07/2004, 14:59
Eğer bir program CPU tarafından anlaşılıp çalıştırılabiliyor ise bizler tarafından da anlışılabilir.
Sunu da belirtmek lazim sanirim: bu kodu anlayabilmek icin islemci gibi dusunmek lazim.

Ust seviye dillerle kod yazarken/okurken insan gibi dusunuruz ama alt seviye dillerle daha cok makine gibi dusunmeye baslariz. Makine dilinde (veya bunun sembolik karsiligi olan assembly'da) tam olarak islemci gibi dusunmek gerekiyor.

Islemci gibi dusunuldugunde butun detaylar gozler onunde oldugu icin bu karmasa icinde ana gidisati kestirmek zor olabilir. Matrix'de Neo'nun ilk basta akan kodlara bon bon bakmasi ve daha sonra ermislere karisip o detaylarin karmasasinda kaybolmadan butunu gorebilmesi gibi.

yildizib
01/07/2004, 15:24
Bi dakka, exe demek windows mu demek?yani windows cıkmadan exe yok muydu?

acemi
01/07/2004, 15:52
Eger bir dosya uzantisi olarak exe'yi soruyorsan, bu sadece DOS/Windows sistemlerde var. Dosyalarin calisabilir olup olmadigini DOS/Windows sistemler uzantilarina bakarak karar veriyor. Ornegin DOS/Windows sistemde .exe dosyanin uzantisini .html yaparsaniz bu sefer dosyayi calistirmaz, onu web tarayici ile acmaya calisir

Unix/Linux sistemlerde ise dosya uzantilarinin pek bir anlami yok. Bir dosyanin "calisabilir" olup olmadigini dosya uzantisi belirlemiyor. O nedenle Unix/Linux sistemlerde dosya uzantisi olarak .exe yok

Eger exe derken "executable (calistirilabilir)" dosyalari kasdediyorsaniz, bu butun sistemlerde var ama uzantilari illa .exe olmasi gerekmiyor.

yildizib
01/07/2004, 16:29
assembler bu dilin derleyicisi.Peki bu dilin derleyicisi niye var?Yani diğer üst seviye dillerin derleyicileri yazılan kodları makina koduna cevirmek için derlemiyorlar mı?

JJ
01/07/2004, 17:16
assembler, islemciler ingilizce bilmedigi icin var. assembly makina dili degildir. makina dilinde kullanilan komutlara ingilizce kelimelerin kisaltmalarindan olusan karsiliklar verilmistir. ama 1e 1 makine diline cevrilebilir. onun icin de assembler var.

acemi
01/07/2004, 18:12
Ozetle "assembly" ve "makine dili" ayni sey degil. Assembly kodlarinin da derlenerek makina diline cevrilmesi gerekiyor.

virU
01/07/2004, 22:18
Ceviz.Net'eki yazımdan bir alıntı:

Exe mimarisini 2. yazımda uzun uzun anlatacağım ama hafif bir gireyim.zaten exe demek windows demek.
Exe'ler 2 tane bilgi barındırır.
1.Windowsun bu program için nereye ne kadar bellek ayırması gerektiği, hangi DLL'lere bu programın ihtiyaç duyacağı. vb...
2.Programın kendisi. makina dilindeki kod.

Bundan yola çıkarak şunu söyleyebilirmiyiz ? Her program Assembly dilinde ifade edilebilecek bir şekle dönüştürülebilir.
Şimdi en tepedeki koyu yazılılı tekrar okuyalım. Buradanda şunu çıkartabilirmiyiz ? Eğer bir program CPU tarafından anlaşılıp çalıştırılabiliyor ise bizler tarafından da anlışılabilir.
tüm programlama dilleri disassembly edilemezler.. örneğin java yorumlanan bir dildir.. ve java bu özelliğiyle bir dönüm noktası olarak kabul ediliyor.

acemi
01/07/2004, 22:35
* Java programini once executable dosyaya cevirip sonra disassemble edebilirsin.

* Qbasic'de yorumlanan bir dildir.

yildizib
02/07/2004, 09:45
tüm programlama dilleri disassembly edilemezler.. örneğin java yorumlanan bir dildir.. ve java bu özelliğiyle bir dönüm noktası olarak kabul ediliyor.
Evet kendi çalışa platformu var.

Euclides
02/07/2004, 17:12
aaaa tabi çok haklısınız (!)
jpeg,gif,pdf,html,asp,xml,perl,doc,bmp,ico, ve daha nicelerinde disassembly edemezsiniz (!)

pulsar
06/07/2004, 15:46
Selam Herkese::
öncelikle şunu söyleyeyim formu yeni gördüm. Assamly dilini bilmeyene anlatmak zordur arkadaşlar. Ama anlatalım. Şöyle ki ben
B80200
komutlarını kullanarak bir program yazdım diyelim. İşlemciler yani x86 byte byte işlerler. Burada yapılacak şudur o zaman. B8 nedir. Bir kod git ax registerine aha şu değeri yolla demektir. AX registeri 16 bit ise arkadan gelen 1 word ax e gidecek. ama terslenerek yani ax içine 0002 değerini konacak. Adamlar düşünmüşler böyle program yazmak çok zor biz de bunu ingilizce mantığına cevirelim demişler. ve
mov ax,02H
gibi komutla ifade etmişler. Böylece ben mov ax,02 yazısını görünce işi anlıyoruz buna assably denir. İşlemcinin güvenli modunda yani dosta COM dosyaları vardı. Offset 100H adresine yüklenir çalışırdı yani ham olarak koddan oluşurdu. Ama zaman bu 64 KB programları aşmayıı gerektirdi. EXE diye birşey çıktı. Exenin baş kısmında bir tablo vardı. Program hangi noıktaya yüklenecek kod segment ve data segment ne olacak diye. Böylece segment segment programları birleştirebiliyorduk. Sonra windows çıktı. Dos zamanının PE exeleri (Ezenin başındaki taploda bir "PE" stringi vardı). "NE" oldu bu new ezeler şöyledir.
DOS EXE BAŞLIĞI
DOS EXE
SABİT BIR NOKTADA WINDOWS BAŞLIĞI
WINDOWS IMAJI
ÇALIŞABİLİR KOD
Wındows programını dosta çalıştuırırırsanız ekrana bu program windows altında çalışmıyor diye birşey yazar. İşte buna DOS EXE COD bloğu sebep olur. Windowsta çalışıncada ilk önce imaja bakılarak hangi DLL hangi API yüklenecek öğrenilir. Bu kısım Düz bellek alanı mantığı ile 4 GB sanal dagil alana konur. Exe kod yüklenir. Kod çalışır. Kod apileri böylece cağrır ve form dialog gibi objeleri bize sunar.

JAVA dilinde olay tabii ki farklıdır. Dünyada Intel de var Matorola da. Maclerde de birşey çalıştırmak istiyorsunuz cep telefonunda da ve her işlemcinin assambly dili ayrı. Basit mantık 8051 ile PIC nasıl kıyaslanamazsa PLC gibi çalışan Nokia ile siemens cep telefonları da farklı. Adamlar. Yani SUN microsystemi kuranlar demiş ki. Biz bir işlemci tasarlayalalım. Bunun üzerine de tüm donanımları işleten bir işletim sistemi yapalım. Bizim bir programımız olsun buna JavaVirtual Machine diyelim ve diğer tüm bilgisayar platformlarına bu programı export ettiğimizde tüm java programları çalışsın. bu nedenle java programları bu işletim sistemi ve işlemci için derlenir. Bunun kendi assamly dili olduğundan o mantık ile debug edebilirsiniz. Ama debuger de en iyi java sanal makinesinde trace eder. Java makinesinde çalışan tüm programları örneğin linux için efx leri gibi düşünün.

ilkerkrby
23/10/2004, 14:23
Assembly dili bilmiyorum.Bu dil makina dili diye geciyor değil mi?

Bir kaç sorum var ve bu konuyu merak ettim.
1-Kimi assembler diyor doğrusu ne?
2-Ceviz'deki artikel'de "makina dilinin(CPU’ya has özel bir alfabe) ingilizce kıslatmalara dönüştürülerek oluşturulmuş bir dildir.".Bu sözden anladığım assembly makina dili demek değil.Bir tür kısaltmalardan oluşan dil olduğu söyleniyor.
3-exe işlemciye hasmıdır?yoksa işletim sistemine has mı?
4-assembly programı ile makina programı arasındaki farklar :hiohahoha

linaxoid
23/10/2004, 16:04
1-Assembly dilin adı.

3-Yazdığınız uygulama derlendiğinde elinize geçen object kod içinde sadece işlemcinin anlayacağı makina diline dönüştürülmüş komutlar bulunur. Bunlar her işlemci için farklıdır. Çünkü her işlemci farklı bir mimari ve farklı bir komut seti üzerinden işlem yaparlar. Object kod derleme sonrası Link işlemine tabi tutulur. Burada diğer kütüphane içinde kullandığınız fonksiyonlar eklenir ve kodlar belirli bir şekilde paketlenir. Bu paketleme işlemi Dos, Windows, Linux ... her işletim sistemi için farklı yapılır. Bu nedenle exe windows işletim sistemine bağlıdır. Ayrıca hangi işlemci için derlendi ise o işlemcinin komut setine bağımlı olacağı için işlemci mimarisine de bağlıdır. Örneğin linux iso larını indirirken i386 veya i586 işlemciler için olan paketi indiriyoruz. Amd 64 bit platformu için indirecek iseniz x86_64 için paketleri indireceksiniz.

4-Eskiden bilgisayarın daha yeni gelişmeye başladığı dönemlerde programcılar sadece makina dili ile programlama yaparlardı. Makina dili ise sadece sayılardan oluşur. İşlemci bunları çözümler ve kodun yaptığı işe göre görevini yapar. Koda 16 lık sayı tabanında bakarsanız 0F26CD8312A5B7F... gibi gider. Bu komutları insanların daha kolay anlayabileceği, okuyup yazabileceği bir formatta yazdığınızda assembly karşınıza çıkar.
mov eax,0
cmp ah,dl
add eax,ecx
inc dl
gibi... Yani assembly makina dilinin birebir karşılığıdır, sadece ifade şekli farklıdır. Tabii assembly ile kodlama yapmak da zor olduğu için şu anda kullandığımız yüksek seviyeli programlama dilleri geliştirilmiştir.

karamemed
24/10/2004, 00:31
@pulsar
Güzelmiş.

vilee
03/01/2008, 21:49
bu yazımı okumanızı şiddetlet oneririm uzun diye geçmeyin bir kre okuyun yeterli cunku bu bilgiler pek yayımlanmaz :)

Makina dili işlemcinin kendine has özel dilidir. yani makina dlinde yazılan kod direk işlemcide çalışır derlenmez. amd ve intel de assemlye gore işlemcinin desteklediği komuta gore (komut seti = instruction set) kendi içerisinde derlenir
amd ve intel işlemcilerde kendıne ozel bir işlemci dili vardır. bu dilinde sadece 1 ve 0 la program yazılır. ama bunu kolaylaştırmak için assembly adında bir işlemci dilinin simetrik dili çıkarılmış yani ayni şey " assemly = (intel ve amd işlemcisinin dili) "
tabi assemly ile yazılan kodlar işlemcide kendi diline gore derlenir. bu diğer dillerdede aynı.

mesela c++ da yazılan bir program once assemly diline derlenir sonra işlemcide derlenen assemly kodlara gore işlemci işlevini yapar tekrar cevap gonderir assembly dili ile ve işletim sistemleri aldıkları bu cevabı kendı icerisinde donusturerek gosterirler

orneğin c++ da 1 + 1 kaçtır diye bir program yazdık. bu kodlar once assemblyde derlenir sonra işlemciye sorulur, işlemci işlevini yaptıktan sonra cevabını tekrar assemly dilinde geri gondenir alınan bu değer assemlyden c++ tıya donusturulur ve sonu 2 olarak iletilir.

tabi bu olay benım anlattığım gibi basit olmaz :)

exe apayrı bişey

.exe windowsa ait komut sorgu programıdır. windows .exe nin derleyicisidir en basitiyle.
yani visual basicte yazılmış bir program ".exe" bu exe windowsta çalışırınca windows .exe deki kodlara gore assembly diline derler yine işlemciden aldığı cevabı exe ye cıktı olarak gonderir.
burada nesneye bağlı programlama giriyor . bu şeyler anlatılmakla bitmez :)
ben temelini anlatabildiysem ne guzel.

mesela yine
pardusun programı .py uzantılıdır pardus .py çalıştığında kodları alır işlemciye sorgular aldığı cevabı .py programına gonderir.


javada aynı şeydir javanın farkı yoktur. yani bağımsız bir platform değildir.
java da linux , windows sistemi matığı gibi çalışır fakat sadece program olarak.
tek bağımsızlığı masaüstüsüz işletim sistemi
ve tek güzel yanı kolay dili olmasıdır:)

javanın da derleyicisi vardır ,java kodları derleyici tarafından. asemblye derler.
işlemciye sorgular alınan sonucu yine programında gosterir.

yani windowsun temizle herşeyini
tek derleyicisini bırak , c++ tıyla programını yaz windowsa derlettir sonucunu al.

anlatabilmisimdir inşallah

java masaüstü mantığını taşımadığı için çok üstün ttuluyor