Arama butonu
Bu konudaki kullanıcılar: 1 misafir
5
Cevap
1286
Tıklama
0
Öne Çıkarma
C dilinden makine diline derleme?
M
20 yıl (679 mesaj)
Yüzbaşı
Konu Sahibi

..

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil





< Bu mesaj bu kişi tarafından değiştirildi MK102 -- 18 Mart 2011; 9:26:55 >

R
20 yıl (4016 mesaj)
Yarbay

programlama bölümüne sorsan daha ayrıntılı cevap alırsın ama benim bildiğim pc de yazılan program doğrudan işletim sistemine hükmediyor, yanlış da olabilir yanıltmayayım...



T
20 yıl (576 mesaj)
Yüzbaşı

bildiğim kadarıyla amd de sse sse2 ve sse3 komut setilerinin aynılarını kullanıyo



C
20 yıl (185 mesaj)
Teğmen

quote:

Orjinalden alıntı: MK102
assembly dili bildiğiniz gibi işlemciden işlemciye farlılık gösteriyor,her işlemcinin farklı komutları var yaptığımnız programı başka işlemcilerde çalıştıramıyoruz...benim merak ettiğim;

El assembleri ile çevrilirken her komutun hexadesimal karşılığını rom içerisine bay bayt adreslere yerleştiriyoruz peki C dili ile yazılmış bir program derlendikten sonra bilgisayarda intel,amd,vb... işlemcileri nasıl tanıyor?


Anladigim kadariyla sorunuzda "genel olarak x86 mimarisi icin derlenmis bir C programindan bahsediyorsunuz. Yoksa tabii ki bildiginiz gibi her mimarinin derleyicisi ayri, sozgelimi PowerPC icin derlediginiz bir program bir AMD islemcisinde calismayacaktir, isletim sisteminin "loader" denen kismi "Unknown executable format" deyip cikacaktir isin icinden. Son 10-15 yilda Unix tabanli sistemlerde oldukca yaygin olan ELF gibi standard executable formatlari zaten programin hangi islemci icin derlendigi bilgisini de ekliyorlar program header'inin icine. Google'da "ELF format", "ELF loader" gibi aramalarda bulunursaniz daha detayli bilgi bulurunuz.

Sorunuzun x86 mimarisini ilgilendiren kismina gelirsek: Genellikle x86 islemcileri ureten her sirket tamamen ayni komut setini kullanmaya ozen gosteriyorlar, AMD ile Intel arasindaki lisans anlasmasi geregi SSE/SSE2 gibi komut setleri AMD islemcileri tarafindan da destekleniyor mesela. Zaten kullandiginiz C derleyicisine "ben falanca islemci isin derleme yapiyorum" dediginizde (mesela GCC icin "-march=pentium4" diyerek) sadece hedef mimarinin kullandigi komutlari kullanacaktir. Bu mimariden once gelen ve dolayisiyla bazi komutlari calistirmamasi mumkun olan mimarilerde ise calismasi garanti degildir ortaya cikacak executable'in.

Bazi executable format'lari farkli mimariler icin derlenmis programlarin kombine edilmesine olanak taniyor, isletim sistemi loader'i calistigi zaman "bu programin hem X, hem Y mimarisi icin versiyonlari var, ben X mimarisini calistiracagim" diyebiliyor. Mesela Apple bilgisayarlarinin hem eski Mac'lerdeki PowerPC, hem de yeni Mac'lerdeki x86 islemcisi icin yazilmis kod versiyonlarini bir arada paketleyebilmesini saglayan Rosetta vb. gibi teknolojiler bunlara guzel bir ornek. Ancak bunlar henuz cok yeni ve yaygin degiller.


Bu mesaja 1 cevap geldi.
R
20 yıl (4016 mesaj)
Yarbay

quote:

Orjinalden alıntı: ChipArchitect

quote:

Orjinalden alıntı: MK102
assembly dili bildiğiniz gibi işlemciden işlemciye farlılık gösteriyor,her işlemcinin farklı komutları var yaptığımnız programı başka işlemcilerde çalıştıramıyoruz...benim merak ettiğim;

El assembleri ile çevrilirken her komutun hexadesimal karşılığını rom içerisine bay bayt adreslere yerleştiriyoruz peki C dili ile yazılmış bir program derlendikten sonra bilgisayarda intel,amd,vb... işlemcileri nasıl tanıyor?


Anladigim kadariyla sorunuzda "genel olarak x86 mimarisi icin derlenmis bir C programindan bahsediyorsunuz. Yoksa tabii ki bildiginiz gibi her mimarinin derleyicisi ayri, sozgelimi PowerPC icin derlediginiz bir program bir AMD islemcisinde calismayacaktir, isletim sisteminin "loader" denen kismi "Unknown executable format" deyip cikacaktir isin icinden. Son 10-15 yilda Unix tabanli sistemlerde oldukca yaygin olan ELF gibi standard executable formatlari zaten programin hangi islemci icin derlendigi bilgisini de ekliyorlar program header'inin icine. Google'da "ELF format", "ELF loader" gibi aramalarda bulunursaniz daha detayli bilgi bulurunuz.

Sorunuzun x86 mimarisini ilgilendiren kismina gelirsek: Genellikle x86 islemcileri ureten her sirket tamamen ayni komut setini kullanmaya ozen gosteriyorlar, AMD ile Intel arasindaki lisans anlasmasi geregi SSE/SSE2 gibi komut setleri AMD islemcileri tarafindan da destekleniyor mesela. Zaten kullandiginiz C derleyicisine "ben falanca islemci isin derleme yapiyorum" dediginizde (mesela GCC icin "-march=pentium4" diyerek) sadece hedef mimarinin kullandigi komutlari kullanacaktir. Bu mimariden once gelen ve dolayisiyla bazi komutlari calistirmamasi mumkun olan mimarilerde ise calismasi garanti degildir ortaya cikacak executable'in.

Bazi executable format'lari farkli mimariler icin derlenmis programlarin kombine edilmesine olanak taniyor, isletim sistemi loader'i calistigi zaman "bu programin hem X, hem Y mimarisi icin versiyonlari var, ben X mimarisini calistiracagim" diyebiliyor. Mesela Apple bilgisayarlarinin hem eski Mac'lerdeki PowerPC, hem de yeni Mac'lerdeki x86 islemcisi icin yazilmis kod versiyonlarini bir arada paketleyebilmesini saglayan Rosetta vb. gibi teknolojiler bunlara guzel bir ornek. Ancak bunlar henuz cok yeni ve yaygin degiller.



teşekkürler...


Bu mesaja 1 cevap geldi.
O
20 yıl (767 mesaj)
Yüzbaşı

Bu soru daha iyi yanıtlanamazdı sanırım..Teşekkürler..



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.