Küçük adam bilgisayar

Küçük Adam Bilgisayar ( LMC ) bir olduğunu eğitsel bilgisayar Dr tarafından oluşturulan, Stuart Madnick 1965 LMC tipik bunun nedeni modelleri ile basit bilgisayar öğretimi öğrencileri için kullanılan von Neumann mimarisi -. Bunların hepsi var temel işlevleri modern bir bilgisayar. Makine kodunda (ikili formdan ziyade ondalık formda olmasına rağmen) veya assembler'da programlanabilir.

Sistem mimarisi

LMC modeli, küçük bir odada veya bir bilgisayarda kilitli küçük bir adam konseptine dayanmaktadır. Odanın sonunda , her biri 3 basamaklı bir talimat veya veri öğesi (dolayısıyla 000 ila 999 arasında değişen) içerebilen, 0 ila 99 numaralı 100 posta kutusu ( hafıza ) vardır. Ek olarak, veri almak ve göndermek için kullanılan diğer uçta GELEN KUTUSU (gelen kutusu) ve ÇIKIŞ KUTUSU (giden kutusu) olarak işaretlenmiş iki posta kutusu vardır. Odanın ortasında, Akümülatör adı verilen basit iki işlevli (toplama ve çıkarma) bir hesap makinesi ve Program Sayacı adı verilen sıfırlanabilir bir sayaç içeren bir çalışma alanı vardır . Program Sayacı, Küçük Adam'ın gerçekleştireceği bir sonraki talimatın adresini içerir. Program Sayacı, normalde yürütülen her komuttan sonra 1 artırılır ve Little Man'in programı sıralı olarak yürütmesine izin verir. Bölüm ifadeleri, yinelemelerin (döngüler) ve koşullu yapıların bir programa dahil edilmesine izin verir. İkincisi, belirli bir koşul karşılanırsa (genellikle toplayıcıda depolanan değer pozitif veya sıfır ise) Program Sayacına sıralı olmayan bir bellek adresi atayarak. Belirtildiği gibi , von Neumann mimarisi , yönerge ve verileri hem de içerir. Bu nedenle, Program Sayacının veri içeren bir hafıza adresine ulaşmasını önlemek için dikkatli olmak gerekir, aksi takdirde Küçük Adam bunu bir talimat olarak ele almaya çalışacaktır. LMC'yi kullanmak için, kullanıcı verileri posta kutularına yükler ve Hafıza adresi sıfırda depolanan talimattan başlayarak Küçük Adam'a yürütmeye başlaması için sinyal gönderir. Program Sayacının sıfırlanması programı yeniden başlatır.

Yürütme döngüsü

Küçük Adam bir programı çalıştırmak için şu adımları gerçekleştirir:

  1. Bir program talimatı içeren posta kutusu numarasını (örneğin sıfır) almak için Program Sayacını kontrol edin.
  2. Bu numara ile posta kutusundan talimatı alın ve alın.
  3. Program Sayacını artırın (bir sonraki talimatı içeren posta kutusu numarasını içerecek şekilde)
  4. Talimatı çözün (bu, bu talimatın üzerinde çalışacağı veriler için posta kutusu numarasının bulunmasını içerir, örneğin "kutu 42'den veri al")
  5. Önceki adımda bulunan numara ile posta kutusundaki verileri alın (örneğin, verileri toplayıcıya kaydedin)
  6. Talimatı yürüt
  7. Yeni verileri eski verilerin alındığı posta kutusuna kaydedin
  8. Döngüyü tekrarlayın veya durdurun

Emirler

LMC, ikili işlemcilerin gerçekte nasıl çalıştığını yansıtsa da, ikili veya onaltılık olarak çalışmaya alışkın olmayan öğrenciler için karmaşıklığı en aza indirmek için ondalık sayıların basitliği seçilmiştir .

Talimatlar

Bazı CML simülatörleri doğrudan 3 basamaklı sayısal talimatlar kullanılarak programlanır ve diğerleri 3 harfli anımsatıcı kodlar ve etiketler kullanır. Her iki durumda da, anlaşılmasını kolaylaştırmak için talimat seti kasıtlı olarak çok sınırlıdır ( genellikle yaklaşık on talimat ). LMC anımsatıcı kodlar ve etiketler kullanıyorsa, program birleştirildiğinde bunlar 3 basamaklı dijital talimatlara dönüştürülür. Sayısal bir talimatın ilk basamağı, gerçekleştirilecek komutu temsil eder ve son iki basamak, bu komutla ilgili posta kutusunun hafıza adresini temsil eder.

Aşağıdaki tablo tipik bir talimat setini ve bunlara karşılık gelen anımsatıcı kodları göstermektedir.

Sayısal Kod Anımsatıcı kod Talimat Açıklama
1xx EKLE EKLE Posta kutusunda xx depolanan değeri, o anda toplayıcıda (hesap makinesi) bulunan değere ekler. Not: Posta kutusunun içeriği değiştirilmez ve toplayıcının (hesaplayıcı) eylemleri, 3 basamaktan daha büyük toplamları içeren toplama talimatları için tanımlanmaz.
2xx ALT ÇIKARMA Posta kutusunda xx depolanan değeri, o anda toplayıcıda (hesap makinesi) bulunan değerden çıkarır. Not: Posta kutusunun içeriği değiştirilmez ve toplayıcının (hesaplayıcı) eylemleri, negatif sonuçlar veren çıkarma talimatları için tanımlanmaz - ancak, 8xx (BRP) 'nin doğru bir şekilde kullanılabilmesi için negatif bir bayrak atanabilir .
3xx STA MAĞAZA Akümülatörün içeriğini posta kutusu xx'e kaydedin (yıkıcı talimat) Not: Toplayıcının (hesap makinesi) içeriği değiştirilmez (tahribatsız), ancak burada depolanan değerden bağımsız olarak posta kutusunun içeriği değiştirilir (yıkıcı).
5xx LDA YÜK Xx posta kutusunun değerini yükler (tahribatsız yükleme) ve bunu toplayıcıya yazar (yıkıcı kayıt).
6xx SUTYEN ŞUBE (koşulsuz) Program sayacını verilen adrese ayarlar (değer xx). Böylece, xx değeri yürütülen bir sonraki komutun adresi olacaktır.
7xx BRZ SIFIR İSE ŞUBE (şartlı) Toplayıcı (hesap makinesi) 000 değerini içeriyorsa, program sayacını xx değerine ayarlayın, başka hiçbir şey yapmayın. Not: Program hafızaya kaydedildiğinden, program verileri ve komutların tümü aynı adres / konum formatına sahiptir.
8xx BRP POZİTİF İSE ŞUBE (şartlı) Toplayıcı (hesap makinesi) pozitif veya sıfır ise, program sayacını xx adresine ayarlayın, başka bir şey yapmayın. Not: Program hafızaya kaydedildiğinden, program verileri ve komutların tümü aynı adres / konum formatına sahiptir.
901 INP GİRİŞ GELEN KUTUSUNA gidin, kullanıcının değerini alır ve bunu akümülatöre (hesap makinesi) kaydeder. Not: bu, akümülatörde bulunan herhangi bir değerin üzerine yazacaktır (yıkıcı yazma).
902 DIŞARI ÇIKTI Akümülatörün değerini OUTBOX'a kopyalayın. Not: Akümülatörün içeriği değiştirilmez (tahribatsız kopya).
000 HLT / COB DURMA / KAHVE ARASI İşlemi durdurun.
DAT VERİ Bu, verilen değeri bir sonraki mevcut posta kutusuna basitçe yükleyen bir assembler komutudur. DAT, değişkenleri bildirmek için etiketlerle birlikte de kullanılabilir. Örneğin, DAT 465, DAT komutunun adresindeki posta kutusunda 465 değerini saklayacaktır.

Örnekler

Dijital talimat kodlarını kullanma

Bu program (talimat 901 ile 000 ) yalnızca sayısal kodları kullanılarak yazılır. Program girdi olarak iki sayı alır ve farkı döndürür. Yürütmenin Posta Kutusu 00'da başladığını ve Posta Kutusu 07'de sona erdiğini unutmayın. LMC'yi sayısal komut kodları kullanarak programlamanın dezavantajları aşağıda açıklanmıştır.

Mektup kutusu Sayısal Kod Ameliyat Yorumlar (değiştir | kaynağı değiştir)
00 901 GELEN KUTUSU → AKÜMÜLATÖR İlk sayıyı girin (GİRİŞ), hesap makinesine yerleştirin (orada olanı silerek).
01 308 AKÜMÜLATÖR → BELLEK [08] Hesap makinesinin mevcut değerini saklayın (SAKLA) (sonraki adıma hazırlanmak için).
02 901 GELEN KUTUSU → AKÜMÜLATÖR İkinci sayıyı girin (GİRİŞ), hesap makinesine yerleştirin (orada olanı silerek).
03 309 AKÜMÜLATÖR → BELLEK [09] Hesap makinesinin mevcut değerini saklayın (SAKLA) (bir sonraki adıma bir kez daha hazırlamak için).
04 508 BELLEK [08] → AKÜMÜLATÖR (Artık girilen değerler 08 ve 09 posta kutularında saklandığına göre)

Bilgisayardaki ilk değeri yeniden yükleyin (YÜKLE) (orada olanı silerek).

05 209 AKÜMÜLATÖR = AKÜMÜLATÖR - BELLEK [09] Hesap makinesinin mevcut değerinden ikinci sayıyı çıkarın (ÇIKAR) (girilen ilk sayıya yeni ayarlanmış olan).
06 902 AKÜMÜLATÖR → OUTBOX Hesap makinesinin sonucunu Giden Kutusuna (ÇIKIŞ KUTUSU) gönderin (ÇIKTI).
07 000 (hiçbir işlem yapılmadı) LMC'yi durdurun (DURDURUN).
Anımsatıcı talimat kodlarını ve etiketleri kullanma

Assemblage dil alt düzey bir programlama dilidir that use sembolleri ve etiketleri yerine dijital talimat kodları. LMC, bu anımsatıcıların yalnızca sınırlı bir setini kullansa da, her bir talimat için bir anımsatıcı kullanmanın rahatlığı, aşağıda gösterilen aynı programın montaj dili tarafından anlaşılır hale getirilmiştir - programlama artık bir dizi anonim dijital kodu ezberlemesine gerek yoktur ve artık hatırlaması daha kolay bir dizi anımsatıcı kodla programlayabilir. Anımsatıcı, bir bellek adresiyle ilgili bir talimatsa ( bir bölüm talimatı veya bir veri yükleme / kaydetme ), bu durumda etiket, bellek adresini adlandırmak için kullanılır.

Bu örnek program, York Üniversitesi web sitesinde ( Toronto , Kanada ) veya Mike Coley tarafından yazılan masaüstü uygulamasında bulunan LMC simülatöründe derlenebilir ve çalıştırılabilir . Tüm bu simülatörler, tüm talimatları ve örnek programları, montaj kodunu makine koduna dönüştürmek için bir birleştiriciyi, programları çalıştırmak ve kontrol etmek için kontrol arayüzlerini ve her komut için adım adım bir uygulamayı içerir.INP STA TERME1 INP STA TERME2 LDA TERME1 SUB TERME2 OUT HLT TERME1 DAT TERME2 DAT

Etiketler

Etiketler olmadan programcının Posta Kutularının (bellek) adreslerini manuel olarak hesaplaması gerekirdi. Gelen örnek sayısal kod , yeni talimatlar HLT talimatı (adres etiketleme pozisyonunda 00 başlar) 08 adresi, adres 07 taşınmış olacağını daha sonra nihai HLT talimatı önce eklenecek olsaydı. Kullanıcının ilk girişte 600 girdiğini varsayalım. 308 talimatı, bu değerin 08 adresinde saklanacağı ve 000 talimatının (HLT) silineceği anlamına gelir. 600, "posta kutusu adresi 00'a çatal" anlamına geldiğinden, program durmak yerine sonsuz bir döngüde asılı kalır.

Bu zorluğun üstesinden gelmek için, çoğu montaj dili ( LMC dili dahil ) anımsatıcıları etiketlerle birleştirir. Bir etiket, bir talimatın veya verinin saklandığı bir hafıza adresini adlandırmak veya bir talimatta bu adrese atıfta bulunmak için kullanılan bir kelimedir.

Bir program birleştirildiğinde:

  • Bir anımsatıcı talimatın solundaki bir etiket, talimatın hafıza adresine veya orada depolanan verilere dönüştürülür (örneğin, INP döngüsünü başlat )
  • Bir anımsatıcı talimatın sağındaki bir etiket, yukarıda belirtilen bellek adresinin değerinin yerini alır (örneğin BRA başlatma döngüsü )
  • Bir DAT ifadesiyle birleştirilmiş bir etiket bir değişken gibi çalışır, belleğin depolandığı bellek adresini etiketler (örneğin bir DAT 1 veya DAT numarası1 )

Gelen çevirici dili Örneğin , yeni bir talimat nihai HLT talimatı önce takılırsa komutları ve etiketleri kullanır, sonra TERM1 etiketli adresin konumunu artık hafıza konumu 09 yerine 08 olacağını ve STA TERME1 talimat 309 dönüştürülebilir olurdu Program birleştirildiğinde 308 (STA 08) yerine (STA 09).

Bu nedenle etiketler şunlar için kullanılır:

  • ŞUBE talimatı için hedef olarak belirli bir talimatı belirleyin.
  • (DAT kullanılarak) ve muhtemelen onlar olarak tanımlamak sürece 1 un sayaç eklemek için, örneğin bu mümkün değildir (program tarafından kullanılan, böylece montaj süresi de programın veri yüklemek adlandırılmış bir değişken olarak, belirli bir bellek konumu tanımlamak bir DAT 1 veya kullanıcıdan isteyin, ki bu çok pratik değildir).

Misal

Bu program kullanıcı girdisini alır ve sıfıra doğru geri sayar.

INP BOUCLE SUB UN // Étiqueter cette adresse mémoire BOUCLE, l'instruction soustraira la valeur stockée à l'adresse UN à l'accumulateur. OUT BRZ QUIT // Si la valeur de l'accumulateur est 0, sauter à l'adresse mémoire étiquetée QUITTER BRA LOOP // Si la valeur de l'accumulateur n'est pas 0, sauter à l'adresse mémoire étiquetée BOUCLE QUITTER HLT // Étiqueter cette adresse mémoire QUITTER UN DAT 1 // Stocker la valeur 1 à cette adresse mémoire et l’étiqueter UN (déclaration de variable).

Bu program kullanıcı girdisini alır, karesini alır, cevabı döndürür ve baştan başlar. Sıfır değerinin girilmesi programı sonlandırır. (Not: Daha büyük bir çıktı 999 ile sonuçlanan bir girdi, LMC'nin 3 basamaklı sayı sınırı nedeniyle bir hataya neden olacaktır).

DEBUT LDA ZERO // Initialisation pour permettre d'exécuter le programme plusieurs fois STA RESULTAT STA COMPTEUR INP // Entrée fournie par l'utilisateur BRZ END // Saute au programme END si l'entrée est égale à zéro STA VALEUR // Stocke l'entrée dans VALEUR LOOP LDA RESULTAT // Load the RESULTAT ADD VALEUR // Ajoute VALEUR, l'entrée fournie par l'utilisateur à RESULTAT STA RESULTAT // Stocke le nouveau RESULTAT LDA COMPTEUR // Charge le COMPTEUR ADD UN // Ajoute UN au COMPTEUR STA COMPTEUR // Stocker le nouveau COMPTEUR SUB VALEUR // Soustraire la nouvelle VALEUR entrée par l'utilisateur au COMPTEUR BRZ ENDLOOP // Si zéro (VALEUR a été ajouté au RESULTAT VALEUR fois), aller à FINBOUCLE BRA LOOP // Aller à BOUCLE pour continuer à ajouter VALEUR à RESULTAT FINBOUCLE LDA RESULTAT // Charger RESULTAT OUT // Sortir RESULTAT BRA START // Aller à START afin de réinitialiser et de récupérer une autre entrée VALEUR END HLT // Arrêt (HALT) - un zéro a été entré, le programme est donc terminé. RESULTAT DAT // Résultat calculé (0 par défaut) COMPTEUR DAT // COMPTEUR (0 par défaut) UN DAT 1 // Constante, valeur de 1 VALEUR DAT // Entrée fournie par l'utilisateur, la valeur à être mise au carré (0 par défaut) ZERO DAT // Constante, valeur de 0 (0 par défaut)

Not: Bir DAT bildiriminden sonra herhangi bir değer verilmezse, varsayılan değer olan 0, bellek konumunda saklanır.


Referanslar

  1. "  Little Man Computer  " ( ArşivWikiwixArchive.isGoogle • Ne yapmalı? ) , Illinois Eyalet Üniversitesi ,1 st May 2000( 8 Mart 2009'da erişildi )
  2. DOI : hayır
  3. DOI : hayır
  4. DOI : hayır
  5. Stephen Y. Chen ve William C Cudmore , "  The little man computer  " , York University ( 7 Ekim 2010'da erişildi )

Dış Bağlantılar - Simülatörler