İlk montajcılar makine kodunda mı yazılmıştı?


41

Bilgisayar Sistemlerinin Elemanları: Boolean kapılardan yüksek seviyedeki uygulamalara kadar (bu sırayla) bir bilgisayarın inşasını kapsayan projeleri içeren İlkelerden Modern Bir Bilgisayar Oluşturma kitabını okuyorum . Üzerinde çalışmakta olduğum şu anki proje, Hack montaj kodundan Hack makine koduna çevirmek için kendi seçimim olan yüksek seviyeli bir dili kullanarak bir assembler yazıyor (Hack, önceki bölümlerde oluşturulan donanım platformunun adıdır). Her ne kadar donanımın hepsi bir simülatöre yerleştirilmiş olsa da, her aşamada gerçek süreçte sadece benim için mevcut olan araçları kullanarak gerçekten inşa ettiğimi iddia etmeye çalıştım.

Bu, beni düşündürdü. Benim montajcı yazmak için yüksek seviyeli bir dil kullanmak kesinlikle uygun, ancak ilk defa yazılan (yani tarihte) ilk montajcı için makine kodunda yazılması gerekmiyor, çünkü o zamanlar hepsi bu kadardı mı?

İlişkili bir soru ... peki ya bugün? Yepyeni bir işlemci mimarisi, yepyeni bir talimat seti ve yepyeni bir montaj sözdizimi ile ortaya çıkarsa, montajcı nasıl kurulur? Assembler programı için ikili dosyalar üretmek için hala mevcut bir üst seviye dil kullanabileceğinizi farz ediyorum, çünkü yeni platformunuz için hem assembly hem de makine dillerinin sözdizimini biliyorsanız, o zaman assembler yazma görevi gerçekten sadece metin analizi görevi ve kendiliğinden o platformla ilişkili değil (yani o platformun makine dilinde yazılması gerekiyor) ... bu yüzden 2012'de Hack assembler'ı yazarken "hile yapmam" ve bazı önceden var olanları kullanmamın nedeni Bana yardımcı olmak için üst düzey bir dil.


17
Her zaman bir çapraz derleyici yazabilir ve günümüzde yeni donanım için bir kod üretmek üzere kullanabilirsiniz.
Kerrek SB

@PersonalNexus Bunun için teşekkürler, benim tarafımdan snafu düzenleme.
yannis,

1
@YannisRizos Sorun değil, elimizden gelenin en iyisini yapıyor :)
PersonalNexus

8
İlk montajcının montaj üzerine bir kağıt parçası üzerine yazılmış olması mümkündür. Makine koduna dönüşüm daha sonra hala kağıt üzerinde yapılmış ve her seferinde bir kelime olan anahtarlarla bir tür ROM'a yazılmış olabilir.
mouviciel

İlk bilgisayarım bir ZX81'di, 1KB RAM'le, bu nedenle (kabul edilebilir derecede kısa) makine kod programlarım aslında elle çevrildi.
281377,

Yanıtlar:


36

Şimdiye kadar yazılan ilk montajcı için (yani tarihte), makine kodunda yazılması gerekmezdi.

Şart değil. Elbette, montajcının ilk v0.00 sürümü makine kodunda yazılmış olmalı, ancak montajcı olarak adlandırılması yeterince güçlü olmazdı. Bir "gerçek" montajcının özelliklerinin yarısını bile desteklemeyecek, ancak bir sonraki sürümünü yazması yeterli olacaktır. Ardından, v0.00'ı assembly dilinin alt kümesine yeniden yazabilir, v0.01 olarak adlandırabilir, v0.02'nizin bir sonraki özellik kümesini oluşturmak için kullanabilirsiniz, sonra v0.03'ü oluşturmak için v0.02'yi kullanabilirsiniz. v1.00’a gelinceye kadar. Sonuç olarak, yalnızca ilk sürüm makine kodunda olacaktır; ilk yayınlanan sürüm, assembly dilinde olacaktır.

Bu numarayı kullanarak bir şablon dili derleyicisinin gelişimini önceden başlattım. İlk sürümümde printfifadeler kullanılıyordu , ancak şirketimde kullandığım ilk sürüm, işlem yaptığı şablon işlemciyi kullanıyordu. Önyükleme aşaması dört saatten az sürdü: işlemcim ancak faydalı bir çıktı ürettiğinde, kendi dilinde yazdım, derlenmedi ve şablon olmayan sürümü attı.


4
Hala tüm aşamalara sahip misin? Onları görmeyi ve birbirleriyle karşılaştırmayı çok isterim. Sadece yaşadığın süreç hakkında bir fikir edinmek için.
Marjan Venema

3
@MarjanVenema Hayır, artık onlara sahip değilim - 1998'de inşa ettim ve 2005'e kadar StringTemplate'i keşfettiğimde kullanmaya devam ettim . Kullanılabilir ilk versiyona doğru çalışırken, önceki aşamada bir sonraki aşamaya yazıyordum. Geliştirme döngüm yeni kodlamadan, kod üretecinin kendisini ayrı bir dizinde diffoluşturması, kodun üretilen kısmının beklenmedik bir şekilde değişmediğini, kodun yerine yerleştirilmediğini görmek için geçerli kod üreticisine karşı çalıştığından ve döngüsü bitirmek için bir kez daha çalıştırıyorum.
dasblinkenlight

Yazık ama anlaşılır :) Yaptıklarınızı açıkladığınız için teşekkürler (ve bağlantı için).
Marjan Venema

3
Bir çeşit önyükleme zinciri tutman gerektiğini düşünüyorum. Makine Kodu => Sınırlı ASM => Tam ASM => Bazı Dil. Aksi taktirde, ikili sisteminizi kaybederseniz, vidalama işleminin herhangi bir adımını tamamlayabilirsiniz. (Alternatif olarak, bir C çapraz derlenmiş versiyonuna sahip olabilirsiniz, çünkü gerçekçi olarak tüm C derleyici ikili dosyaları aynı anda kaybolacaktır.)
edA-qa mort-ora-y

3
Bir montajcının "gerçek" montajcı olması gereken tek "özellik" montajı yapmaktır.
Miles Rout

23

Wikipedia'ya göre, ilk montajcı / montaj dili IBM 701 için Nathaniel Rochester tarafından uygulandı . (Tarihleri O Rochester 1948 yılında IBM katıldı belirtiyor. Vikipedi makalesinden biraz belirsiz, ama 701 alenen 1952 yılında ilan Ve unutmayın başka Vikipedi sayfası devletler bu IBM sayfa o devletler "[a] ctual tasarım Şubat'ta başladı 1, 1951 ve bir yıl sonra tamamlandı " .)

Bununla birlikte, David Salomon'un "Montajcıları ve Yükleyicileri", (sayfa 7'de) EDSAC'ın da bir montajcıya sahip olduğunu belirtir:

"İlk depolanan program bilgisayarlarından biri, 1949 yılında Maurice Üniversitesi'nde 1949'da Cambridge Üniversitesinde Maurice Wilkes ve W. Renwick tarafından geliştirilen EDSAC (Elektronik Gecikmeli Depolama Otomatik Hesap Makinesi) idi. bir dizi döner telefon seçicisinden oluşan salt okunur bir bellekte ve sembolik talimatları kabul etti.Her bir komut anımsatıcı bir harf, bir ondalık adres ve bir harf olan üçüncü bir alandan oluşuyordu. Programlayıcı tarafından önceden ayarlanmış sabitler, montaj zamanında adrese eklenecek. " (Referanslar atlandı ... aslına bakınız.)

Biz o "İlk siparişler" kabul önceliklidir varsayarsak, öncelikle montajcı açıkça kanıtlar var olan makine kodunda uyguladı.

Bu kalıp (ilk montajcıların makine koduna yazılması) 1950'lerde iyi bir norm olacaktı. Bununla birlikte, Wikipedia'ya göre , "[a] birleştiriciler kendilerini önyükleyen ilk dil araçlarıydı". Ayrıca , ilkel bir montajcı yazılı makine kodunun, montaj dilinde kodlanmış daha gelişmiş bir montajcıyı önyüklemek için nasıl kullanıldığını açıklayan bu bölüme bakın .

Bu gün montajcılar ve derleyiciler daha yüksek dillerde yazılmıştır ve yeni bir makine mimarisi için bir montajcı veya derleyici tipik olarak farklı bir mimaride geliştirilir ve çapraz derlenir.

(FWIW - önemsiz olmayan programların makine kodunda yazılması ve hata ayıklanması oldukça zahmetli bir işlemdir. Makine kodunda bir montajcı geliştiren biri büyük olasılıkla en kısa sürede montajcıda yazılı bir montajcıya önyükleme yapar.)

Bu bootstrapping derleyicileri ve montajcıları hakkındaki Wikipedia sayfası , hepsi sizi şaşırtıyorsa okunmaya değer.


Sadece tahmin etmekten ziyade, cevap vermekten vazgeçtim. Bu gerçekten ilginç bir okuma!
JacquesB

14

İlk montajcıların makine kodunda yazıldığını tahmin ediyorum, çünkü dediğiniz gibi, o zamanlar başka hiçbir şey mevcut değildi.

Ancak bugün yepyeni bir CPU mimarisi ortaya çıktığında, üzerinde çalıştığı mimari için değil, farklı bir mimari için makine kodu üreten bir derleyici olan Çapraz Derleyici olarak bilinen şeyi kullanıyoruz .

(Aslına bakarsanız, okuduğunuz kitapta daha sonra öğreneceğinizden emin olacağımdan, kesinlikle bir derleyiciyi, üzerinde çalıştığı mimari için makine kodunu üretmek için doğal olarak daha uygun kılan hiçbir şey yoktur. diğer mimarlık: Derleyicinin yaratıcısı olarak, sizin için hangi mimariyi hedef alacağınızla ilgili bir konu.

Bu nedenle, bugün (en azından teoride) yepyeni bir mimari oluşturmak ve o mimari için bir birleştiriciye sahip olmadan önce doğal olarak üzerinde çalışan üst düzey dil derleyicileri (çapraz derleyiciler kullanarak diğer mimariler üzerinde derlenmiş) bile mümkün.


12

İlk önce "montaj" kağıda yazıldı ve sonra el ile delikli kartlara "derlendi".

Büyük babam bir ZRA1 ile çalışıyordu (üzgünüm, sayfa yalnızca Almanca'da var, ancak Google çevirisi, gerçekten en önemli bilgileri toplayabileceğin noktaya kadar uygun: D).
Modus operandi kodunuzu kağıda bir tür montaj dilinde yazacaktı ve sekreter aslında kartlara kart basmak için transkripsiyonu yapacak, daha sonra bunları operatöre iletecek ve sonuç ertesi gün geri verilecekti.

Bütün bunlar esasen programcılar klavyeden veri girişi ve ekranda görüntüleme lüksüne sahipti.


3
Üniversitede okurken, hala makine kodu yazmak için kullanılan kağıt bloklara sahiptiler. Programı sağa yazarsınız, talimatları onaltılık çevirmek için solda sütunlar vardır. Ve mevcut adres için bir sütun. İlk montajcılar aslında insandı.
Florian F

9

Yaklaşık belli olması zor çok (hatta olduğunu ne olduğunu tanımlamak zor) ilk assembler. Yıllar önce, montajcı olmayan makinelere birkaç montajcı yazdığımda, kodu hala montaj dilinde yazdım. Sonra, makul bir kod bölümü doldurduktan sonra, el ile makine koduna çevirdim. Bunlar yine de tamamen iki ayrı fazdı - kodu yazarken, bir makine kodu seviyesinde çalışmıyorum ya da düşünmüyordum.

Birkaç durumda, bir adım daha ileri gittim: Kodun çoğunu, kullanımı daha basit bulduğum bir montaj dilinde yazdım, sonra küçük bir çekirdek yazdım (aşağı yukarı sanal makine dediğimiz şey) Bunu hedef işlemcide yorumlamak. Bu ölümcül yavaştı (özellikle 1 MHz, 8 bit işlemcideydi), ancak çok önemli değildi, çünkü normalde sadece bir kez (ya da en fazla birkaç kez) çalıştı.


8

Assembly dili kodunu makine koduna vermek için bir assembler'a ihtiyacınız yoktur. Assembly dil kodunu yazmak için bir editöre ihtiyacınız olmadığı gibi.

Tarihsel bir bakış açısı

İlk montajcılar muhtemelen montaj dilinde yazılmıştır ve ardından el makine koduna monte edilmiştir. İşlemcinin resmi bir 'montaj dili' olmasa bile, programcılar büyük olasılıkla bu kodu makine talimatlarına çevirmeden önce bir çeşit sahte kod kullanarak programlama işinin çoğunu yaptılar.

Programlamanın ilk günlerinde bile , programcılar bir tür sembolik gösterimde programlar yazdılar ve bilgisayarlarına beslemeden önce bunları makine koduna çevirdiler. Augusta Ada King'in davasında, Babbage 's Analitik Motoru için onları delikli kartlara çevirmesi gerekiyordu , ama ne yazık ki hiç inşa edilmedi.

Kişisel deneyim

Sahip olduğum ilk bilgisayar Sinclair ZX81'di (ABD'de Timex 1000). Kılavuzun geri (hatta garip indeks modu tüm inclusing makina koduna Z80 montaj dile çevirmek için gerekli tüm bilgileri vardı opcodes Z80 vardı).

Ben derleme dilinde bir program (kağıt üzerinde) yazmak ve kuru kodunu çalıştırın. Programımın hatasız olduğu için mutlu olduğumda, kılavuzun arkasındaki her talimatı arardım, makine koduna çevirir ve makine kodunu da kağıda yazardım. Son olarak, tüm makine kodu talimatlarını ZX81'ime, teybe kaydetmeden ve çalıştırmadan önce yazacağım.

İşe yaramazsa, el montajımı iki kez kontrol ederdim ve herhangi bir çeviri yanlış olursa, yeniden kaydetmeden ve programı çalıştırmak için tekrar denemeden önce kasetten yüklenen baytları yamalarım.

Tecrübelerime göre, kodunuzda hata ayıklama yapılabiliyorsa, montaj dilinde makine kodunda yazıldığından çok daha kolay olduğunu söyleyebilirim - bu nedenle sökücülerin popülerliği. Bir montajcıya sahip olmasanız bile, el montajı doğrudan makine kodunu yazmaya çalışmaktan daha az hatalıdır, ancak Mel gibi bir Gerçek Programcı aynı fikirde olmayabilir. * 8' )


5

O zaman ya da şimdi hiçbir fark yoktur. Yeni bir programlama dili icat etmek istiyorsunuz, ilk derleyiciyi yapmak için bugün kullanabileceğiniz dillerden birini seçtiniz. Bir süre zarfında, eğer projenin hedefi ise, o dilde bir derleyici oluşturursunuz ve sonra kendi kendini barındırabilir.

Sahip olduğun tek şey kalem, kağıt ve kullanıcı veya ilk yeni talimat setine arayüz olarak bazı anahtarlar veya delikli kartlar olsaydı, kullanabileceğin eşyalardan birini veya hepsini kullandın. Bir derleme dilini kağıda yazmış olabilir ve sonra bir derleyici kullanmış olabilirsiniz, siz onu makine koduna dönüştürmek için, belki de sekizlik olarak, daha sonra makinenin arayüzüne giren bir noktada.

Bugün yepyeni bir komut seti icat edildiğinde, şirkete / şahıslara, uygulamalara vb. Bağlı olarak farklı değildir, muhtemelen donanım mühendisinin verilog veya vhdl ile programlama yapması büyük olasılıkla ilk birkaç test programını el ile makine kodunda yazmaktadır. (muhtemelen altıgen veya ikili). Yazılım ekiplerinin ilerlemesine bağlı olarak, çok hızlı bir şekilde veya çok uzun bir süre boyunca bir montaj diline ve daha sonra bir derleyiciye geçiş gelmeyebilir.

İlk bilgi işlem makineleri, derleyicilerden derleyiciler oluşturmak için kullanabileceğiniz genel amaçlı makineler değildi. Onları, önceki tellerin çıktısı arasına, bazı telleri diğerinin girişine hareket ettirerek programladınız. Sonunda, montajda bir montajcı yazabildiğiniz, elle monte edebileceğiniz, makine kodu olarak besleyebileceğiniz, sonra ebcdic, ascii, vb. Ve daha sonra kendi kendini barındırmak için kullanabileceğiniz genel amaçlı bir işlemciniz vardı. İkili besleyiciyi, daha sonra okuyabileceğiniz / yükleyebileceğiniz bir ortama, el besleme makinesi koduna çevirme düğmelerini tutmak zorunda kalmadan saklayın.

Delikli kartları ve kağıt kaseti düşünün. Çevirme anahtarları yerine, kesinlikle bilgisayarın tamamen okuyabileceği bir ortam yaratan, emek tasarrufu sağlayan bir cihaz olan tamamen mekanik bir makine yapabilirsiniz. Makine kod bitlerini bir altair gibi anahtarlarla girmek zorunda kalmak yerine, bunun yerine kağıt bant veya delikli kartlar besleyebilirsiniz (mekanik, işlemcili olmayan, belleği veya işlemciyi besleyen, ya da küçük bir makine kodu yazılı önyükleme yükleyicisi kullanarak). Bu kötü bir fikir değildi, çünkü kağıt kasetler veya delikli kartlar da mekanik olarak da üretebilen bilgisayar tarafından sürülen bir şey yapabilir ve sonra bunları geri besleyebilirsiniz. Bilgisayardan çıkmayan mekanik emek tasarrufu sağlayan iki delikli delikli kart kaynağı ve bilgisayarla çalışan makine. her ikisi de bilgisayar için "ikili dosyaları" üretir.


1
"Assembler, sen" için +1 yorum yapın. Bir kelimenin bir tanımına (yani assembler = yazılım) bağlı kalmak kolaydır, ancak yorumunuz gerçekten açıkça ortaya koyuyor ... "montaj işlemi" sadece kolayca uygulanabilecek bir sistem / rutin. bir insan montajcısı.
11

1
Ayrıca millet, erken bilgisayarların talimat setlerine sahip olduğu fikrine kapılmaya devam ediyorlar. İlk bilgisayarlar, kâğıt ve kağıtla iyi matematik becerisine sahip kadınlardı ve buna “bilgisayar” deniyordu. daha sonra bu kadınlar (veya özellikle bir tanesi), talimat setini kullanmayan telleri birbirine bağlayarak enakiyi programladılar. Bir talimat seti ile programlama yolun aşağısında iyiydi. Evet, assembler veya bilgisayar ya da erken bir kelime ya da terimin kullanımına kapılmak çok kolaydır.
old_timer

4

Brook'un bilgisayar hayvanat bahçesinde "anımsatıcılar bizim buluşumuzdur, tasarımcı basitçe sayısal opcode ya da kodu opcode olan karakter" gibi bir şey söylediği bir ya da iki örnek vardır. montaj dili.

Programlara giriş yapmak, ön panelde hata ayıklamayı sona erdirir (yapmayanlar için, hafızayı ayarlamanın bir yoluydu, siz bazı adresleri adrese, bazıları değere ayarlayıp bir düğmeye veya başka bir düğmeye değeri okumak) çok sonra yaygındı. Bazı eski zamanlayıcılar, yaygın olarak kullandıkları makineler için önyükleme kodunu girmeye devam edebileceklerini söylediler.

Doğrudan makine kodunu yazma ve bellek dökümü programlarını okuma zorluğu, makine diline oldukça bağlıdır, bazıları nispeten kolaydır (en zor kısım adresleri takip etmektedir), x86 en kötülerinden biridir.


Pdp-11'de topuzların lüksü bile yoktu. 8 geçiş anahtarındaki ikili adresi girerek depolamayı değiştirebilirsiniz ve 16 geçiş anahtarındaki değer daha sonra düğmesine basın. Aslında birinin bu şekilde döngüsel bir programı tamir ettiğini gördüm!
James Anderson

2

1975’de bir bilgisayar yaptım. Çağdaş Altair’i çok geliştirdi, çünkü program kodunu hex’e makine kodunu yazarak ve bu kodu bir video monitöründe izleyerek programlara girmeme izin verdi. Altair, her makine komutunun bir sıra anahtar kullanılarak zaman içinde bir miktar girilmesi gerekiyordu.

Yani evet, bilgisayarların ilk günlerinde ve daha sonra kişisel bilgisayarların ilk günlerinde insanlar makine kodunda uygulamalar yazdılar.


2

Bir fıkra:

Assembly dilini öğrendiğimde, Apple'da] [, ROM'da mikro assembler adı verilen bir program vardı. Montaj talimatının baytlara anında çevrilmesi, siz girdiğiniz gibi yapıldı. Bu, etiket olmadığı anlamına gelir; zıplamak veya yüklemek istiyorsanız, ofsetleri kendiniz hesaplamanız gerekir. Yönerge düzenlerine bakmaktan ve onaltılık değerler girmekten çok daha kolaydı.

Hiç şüphe yok ki, gerçek montajcılar ilk olarak mikro montajcı veya başka bir şey tamamlanmayan ortam kullanılarak yazılmıştır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.