Obsah:

Kódujte a otestujte počítač ve strojovém jazyce: 6 kroků
Kódujte a otestujte počítač ve strojovém jazyce: 6 kroků

Video: Kódujte a otestujte počítač ve strojovém jazyce: 6 kroků

Video: Kódujte a otestujte počítač ve strojovém jazyce: 6 kroků
Video: Machine Learning with Python! Simple Linear Regression 2024, Listopad
Anonim
Image
Image

V tomto Instructable vám ukážu, jak kódovat a testovat počítačový program ve strojovém jazyce. Strojový jazyk je rodný jazyk počítačů. Protože se skládá ze řetězců 1 s a 0 s, není lidem snadno srozumitelný. Abychom to vyřešili, naprogramujeme programy nejprve v jazyce na vysoké úrovni, jako je C ++ nebo Java, a poté je pomocí speciálních počítačových programů převedeme do počítačů, kterým počítače 1 a 0 rozumí. Naučit se kódovat v jazyce na vysoké úrovni je bezpochyby samozřejmost, ale krátký úvod do strojového jazyka může poskytnout cenný vhled do fungování počítačů a zvýšit ocenění této velmi důležité technologie.

Abychom mohli programovat a testovat program strojového jazyka, potřebujeme přístup k jednoduchému počítači, jehož strojovému jazyku lze snadno porozumět. Osobní počítače jsou příliš složité na to, aby se o nich vůbec uvažovalo. Řešením je použít Logisim, logický simulátor, který běží na osobním počítači. S Logisimem můžeme simulovat počítač, který splňuje naše potřeby. Video výše vám dává představu, čeho můžeme s Logisimem dosáhnout.

Pro návrh počítače jsem upravil jeden z mé e -knihy Kindle Postavte si vlastní počítač - od nuly. Začal jsem s tam popsaným počítačem BYOC a upravil jej na různé základní BYOC-I (I pro Instructable), které použijeme v tomto Instructable.

Strojový jazyk BYOC-I je jednoduchý a snadno pochopitelný. Nebudete potřebovat žádné speciální znalosti o počítačích nebo programování. Vše, co potřebujete, je zvídavá mysl a touha učit se

Další čtení

Možná se divíte, proč používáme k popisu počítače „stroj“, když to není mechanické zařízení. Důvod je historický; první výpočetní zařízení byla mechanická sestávající z ozubených kol a kol. Texty Allana Shermana: „Bylo to všechno, co se hýbe kliky …“bylo mimo století nebo dvě. Přečtěte si více o raných výpočtech zde.

Krok 1: Seznam dílů

Hierarchie a kódy strojového jazyka
Hierarchie a kódy strojového jazyka

Seznam dílů je krátký. Jsou vyžadovány pouze tyto dvě položky, obě zdarma ke stažení:

  1. "Logisim-win-2.7.1.exe"-Logisim je populární a snadno použitelný logický simulátor. Stáhněte si odtud spustitelný soubor Logisim a poté vytvořte zkratku na vhodném místě, jako je plocha. Dvojitým kliknutím na ikonu Logisim ji spustíte. Poznámka: Logisim používá Java Runtime Package umístěný zde. Můžete být požádáni o jeho stažení.
  2. BYOC-I-Full.cir "-Stáhněte si níže uvedený soubor obvodu Logisim.

Spusťte Logisim, poté klikněte na „Otevřít soubor“a načtěte soubor BYOC-I-Full.cir. Obrázek výše ukazuje pracovní prostředí Logisim. BYOC-I je reprezentován subobvodovým blokem. Externě jsou připojeny dva vstupy, Reset a Run a hexadecimální displeje registrů BYOC-I a paměti programu.

V paměti programu BYOC-I je předem načten jednoduchý program, který v registru A čítá od 1 do 5. Chcete -li spustit (spustit) program, postupujte takto.

Krok 1 - Klikněte na Poke Tool. Kurzor by se měl změnit na tykání „prstu“. Krok 2 - Vstup Reset resetujte dvakrát, jednou jej změňte na „1“a znovu jej změňte zpět na „0“. Tím se resetuje BYOC -I ke spuštění programu na adrese 0. Krok 3 - Poke the Run vstup jednou změnit na „1“. Registr A by měl zobrazit počet měnící se z 1 na 5 a poté se opakovat. Krok 4 - Pokud se program nespustí, stiskněte control -K a měl by se spustit.

Chcete -li prozkoumat možnosti Logisimu, klikněte na liště nabídek na odkaz Nápověda. Odtud můžete prozkoumat Logisim „Tutorial“, „User Guide“a „Library Reference“. Vynikající video úvod najdete zde.

Krok 2: Hierarchie a kódy strojového jazyka

Hierarchie a kódy strojového jazyka
Hierarchie a kódy strojového jazyka

Počítač BYOC-I provádí úkoly na základě programů napsaných ve strojovém jazyce. Programy BYOC-I jsou zase složeny z instrukcí provedených v dobře definované sekvenci. Každá instrukce je tvořena kódy pevné délky, které představují různé provozní komponenty BYOC-I. Nakonec tyto kódy sestávají z řetězců 1 s a 0 s, které tvoří strojový jazyk, který BYOC-I skutečně provádí.

Pro vysvětlení začneme s kódy a propracujeme se až na úroveň programu. Poté nakódujeme jednoduchý program, načteme jej do paměti BYOC-I a spustíme.

Kódy se skládají z pevného počtu binárních (1 a 0) číslic nebo bitů, zkráceně. Níže uvedená tabulka například ukazuje všechny možné kódy (celkem 16) pro kód široký 4 bity. Na boku je kód hexadecimální (základna 16) a desetinný ekvivalent. Hexadecimální se používá při odkazování na binární hodnoty, protože je kompaktnější než binární a snadněji se převádí z binárních než desítkových. Předpona „0x“vás informuje, že následující číslo je hexadecimální nebo zkráceně „hex“.

Binární - Hexadecimální - Decimal0000 0x0000 00001 0x0001 10010 0x0002 20011 0x0003 30100 0x0004 40101 0x0005 50111 0x0007 71000 0x0008 81001 0x0009 91010 0x000A 101011 0x000B 111100 0x000C 121101 0x000 13

Šířka kódu určuje, kolik položek lze reprezentovat. Jak již bylo uvedeno, výše uvedený 4bitový široký kód může představovat až 16 položek (0 až 15); to znamená, že 2 krát 2 vzato čtyřikrát nebo 2 až 4. mocnina se rovná 16. Obecně je počet reprezentovatelných položek 2 zvýšen na n -tou mocninu. Zde je krátký seznam kapacit n-bitového kódu.

n - Počet položek 1 22 43 84 165 326 647 1288 256

Šířky počítačových kódů BYOC-I jsou zvoleny tak, aby vyhovovaly počtu položek, které mají být reprezentovány kódem. Existují například čtyři typy instrukcí, takže je vhodný 2bitový široký kód. Zde jsou kódy BYOC-I se stručným vysvětlením každého z nich.

Kód typu instrukce (tt) Existují čtyři typy instrukcí: (1) MVI - Přesune okamžitou 8bitovou konstantní hodnotu do paměťového registru. Paměťový registr je zařízení, které uchovává data, která mají být použita pro výpočet, (2) MOV - přesun dat z jednoho registru do druhého, (3) RRC - provedení výpočtu registru k registru a (4) JMP - skok na jiný pokyn místo pokračování na další pokyn. Přijaté kódy typů instrukcí BYOC-I jsou následující:

00 MVI01 MOV10 RRC11 ŽMP

Registrační kód (dd a ss) BYOC-I má čtyři 8bitové registry schopné ukládat hodnoty od 0 do 255. K označení čtyř registrů stačí 2bitový kód:

00 F registr01 E registr10 D registr11 registr A

Výpočtový kód (ccc) BYOC-I podporuje čtyři aritmetické/logické operace. Aby bylo možné budoucí rozšíření na osm výpočtů, používá se 3bitový kód:

000 ADD, přidejte dvě 8bitové hodnoty do určených registrů a výsledek uložte do jednoho z registrů 001 SUB, odečtěte dvě 8bitové hodnoty do určených registrů a výsledek uložte do jednoho z registrů 010-011 Rezervováno pro budoucí použití100 AND, logicky A dvě 8bitové hodnoty do určených registrů a výsledek uložte do jednoho z registrů101 NEBO, logicky NEBO dvě 8bitové hodnoty do určených registrů a výsledek uložte do jednoho z registrů110 až 111, vyhrazeno pro budoucí použití

Skokový kód (j) 1bitový kód, který indikuje, zda je skok bezpodmínečný (j = 1) nebo podmíněn nenulovým výsledkem výpočtu (j = 0).

Datový/adresní kód (v… v)/(a… a) 8bitová data mohou být zahrnuta v určitých instrukcích představujících hodnoty od 00000000 do 11111111 nebo od 0 do 255 desetinných míst. Tato data jsou široká 8 bitů pro uložení v 8bitových registrech BYOC-I. Při desítkové aritmetice nezobrazujeme úvodní nuly. S počítačovou aritmetikou zobrazujeme počáteční nuly, ale neovlivňují hodnotu. 00000101 je číselně stejné jako 101 nebo 5 desetinných míst.

Doporučené reference

Binární zápis - https://learn.sparkfun.com/tutorials/binaryHexadecimal Notation -

Další čtení

Myšlenka použití kódů k řízení procesu sahá daleko do minulosti. Jedním fascinujícím příkladem je Jacquard Loom. Automatizovaný tkalcovský stav byl řízen řetězem dřevěných karet, ve kterých byly vyvrtány otvory představující kódy pro různě barevné příze pro tkaní. Svého prvního jsem viděl ve Skotsku, kde se z něj vyráběly barevné plédy. Přečtěte si více o Jacquard Looms zde.

Krok 3: Anatomie pokynů BYOC-I

Anatomie instrukcí BYOC-I
Anatomie instrukcí BYOC-I

Vzhledem k kódům BYOC-I přecházíme na další úroveň, pokyny. Abychom vytvořili instrukci pro BYOC-I, umístíme kódy společně v uvedeném pořadí a na konkrétních místech v rámci instrukce. Ne všechny kódy se objevují ve všech pokynech, ale pokud ano, zabírají konkrétní místo.

Typ instrukce MVI vyžaduje nejvíce bitů, celkem 12. Vytvořením instrukčního slova o délce 12 bitů vyhovíme všem instrukcím. Nepoužitým bitům (takzvaným „nezáleží“) je přiřazena hodnota 0. Zde je instrukční sada BYOC-I.

  1. Move Immediate (MVI) - 00 dd vvvvvvvvv Funkce: Přesune 8bitovou datovou hodnotu V = vvvvvvvv do cílového registru dd. Po provedení bude mít registr dd hodnotu vvvvvvvv. Zkratka: MVI R, V kde R je A, D, E nebo F. Příklad: 00 10 00000101 - MVI D, 5 - Přesuňte hodnotu 5 do registru D.
  2. Přesunout registr do registru (MOV) - 01 dd ss 000000 Funkce: Přesunout data ze zdrojového registru ss do cílového registru dd. Po provedení mají oba registry stejnou hodnotu jako zdrojový registr. Zkratka: MOV Rd, Rs kde Rd je cílový registr A, D, E nebo F a Rs je zdrojový registr A, D, E nebo F. Příklad: 01 11 01 000000 - MOV A, E - Přesuňte hodnotu v registru E k registraci A.
  3. Register to Register Calculation (RRC) - 10 dd ss ccc 000 Funkce: Proveďte určený výpočet ccc pomocí zdrojového registru ss a cílového registru dd a poté výsledek uložte do cílového registru. Zkratky: ADD Rd, Rs (ccc = 000 Rd + Rs uložené v Rd); SUB Rd, Rs (ccc = 001 Rd - Rs uložené v Rd); AND Rd, Rs (ccc = 100 Rd AND Rs uložených v Rd); NEBO Rd, Rs (ccc = 101 Rd NEBO Rs uložených v Rd). Příklad: 10 00 11 001 000 - SUB F, A - Odečtěte hodnotu v registru A od registru F s výsledkem v registru F.
  4. Přejít na jinou instrukci (JMP) - 11 j 0 aaaaaaaa Funkce: Změnit provedení na jinou instrukci umístěnou na adrese aaaa aaaa (a) Bezpodmínečně (j = 1) -11 1 0 aaaaaaaa Zkratka: JMP L kde L je adresa aaaa aaaa Příklad: 11 1 0 00001000 - JMP 8 - Změnit provedení na adresu 8. (b) Podmíněně (j = 0), když předchozí výpočet vedl k nenulovému výsledku - 11 0 0 aaaaaaaa Zkratka: JNZ L kde L je adresa aaaa aaaa. Příklad: 11 0 0 00000100 JNZ 4 Pokud poslední výpočet přinesl nenulovou hodnotu, změňte provedení na adresu 4.

Bity instrukčních slov jsou číslovány zleva (nejvýznamnější bit MSB) doprava (nejméně významný bit LSB) od 11 do 0. Pevné pořadí a umístění kódů jsou následující:

Bits-Code11-10 Instruction Type9-8 Destination Register7-6 Source Register5-3 Výpočet: 000-add; 001 - odečíst; 100 - logické AND; 101 - logický OR7-0 Konstantní hodnota v… v a a… a (0 až 255)

Sada instrukcí je shrnuta na obrázku výše. Všimněte si strukturovaného a uspořádaného vzhledu kódů v každé instrukci. Výsledkem je jednodušší design pro BYOC-I a usnadňuje pochopení pokynů pro člověka.

Krok 4: Kódování počítačové instrukce

Kódování počítačové instrukce
Kódování počítačové instrukce

Než se přesuneme na úroveň programu, vytvořme několik příkladů pokynů pomocí výše uvedené instrukční sady BYOC-I.

1. Přesuňte hodnotu 1 do registru A. Registry BYOC-I mohou ukládat hodnoty od 0 do 255. V tomto případě bude mít registr A po provedení instrukce hodnotu 1 (00000001 binární).

Zkratka: MVI A, 1 Požadované kódy: Typ MVI - 00; Registr destinace A - 11; Hodnota - 00000001 Instrukční slovo: 00 11 00000001

2. Přesuňte obsah registru A do registru D. Po provedení budou mít oba registry hodnotu původně v registru A.

Zkratka: MOV D, A (Pamatujte si, že cíl je v seznamu první a zdroj druhý) Požadované kódy: Typ MOV - 01; Registr destinace D - 10; Zdrojový registr A - 11 Instrukční slovo: 01 10 11 000000

3. Přidejte obsah registru D do registru A a uložte do registru A. Po provedení bude hodnota registru A součtem původní hodnoty registru A a registru D.

Zkratka: ADD A, D (Výsledek je uložen v cílovém registru) Požadované kódy: Typ RRC - 10; Registr destinace A - 11; Zdrojový registr D - 10; Výpočet Přidat - 000 Instrukční slovo: 10 11 10 000 000 (ccc je prvních 000 - přidat)

4. Přejděte na nulu na adresu 3. Pokud výsledek posledního výpočtu nebyl nulový, provedení se změní na instrukci na dané adrese. Pokud je nula, provádění pokračuje podle následujících pokynů.

Zkratka: JNZ 3 Požadované kódy: Typ JMP - 11; Typ skoku - 0; Adresa - 00000003 Instrukční slovo: 11 0 0 00000003 (typ skoku je první 0)

5. Přejděte bezpodmínečně na adresu 0. Po provedení se provedení změní na instrukci na dané adrese.

Zkratka: JMP 0 Požadovaný kód: Typ JMP - 11; Typ skoku - 1; Adresa - 00000000 Instrukční slovo; 11 1 0 00000000

Zatímco strojové kódování je poněkud zdlouhavé, můžete vidět, že to není nemožné. Pokud byste strojově kódovali skutečně, použili byste počítačový program zvaný assembler k překladu ze zkratky (která se nazývá kód sestavy) do strojového kódu.

Krok 5: Anatomie počítačového programu

Anatomie počítačového programu
Anatomie počítačového programu

Počítačový program je seznam pokynů, které počítač provede od začátku seznamu, až po konec seznamu. Instrukce jako JNZ a JMP mohou změnit, která instrukce se provede dále. Každá instrukce v seznamu zaujímá jednu adresu v paměti počítače počínaje od 0. Do paměti BYOC-I se vejde seznam 256 instrukcí, což je pro naše účely více než dost.

Počítačové programy jsou určeny k provádění daného úkolu. Pro náš program vybereme jednoduchý úkol, který bude počítat od 1 do 5. Očividně neexistuje žádná instrukce „počítat“, takže prvním krokem je rozdělit úkol na kroky, které zvládne velmi BYOC-I omezená sada instrukcí.

Krok 1 Přesuňte 1 k registraci AStep 2 Přesuňte registr A k registraci DStep 3 Přidejte registr D k registraci A a uložte výsledek do registru AStep 4 Přesuňte 5 k registraci EStep 5 Odečtěte registr A od registru E a výsledek uložte do registru EStep 6 Pokud výsledek odčítání nebyl nula, vraťte se ke kroku 4 a pokračujte v počítání Krok 7 Pokud byl výsledek odčítání nulový, vraťte se a začněte znovu

Dalším krokem je přeložit tyto kroky do pokynů BYOC-I. Programy BYOC-I začínají na adrese 0 a čísle postupně. Adresy cílových skoků se přidávají jako poslední, jakmile jsou na místě všechny pokyny.

Adresa: Pokyn - Zkratka; Popis0: 00 11 00000001 - MVI A, 1; Přesuňte 1 do registru A1: 01 10 11 000000 - MOV D, A; Přesuňte registr A do registru D2: 10 11 100000000 - PŘIDAT A, D; Přidejte registr D do registru A a výsledek uložte do registru A3: 00 01 00 00000101 - MVI E, 5; Přesuňte 5 registr E4: 10 01 11 001 000 - SUB E, A; Odečtěte registr A z registru E a uložte výsledek v registru E5: 11 0 0 00000010 - JNZ 2; Pokud výsledek odčítání nebyl nula, vraťte se na adresu 3 a pokračujte v počítání 6: 11 1 0 00000000 - JMP 0; Pokud byl výsledek odčítání nulový, vraťte se a začněte znovu

Před přenosem programu do paměti musí být binární kód instrukce změněn na hexadecimální, aby jej bylo možné použít s editorem logiky Hex. Nejprve rozdělte instrukci do tří skupin po 4 bitech. Poté přeložte skupiny do šestnáctkové soustavy pomocí tabulky v kroku 2. Použijí se pouze poslední tři hexadecimální číslice (níže tučně).

Adresa - binární instrukce - instrukce (šestihranná) 111000000010 1110 0000 0000 - 0x0E00

Je čas přenést program do paměti BYOC-I pro testování.

Krok 6: Přenos programu do paměti a testování

Přenos programu do paměti a testování
Přenos programu do paměti a testování
Přenos programu do paměti a testování
Přenos programu do paměti a testování

Při pohledu na „hlavní“obvod Logisim je zobrazený blok BYOC-I symbolem pro skutečný počítačový obvod označený v podokně Průzkumníka „BYOC-I“. Chcete-li zadat program do paměti BYOC-I:

  1. Klikněte pravým tlačítkem na blok BYOC-I (nazývaný „podobvod“) a vyberte (najeďte myší a klikněte levým tlačítkem myši) „Zobrazit BYOC-I“.
  2. V pracovní oblasti se objeví obvod BYOC-I. Klikněte pravým tlačítkem na symbol „Programová paměť“a vyberte „Upravit obsah..“.
  3. Pomocí hexadecimálního editoru Logisim zadejte hexadecimální kód (pouze tučně), jak je uvedeno výše.

Nyní jste připraveni spustit program. Vraťte se do hlavního okruhu dvojitým kliknutím na „BYOC-I“v podokně Průzkumníka. Vstupy Run a Reset by měly být spuštěny „0“. Pomocí nástroje Poke nejprve změňte Reset na „1“a poté zpět na „0“. Tím bude počáteční adresa 0x0000 a připraví obvod BYOC-I k provedení. Nyní přepněte vstup Run na „1“a program se spustí. (Poznámka: Chcete-li spustit hodiny Logisim, musíte hlavně jednou klepnout na Control-K. Toto je funkce, která vám umožňuje zastavit hodiny Logisim a procházet program opakovaným klepnutím na Control-T. Zkuste to někdy!)

Hodiny Logisim lze nastavit pro široký rozsah frekvencí. Při stahování je to 8 Hz (8 cyklů za sekundu). Jak je počítač BYOC-I navržen, každá instrukce trvá čtyři hodinové cykly. Chcete-li tedy vypočítat rychlost BYOC-I, rozdělte hodinovou frekvenci o 4. Při 8 Hz je její rychlost 2 instrukce za sekundu. Hodiny můžete změnit kliknutím na „Simulovat“na panelu nástrojů a výběrem „Frekvence zaškrtnutí“. Možný rozsah je 0,25 Hz až 4100 Hz. Byla zvolena pomalá rychlost při 8 Hz, abyste mohli sledovat počet v registru A.

Maximální rychlost simulace BYOC-I (~ 1000 instrukcí za sekundu) je ve srovnání s moderními počítači velmi pomalá. Hardwarová verze počítače BYOC popsaná v mé knize se spouští více než 12 miliony instrukcí za sekundu!

Doufám, že tento Instructable demystifikoval programování strojového jazyka a poskytl vám přehled o tom, jak počítače fungují na jejich nejzákladnější úrovni. Chcete -li si porozumět, zkuste kódovat dva níže uvedené programy.

  1. Napište program, který začíná na 5 a odpočítává do 0. (ANS. Count5to0.txt níže)
  2. Počínaje 2, počítejte 3, dokud číslo nepřesáhne 7. Dalo by se udělat trochu mentální aritmetiky, zkontrolujte 8, protože víte, že tam přistane, a pak restartujte. Napište svůj program obecnějším způsobem, který skutečně otestuje, zda počet „překročí“konkrétní číslo. Tip: Podívejte se, co se stane, když odečtením získáte zápornou hodnotu, řekněme například 8 - 9 = -1. Poté experimentujte s logickým AND a vyzkoušejte, zda je MSB v 8bitovém čísle „1“. (ANS. ExceedsCount.txt)

Napadají vás další náročné problémy pro počítač BYOC-I? Co víc s ohledem na svá omezení dokáže? Podělte se se mnou o své zkušenosti na [email protected]. Pokud vás zajímá kódování mikroprocesorů, podívejte se na můj web www.whippleway.com. Tam přenáším strojové kódování do moderních procesorů, jako je řada ATMEL Mega používaná v Arduinosu.

Doporučuje: