Bu bir meclis dili mi?


70

Çocukluğumda bir MK-61 Sovyet hesap makinesinde programlanırdım. Dört işletim kaydına (X, Y, Z, T) ve 15 depolama kaydına sahipti. Bir program 105 adımda olabilir.

Hatırladığım kadarıyla şöyle komutları vardı:

  • X ve Y kayıtlarını değiştir
  • Vardiya kayıtları (Z'den T'ye, Y'den Z'ye, X'den Y'ye)
  • Depolama kayıt defterinden (1..15) X'e kopyala
  • X'ten depolama kaydına kopyalayın (1..15)
  • Eğer X <0 ise, ## program adımına gidin
  • X ve Y değerlerini kullanarak işlemi (+, -, *, /) yapın ve sonucu X'e getirin

Bu komut bir meclis dili ayarlanmış mı? Bu cihazı kullanarak montaj dilleri hakkında temel bir fikrim var mıydı?

cihaz

Görünüşe göre "tuşa basma programlama" deniyor .

Komik gerçek: benzer bir hesap makinesi (bunun gibi, ancak enerjiden bağımsız belleğe sahip) 1988'de uzay görevi yörünge hesaplamaları için bir yedekleme donanımı olarak kullanıldı. :-)


Güzel! - bu resim anıları geri getiriyor. Hala bodrumda MK-
52'm var bir

Bu, HP 65'in Sovyet klonuna benziyor. Bir Yığın üzerinde iten ve çeken işlemlerle Ters Lehçe Çizimi'nde programlanabilir. RPN operatörleri basit bir şekilde belleğe kaydedilir ve muhtemelen 4004 CPU'ya eşdeğer olanlarla yorumlanır. 4004 ROM'daki kod muhtemelen 4004 assembler'den derlendi, ancak tuş vuruşları elektronik tablo makrolarına gerçekten benziyor.
Meredith Poor

Yanıtlar:


13

Bu bir montaj dili değil, bu bir makine dilidir.

Makine dili, fiziksel olarak makineye bir şey ifade eden herhangi bir şeydir. Cep bilgisayarlarında, makinedeki sayılara kodlanmış tuşlara basar. Bu Electronika MK61 makinesi hakkında daha fazla bilgi vermeyeceksiniz , bu yüzden TI-57 örneğini vereceğim : makine dili, onlarca satırda sütun olarak verilen anahtarın sayısını ve birimlerdeki çizgiyi kullandı. Örneğin, hafızayı 8 artıracak bir program şöyle olacaktır:

33 8  57 1 58 23

Bu makine dilidir: doğrudan makine tarafından yorumlanan şeydir.

Assembly dili insan tarafından okunabilen metin olacaktır:

RCL 8 
+
1
=
STO 8

Bu metni makine kodları dizisine dönüştürmek için , bir program olabilecek bir birleştiriciye veya bu metni sayı dizisine çevirecek bir insana ihtiyacınız olacaktır.

Karışıklık sık sık yapılır, çünkü çoğu zaman meclis dilden makine diline doğrudan bir çeviri söz konusudur, fakat bu her zaman tamamen doğrudan bir çeviri değildir: makro düzenleyicilerin mecliste çok fazla iş yapabilen ve Tek bir montaj talimatından çok sayıda makine dili talimatı. Sembolik adreslerin yalnızca çevirisi dal talimatlarının işlem kodunun değiştirilmesini içerebilir (örneğin, kısa göreceli adreslemeden uzun göreceli veya mutlak adreslemeye geçilirken), bu nedenle her zaman düşündüğünüz gibi doğrudan değildir.


36

Sorunuzun her iki bölümüne de cevabın hayır olduğunu söyleyebilirim: bu hesap makinesinin komutları montaj dili gibi değildir ve bu hesap makinesinin programlanması, montaj dilinde programlamadan farklıdır.

Bu hesap makinesinin programlandığı "dil" oldukça düşük seviyededir, ancak yine de programcı tarafından görülemeyen alt düzey yapıların üstünde bir soyutlamayı temsil eder. Biraz tahmin ediyorum, ama açıklamanızdan ve klavyeye bakmaktan (ve 1970'lerin sonunda ve 1980'lerin başlarında Hewlett Packard veya Texas Instruments'ın benzer görünümlü hesap makineleriyle karşılaştırmaktan) Her bir programın "adım" olduğunu söyleyebilirim. "sadece" ekle "veya" X & Y'yi değiştir "gibi basit bir işlem değil, aynı zamanda trigonometri, üstelleştirme, logaritma, vb. gibi daha karmaşık işlemler de olabilir. Bu adımların her biri muhtemelen dahili bir mikro kodlanmış rutin olarak uygulanır. Bu mikro kod muhtemelen meclis dilinde programlanmıştır, ancak sanmıyorum '

Diğerlerinin de belirttiği gibi, assembly dili genellikle çok yakındır (1: 1 değilse), alttaki makinenin olanaklarıyla uyuşur. Assembly dili programlamanın, bu hesap makinesinin programlanmasında muhtemelen mevcut olmayan aşağıdaki özellikleri içerdiğini söyleyebilirim.

  • İşlemler, bitsel AND, OR, XOR, kaydırma; tamsayı ve (belki) kayan nokta aritmetiği, çeşitli veri boyutlarında (örneğin, tek veya çift hassasiyet); çeşitli boyutlarda (bayt, yarım sözcük, sözcük vb.) yükleme / saklama.

  • Yüksek seviyeli işlemler (trig, logaritmalar) genellikle rutin çağrılardır, talimat değil. Polinom değerlendirme talimatı olan DEC VAX gibi bazı istisnalar vardır. [Düzenleme: OP, x87'nin aynı zamanda trig işlevlerine de sahip olduğunu belirtti.]

  • Makinenin adres şeması açıklandı. Adres alanı bölümlenmişse, bir ana adresi bir kayıt cihazına yüklemeniz ve ardından bu kayıt defterine göre adres kodu veya veriyi girmeniz gerekir. Düz bir adres alanıyla bile adresleri ve adres aritmetiğinin farkındasınız. Genellikle montajcılar, programcıların adresleri belirtmek için etiketleri kullanmalarına izin verir. Ancak, bir adres farklı bir kesimdeyse, erişmeden önce bir kesim kaydı yüklemeniz gerekebilir.

  • Hafıza hizalaması açık. Örneğin, birçok makinede 4 baytlık bir kelime yalnızca 4 baytın katları olan adreslerden yüklenebilir veya saklanabilir.

  • Veri sunumu açıktır. Genellikle montajcılar, altıgen, sekizli, ondalık, kayan nokta ve ara sıra karakter verilerinde sayısal veri belirtmenin bir yolunu sağlar.

  • Kayıtların uzmanlığı ortaya çıkar. Bazı mimariler, bazı kayıtlardaki tamsayı ve adres işlemlerine izin verir, ancak yalnızca diğerlerinde kayan nokta veya yalnızca belirli kayıtlara göre adreslemeye izin verir. Bazen, adresleme ya da aritmetik olarak kullanılamayan durum ya da durum bitleri olanlar gibi özel kayıtlar vardır.

  • Alt rutin çağrı kuralları açıklandı. Argümanlar ve dönüş değerleri, kayıt defterlerine iletilebilir veya bir yığına itilebilir ve fırlatılabilir. (Bu yığın genellikle XYZ ve T gibi sabit bir küme değil, özel bir yığın işaretçi kaydı tarafından adreslenen bir bellek bölgesidir.)

  • İşletim sistemiyle nasıl etkileşime gireceğinizin veya bir tane yoksa düşük seviye donanım olanaklarıyla nasıl başa çıkacağınızın bilincinde olmanız gerekebilir. Bir işletim sistemi ile argümanları registerlara (veya stack'e) yüklemeniz ve çekirdeğe binmeniz gerekir. Bir işletim sistemi olmadan muhtemelen kesintiler ve zamanlayıcılarla uğraşmak zorundasınız.

Montaj programlamamın hatırası, çok çok acı verici olduğudur. Bu hesap makinesini programlamanın karşılaştırmaya göre kolay ve eğlenceli olduğunu düşünüyorum. (Üzgünüm.)


1
Mavi semboller - 1) Eh, bazı bit düzeyinde işlem vardır AND, OR, XOR, NOT , , ve ИНВklavyede (INV anlamına gelir). 2) Sinüs, kosinüs vs.'nin , x86 işlemciler için ref.x86asm.net/coder32.html referansına göre talimatlar olduğunu düşündüm . Ama elbette seninle montajcının daha karmaşık olduğu konusunda hemfikirim.
defhlt

Bu VMS talimat setinin çalışmasını istiyorsanız, işlemi - deathrow.vistech.net/… . Diğer bazı eğlenceli bitler, esolangs.org/wiki/…

25

Evet, bu kesinlikle bana bir meclis dili gibi geliyor.

Bu aslında olsun veya olmasın söylemek zor olduğunu 1 hedef platformun makine kodu ile - makina koduna kendisinin bilgisi olmadan belirlemek zordur,: kimin komutları map 1 dil - tanım, çünkü sadece açıklamasından montaj fakat bu ASM'nin diğer platformlarda çalıştığı gibi gözüküyor.


11

Bir montaj diline kesinlikle yakın benzerlikleri var, ancak bunun gerçek olmadığını söyleyeceğim.

Bir montaj dilinde, işlemler çoğunlukla 1-5 arası CPU talimatlarını eşler. Makrolar ve sözde-op'lar gibi bazı istisnalar vardır (örneğin, XOR'ların kendisi ile gerçekten kayıt olan bir CLEAR komutu gibi); Asıl nokta, bir montaj programının oluşturulacak CPU talimatlarını tam olarak belirlemesidir. (Bu, bir meclis dili ile C gibi üst düzey bir dil arasındaki temel farktır; ikincisi, programların davranışını belirtir ).

Hesap makinesinde şüphesiz bir CPU var, ancak bireysel CPU talimatlarının X, Y, Z ve T "kayıtlarına" atıfta bulunduğundan xyveya veya sin(veya ПРГbunun ne anlama geldiği!) Gibi üst düzey işlemler gerçekleştirdiğinden şüpheliyim .

Bunun yerine, görünen işlemlerin çoğunun veya çoğunun alt rutin çağrılar olarak yapıldığından eminim. Ve gerçekleştirilen her operasyon için, sonucun gösterilmesi için kayda değer miktarda ilave çalışma yapılması gerekir.

Görülebilir işlemleri üst düzey bir sanal makine için bir montaj dili olarak düşünebilirsiniz, ancak bu sanal makine gerçek CPU'da çalışan bir tercüman gibi bir şeyle gerçekleştirilir.

Yine de, sorunuzun ikinci kısmına verilen cevabın şöyle olduğunu söyleyebilirim:

Bu cihazı kullanarak montaj dilleri hakkında temel bir fikrim var mıydı?

Evet.


1
Kutularımızda AX, BX, CX ve DX yoktur, montaj dillerine sembolik çeviri yapılabilir. Üst düzey işlevlerin kesinlikle montaj olmadığına katılıyorum, ancak listelediklerinin bunları içermediğine dikkat edin. Bence pek olası değil, bir meclis diliydi (adresleme modunun çalışması için her şeyin sabit olması gerekiyordu) listelenen komutların hiçbiri bir PC'deki meclisin ötesinde değil.
Loren Pechtel

2
"Eğer X <0 ise program adımına gidin ##" basit bir BMI (eksi ise dal) montaj talimatıdır.
mouviciel

1
@mouviciel Ve platform BMIörnek gibi bir şeyi doğrudan desteklemese bile IF ... THEN ..., genellikle iki talimat olarak okunur: önce bir karşılaştırma ( x < 0bu durumda), daha sonra bu karşılaştırmanın sonucuna dayanan bir eylem (büyük olasılıkla çalışırken bir sıçrama montaj dilinde). Intel 8086'da, (AX'ta xolduğu varsayılmaktadır ) gibi bir şey CMP AX, 0 JNL After_IfThen_Block. (Daha üst düzey bir dilde, bu gibi bir şey gibi okurdum Değil Az eğer JNL Jump olmanın if not (x < 0) then goto After_IfThen_Blockaynıdır, if (x >= 0) then {code until there}.)
Bir CVn

1
ПРГ(PRG - programlama), bazı fonksiyonlara değil, programlama moduna geçmek için sadece bir anahtardır.
Oleg V. Volkov

1
@mouviciel: "Eğer X <0 ise o zaman ## program adımına gidin" aslında tek bir donanım CPU talimatı olarak uygulandığından şüpheleniyorum . Ben hesap girilen bir program spekülasyon olmayan işlemci bir dizi talimat olarak saklanır; bunun yerine, bir ürün yazılımı programı tarafından yorumlanan bir üst düzey komut dizisi olarak saklanır . Bu hesap makinesinde hiç çalışmadım, ancak HP-48'i kullandım; kullanıcı tarafından görülebilen komut seti kullandığı Satürn CPU'sundan çok farklı.
Keith Thompson,

9

Bu doğru, yayınlanan kod parçası derleme diline benziyor . Bu kodun uygun şekilde dönüştürülmesi sürümü tanımlar.

Düzenleme: Bu aygıt için belirli bir dili var, ancak derleme değil.

Aynı zamanda bir SSCB yapılmış hesap makinesi gibi görünüyor. Yuvarlak pillerle mi çalışıyor / kordonda mı?


3
Doğru, 80'lerin ortalarından itibaren Sovyet Ukrayna'da üretildi. 1991 yılında bir tane yaptım. Her ikisi de 3 adet AA pil ve 220v adaptör için yuvalara sahip.
defhlt

1
Bu gerçekten benim için bir nostaljik. Bu marka adını "Elektronika" olarak hatırlıyorum :) :)
EL Yusubov

3

BASIC bir montaj dili melezine daha yakın olduğunuzu iddia ediyorum, ancak bu aslında temel işlemci ve mimariye bağlı. Konuşacak gerçek bir RAM'iniz yoksa, doğrudan bellek erişimi olması gerekmez. Kayan nokta işlemlerinin FPU'suz olması da gerekmez.

Bence basit bir test, bir kayan nokta sayısında bir ek işlem ve bir tam sayı olacaktır. Çoğu yüksek seviye programlama dili ADD 2.5, 7'yi kabul eder ve 9.5 değerini döndürür. Bununla birlikte, meclis dilleri çıktıyı çağrılan talimata ve ikili sayıdaki temsili sayısına bağlı olarak değiştirecektir. Çoğu meclis dili, tam sayı işlemlerine göre kayan nokta kullanımına bağlı olarak farklı bir talimat gerektirir. Bunun bir istisnası, bir tür sabit nokta formatı olabilir.


Tüm sayıları sadece yüzer olarak ele alabilir ve 7.0 argümanlarından birini düşünebilir.
Oleg V. Volkov

Belki de @ OlegV.Volkov, o zaman sadece toplamı gerçek gösterimi olmayan iki kayan nokta sayısını seçmeniz yeterlidir. Ayrıca çıkarma işlemindeki iptal hatalarını avlayabilirsiniz.
Peter Smith

3

Ters Lehçe notasyonu (RPN) hesap makineleri klasikti. Hayır, her ne kadar sicil isimleri assembly dili gibi görünse de öyle değildi. Hesaplamalar cebirsel formattan yığına çevrilerek gerçekleştirildi. Kullanılan sayılar yığına itildi ve son yığılmış değerlerin yanında son yığılmış işlem yapıldı.

Görüntülenen değer bir yığın üyesi olduğundan, değerleri taşımak için yığını "döndürebilirsiniz". Neredeyse karmaşık bir hesaplama yapmak için sonuçlar gerektiğinde değiştirilebilir veya istiflenebilir. Yığın donanım ve derleme dilini anlıyorsanız, bu hesap makinesinin paradigması en benzer olduğu için öğrenmesi çok önemliydi.

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.