Obsah:

Kódujte a otestujte počítač v strojovom jazyku: 6 krokov
Kódujte a otestujte počítač v strojovom jazyku: 6 krokov

Video: Kódujte a otestujte počítač v strojovom jazyku: 6 krokov

Video: Kódujte a otestujte počítač v strojovom jazyku: 6 krokov
Video: Машинное обучение с Python! Среднеквадратическая ошибка (MSE) 2024, November
Anonim
Image
Image

V tomto návode vám ukážem, ako kódovať a testovať počítačový program v strojovom jazyku. Strojový jazyk je rodný jazyk počítačov. Pretože je zložený z reťazcov 1 s a 0 s, nie je pre ľudí ľahko pochopiteľný. Aby sme to vyriešili, programujeme programy najskôr v jazyku na vysokej úrovni, ako je C ++ alebo Java, a potom ich pomocou špeciálnych počítačových programov preložíme do počítačov, ktorým počítače 1 a 0 rozumejú. Naučiť sa kódovať v jazyku na vysokej úrovni je určite neúrekom, ale krátky úvod do strojového jazyka môže poskytnúť cenný pohľad na to, ako počítače fungujú, a zvýšiť ocenenie tejto veľmi dôležitej technológie.

Na kódovanie a testovanie programu strojového jazyka potrebujeme prístup k jednoduchému počítaču, ktorého strojovému jazyku je ľahké porozumieť. Osobné počítače sú príliš zložité na to, aby sa o nich dalo uvažovať. Riešením je použiť logický simulátor Logisim, ktorý beží na osobnom počítači. S Logisimom môžeme simulovať počítač, ktorý vyhovuje našim potrebám. Video vyššie vám dáva predstavu, čo môžeme s Logisimom dosiahnuť.

Pre počítačový dizajn som upravil jeden z mojej e -knihy Kindle Zostavte si svoj vlastný počítač - od nuly. Začal som tam popísaným počítačom BYOC a upravil ho na rôzne základné BYOC-I (I for Instructable), ktoré budeme používať v tomto Instructable.

Strojový jazyk BYOC-I je jednoduchý a ľahko zrozumiteľný. Nebudete potrebovať žiadne špeciálne znalosti o počítačoch alebo programovaní. Všetko, čo potrebujete, je zvedavá myseľ a chuť učiť sa

Ďalšie čítanie

Možno sa čudujete, prečo na označenie počítača používame „stroj“, keď nejde o mechanické zariadenie. Dôvod je historický; prvé počítačové zariadenia boli mechanické pozostávajúce z ozubených kolies a kolies. Texty Allana Shermana „Všetko išlo rýchlo a cvaklo …“bolo len jedno alebo dve storočia. Prečítajte si viac o ranom výpočte tu.

Krok 1: Zoznam dielov

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

Zoznam dielov je krátky. Vyžadujú sa iba tieto dve položky, pričom obe je možné stiahnuť zadarmo:

  1. "Logisim-win-2.7.1.exe"-Logisim je populárny a ľahko použiteľný logický simulátor. Stiahnite si odtiaľto spustiteľný súbor Logisim a potom vytvorte skratku na vhodnom mieste, ako je pracovná plocha. Dvojitým kliknutím na ikonu Logisim ju spustíte. Poznámka: Logisim používa Java Runtime Package, ktorý sa nachádza tu. Môžete byť požiadaní o jeho stiahnutie.
  2. BYOC-I-Full.cir "-nižšie si stiahnite súbor obvodu Logisim.

Spustite Logisim, kliknite na „Otvoriť súbor“a načítajte súbor BYOC-I-Full.cir. Obrázok vyššie zobrazuje pracovné prostredie Logisim. BYOC-I je reprezentovaný subobvodovým blokom. Externe sú prepojené dva vstupy, Reset a Run a hexadecimálne displeje pre registre BYOC-I a programovú pamäť.

Programová pamäť BYOC-I je predinštalovaná jednoduchým programom, ktorý v registri A počíta od 1 do 5. Ak chcete spustiť (Spustiť) program, postupujte nasledovne.

Krok 1 - Kliknite na nástroj Poke. Kurzor by sa mal zmeniť na tykajúci „prst“. Krok 2 - Dvakrát poklepte na vstup Reset, raz ho zmeníte na „1“a znova ho zmeníte späť na „0“. Týmto sa BYOC -I vynuluje, aby sa program spustil na adrese 0. Krok 3 - Raz poke vstupom Spustiť ho zmeníte na „1“. Register A by mal ukazovať zmenu počtu z 1 na 5 a opakovanie. Krok 4 - Ak sa program nespustí, stlačte kláves Control -K a malo by sa začať.

Ak chcete preskúmať schopnosti spoločnosti Logisim, kliknite na paneli s ponukami na odkaz Pomocník. Odtiaľ môžete preskúmať „Výučbu“Logisim, „Používateľskú príručku“a „Referenciu knižnice“. Vynikajúci úvod do videa nájdete tu.

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

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

Počítač BYOC-I vykonáva úlohy na základe programov napísaných v strojovom jazyku. Programy BYOC-I sú zasa zložené z inštrukcií vykonaných v dobre definovanej sekvencii. Každá inštrukcia je vyrobená z kódov s pevnou dĺžkou, ktoré predstavujú rôzne prevádzkové komponenty BYOC-I. Nakoniec tieto kódy pozostávajú z reťazcov 1 s a 0 s, ktoré predstavujú strojový jazyk, ktorý BYOC-I skutočne vykonáva.

Pre vysvetlenie začneme s kódmi a dostaneme sa až na úroveň programu. Potom nakódujeme jednoduchý program, načítame ho do pamäte BYOC-I a spustíme.

Kódy pozostávajú z pevného počtu binárnych (1 a 0) číslic alebo bitov, skrátene. Nasledujúca tabuľka napríklad zobrazuje všetky možné kódy (celkom 16) pre kód so šírkou 4 bity. Po boku je kód hexadecimálny (základ 16) a desatinný ekvivalent. Hexadecimálna hodnota sa používa pri odkazovaní na binárne hodnoty, pretože je kompaktnejšia ako binárne a je jednoduchšie ju prevádzať z binárnych na desatinné čísla. Predpona „0x“vám dáva vedieť, že nasledujúce číslo je hexadecimálne alebo skrátene „hex“.

Binárne - Šestnástkové - Desatinné číslo 0000 0x0000 00001 0x0001 10010 0x0002 20011 0x0003 30100 0x0004 40101 0x0005 50111 0x0007 71000 0x0008 81001 0x0009 91010 0x000A 101011 0x000B 111100 0x000C 121101 0x000D

Šírka kódu určuje, koľko položiek je možné reprezentovať. Ako bolo uvedené, vyššie uvedený 4-bitový široký kód môže predstavovať až 16 položiek (0 až 15); to znamená, že 2 krát 2 brané štyrikrát alebo 2 až 4. mocnina sa rovná 16. Vo všeobecnosti sa počet reprezentovateľných položiek 2 zvýši na n -tú mocninu. Tu je krátky zoznam kapacít n-bitového kódu.

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

Šírky počítačového kódu BYOC-I sú zvolené tak, aby zodpovedali počtu položiek, ktoré majú byť reprezentované kódom. Existujú napríklad štyri typy inštrukcií, takže je vhodný 2-bitový široký kód. Tu sú kódy BYOC-I so stručným vysvetlením každého z nich.

Kód typu inštrukcie (tt) Existujú štyri typy inštrukcií: (1) MVI - presuňte okamžitú 8 -bitovú konštantu do pamäťového registra. Register pamäte je zariadenie, ktoré uchováva údaje, ktoré sa majú použiť na výpočet, (2) MOV - presun údajov z jedného registra do druhého, (3) RRC - vykonanie výpočtu registra do registra a (4) JMP - skok na iný pokyn namiesto pokračovania v nasledujúcom pokyne. Prijaté kódy typu pokynov pre BYOC-I sú tieto:

00 MVI01 MOV10 RRC11 ŽMP

Registračný kód (dd a ss) BYOC-I má štyri 8-bitové registre schopné uložiť hodnoty od 0 do 255. Na označenie štyroch registrov stačí 2-bitový kód:

00 F register01 E register10 D register11 A register

Výpočtový kód (ccc) BYOC-I podporuje štyri aritmetické/logické operácie. Aby bolo možné budúce rozšírenie na osem výpočtov, používa sa 3-bitový kód:

000 ADD, pridajte dve 8-bitové hodnoty do určených registrov a výsledok uložte do jedného z registrov 001 SUB, odpočítajte dve 8-bitové hodnoty do určených registrov a výsledok uložte do jedného z registrov 010-011 Rezervované na budúce použitie100 A, logicky A dve 8-bitové hodnoty do určených registrov a výsledok uložte do jedného z registrov101 ALEBO, logicky ALEBO dve 8-bitové hodnoty do určených registrov a výsledok uložte do jedného z registrov110 až 111, vyhradené pre budúce použitie

Skokový kód (j) 1-bitový kód, ktorý indikuje, či je skok bezpodmienečný (j = 1) alebo podmienený nenulovým výsledkom výpočtu (j = 0).

Dátový/adresný kód (v… v)/(a… a) 8-bitové údaje môžu byť zahrnuté do určitých inštrukcií predstavujúcich hodnoty od 00000000 do 11111111 alebo od 0 do 255 desatinných miest. Tieto údaje sú široké 8 bitov na ukladanie do 8-bitových registrov BYOC-I. Pri desatinnej aritmetike nezobrazujeme úvodné nuly. Pri počítačovej aritmetike zobrazujeme úvodné nuly, ale neovplyvňujú hodnotu. 00000101 je číselne rovnaký 101 alebo 5 desatinných miest.

Navrhované referencie

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

Ďalšie čítanie

Myšlienka použitia kódov na riadenie procesu siaha do dávnej minulosti. Jedným fascinujúcim príkladom je Jacquard Loom. Automatizovaný stav bol riadený reťazou drevených kariet, do ktorých boli vyvŕtané otvory predstavujúce kódy pre rôznofarebné priadze na tkanie. Svoj prvý som videl v Škótsku, kde sa z neho vyrábali farebné tartany. Prečítajte si viac o žakárových stavoch tu.

Krok 3: Anatómia inštrukcií BYOC-I

Anatómia inštrukcií BYOC-I
Anatómia inštrukcií BYOC-I

Vzhľadom na kódy BYOC-I sa posúvame na ďalšiu úroveň, pokyny. Na vytvorenie inštrukcie pre BYOC-I umiestnime kódy dohromady v uvedenom poradí a na konkrétne miesta v rámci inštrukcie. Nie všetky kódy sú uvedené vo všetkých pokynoch, ale keď sa objavia, zaberajú konkrétne miesto.

Typ inštrukcie MVI vyžaduje najviac bitov, celkovo 12. Vytvorením 12 -bitového inštrukčného slova vyhovieme všetkým pokynom. Nepoužité (takzvané „nezaujíma“) bity majú hodnotu 0. Tu je inštrukčná sada BYOC-I.

  1. Move Immediate (MVI) - 00 dd vvvvvvvvv Funkcia: Presun 8 -bitovej hodnoty údajov V = vvvvvvvv do cieľového registra dd. Po spustení bude mať register dd hodnotu vvvvvvvv. Skratka: MVI R, V kde R je A, D, E alebo F. Príklad: 00 10 00000101 - MVI D, 5 - Presuňte hodnotu 5 do registra D.
  2. Presunúť register do registra (MOV) - 01 dd ss 000000Funkcia: Presun údajov zo zdrojového registra ss do cieľového registra dd. Po spustení majú oba registre rovnakú hodnotu ako zdrojový register. Skratka: MOV Rd, Rs kde Rd je cieľový register A, D, E alebo F a Rs je zdrojový register A, D, E alebo F. Príklad: 01 11 01 000000 - MOV A, E - Presuňte hodnotu v registri E do registra A.
  3. Register to Register Calculation (RRC) - 10 dd ss ccc 000 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); ALEBO Rd, Rs (ccc = 101 Rd ALEBO Rs uložené v Rd). Príklad: 10 00 11 001 000 - SUB F, A - odpočítajte hodnotu v registri A od registra F s výsledkom v registri F.
  4. Skočiť na iný pokyn (JMP) - 11 j 0 aaaaaaaa Funkcia: Zmeniť vykonanie na inú inštrukciu umiestnenú na adrese aaaa aaaa (a) Bezpodmienečne (j = 1) -11 1 0 aaaaaaaa Skratka: JMP L, kde L je adresa aaaa aaaa Príklad: 11 1 0 00001000 - ŽMP 8 - Zmena vykonania na adresu 8. b) Podmienene (j = 0), keď predchádzajúci výpočet viedol k nenulovému výsledku - 11 0 0 aaaaaaaa Skratka: JNZ L, kde L je adresa aaaa aaaa. Príklad: 11 0 0 00000100 JNZ 4 Ak posledný výpočet priniesol nenulovú hodnotu, zmeňte vykonanie na adresu 4.

Bity inštrukčného slova sú očíslované zľava (najvýznamnejší bit MSB) doprava (najmenej významný bit LSB) od 11 do 0. Pevné poradie a umiestnenie kódov sú nasledujúce:

Bits-Code11-10 Instruction Type9-8 Destination Register7-6 Source Register5-3 Calculation: 000-add; 001 - odpočítať; 100 - logické AND; 101 - logický OR7-0 Konštantná hodnota v… v a a… a (0 až 255)

Súbor inštrukcií je zhrnutý na obrázku vyššie. Všimnite si štruktúrovaného a usporiadaného vzhľadu kódov v každej inštrukcii. Výsledkom je jednoduchší dizajn pre BYOC-I a uľahčuje pochopenie pokynov pre človeka.

Krok 4: Kódovanie počítačového pokynu

Kódovanie počítačového pokynu
Kódovanie počítačového pokynu

Predtým, ako sa presunieme na úroveň programu, zostavme niekoľko príkladov pokynov pomocou vyššie uvedenej inštrukčnej sady BYOC-I.

1. Presuňte hodnotu 1 do registra A. Registre BYOC-I môžu ukladať hodnoty od 0 do 255. V tomto prípade bude mať register A po vykonaní inštrukcie hodnotu 1 (00000001 binárne).

Skratka: MVI A, 1 Požadované kódy: Typ MVI - 00; Register destinácií A - 11; Hodnota - 00000001 Pokyny: 00 11 00000001

2. Presuňte obsah registra A do registra D. Po spustení budú mať oba registre hodnotu pôvodne v registri A.

Skratka: MOV D, A (Nezabudnite, že cieľ je v zozname prvý a zdroj druhý) Požadované kódy: Typ MOV - 01; Register destinácií D - 10; Zdroj Register A - 11 Pokyny: 01 10 11 000000

3. Pridajte obsah registra D do registra A a uložte do registra A. Po spustení bude hodnota registra A súčtom pôvodnej hodnoty registra A a registra D.

Skratka: ADD A, D (Výsledok je uložený v cieľovom registri) Požadované kódy: Typ RRC - 10; Register destinácií A - 11; Zdroj Register D - 10; Výpočet - 000 - Pokyny: 10 11 10 000 000 (ccc je prvých 000 - pridajte)

4. Skočte na nulu na adresu 3. Ak výsledok posledného výpočtu nebol nula, vykonanie sa zmení na inštrukciu na danej adrese. Ak je nula, spustenie pokračuje podľa nasledujúcich pokynov.

Skratka: JNZ 3 Požadované kódy: typ JMP - 11; Typ skoku - 0; Adresa - 00000003 Pokyny: 11 0 0 00000003 (typ skoku je prvý 0)

5. Skočte bezpodmienečne na adresu 0. Po vykonaní sa vykonanie zmení na pokyn na danej adrese.

Skratka: JMP 0 Požadovaný kód: Typ JMP - 11; Typ skoku - 1; Adresa - 00000000Inštrukčné slovo; 11 1 0 00000000

Aj keď je strojové kódovanie trochu únavné, vidíte, že to nie je nemožné. Ak by ste strojovo kódovali skutočne, na preklad zo skratky (ktorá sa nazýva kód zostavy) na strojový kód by ste použili počítačový program, ktorý sa nazýva assembler.

Krok 5: Anatómia počítačového programu

Anatómia počítačového programu
Anatómia počítačového programu

Počítačový program je zoznam pokynov, ktoré počítač vykoná, od začiatku zoznamu až po zoznam až do konca. Pokyny ako JNZ a JMP môžu zmeniť, ktoré inštrukcie sa vykonajú ďalej. Každá inštrukcia v zozname zaberá jednu adresu v pamäti počítača počnúc od 0. Do pamäte BYOC-I sa zmestí zoznam 256 inštrukcií, čo je pre naše účely viac než dosť.

Počítačové programy sú navrhnuté tak, aby vykonávali danú úlohu. Pre náš program zvolíme jednoduchú úlohu s počítaním od 1 do 5. Očividne neexistuje žiadna inštrukcia „počítať“, takže prvým krokom je rozdelenie úlohy na kroky, ktoré môže BYOC-I zvládnuť veľmi jednoducho. obmedzená sada inštrukcií.

Krok 1 Presuňte 1 na registráciu AStep 2 Presuňte register A na registráciu DStep 3 Pridajte register D na registráciu A a uložte výsledok do registra AStep 4 Presuňte 5 na registráciu EStep 5 Odpočítajte register A od registra E a uložte výsledok do registra EStep 6 Ak výsledok odčítania nebol nula, vráťte sa na krok 4 a pokračujte v počítaní Krok 7 Ak bol výsledok odčítania nulový, vráťte sa a začnite znova

Ďalším krokom je preložiť tieto kroky do pokynov BYOC-I. Programy BYOC-I začínajú na adrese 0 a čísle postupne. Cieľové adresy skokov sa pridávajú ako posledné po zadaní všetkých pokynov.

Adresa: Pokyn - Skratka; Popis0: 00 11 00000001 - MVI A, 1; Presunutie 1 do registra A1: 01 10 11 000000 - MOV D, A; Presunutie registra A do registra D2: 10 11 10 000 000 - PRIDAŤ A, D; Pridajte register D do registra A a uložte výsledok do registra A3: 00 01 00 00000101 - MVI E, 5; Presuňte 5 register E4: 10 01 11 001 000 - SUB E, A; Odpočítajte register A od registra E a uložte výsledok v registri E5: 11 0 0 00000010 - JNZ 2; Ak výsledok odčítania nebol nula, vráťte sa na adresu 3 a pokračujte v počítaní 6: 11 1 0 00000000 - JMP 0; Ak bol výsledok odčítania nula, vráťte sa a začnite odznova

Pred prenosom programu do pamäte musí byť binárny inštrukčný kód zmenený na hexadecimálne, aby sa mohol používať s Hex Editorom Logisim. Najprv rozdeľte inštrukcie do troch skupín po 4 bitoch. Potom preložte skupiny do šestnástky pomocou tabuľky v kroku 2. Použijú sa iba posledné tri hexadecimálne číslice (nižšie hrubým písmom).

Adresa - binárne inštrukcie - inštrukcie (šesťhranné) 111000000010 1110 0000 0000 - 0x0E00

Je čas preniesť program na testovanie do pamäte BYOC-I.

Krok 6: Prenos programu do pamäte a testovanie

Prenos programu do pamäte a testovanie
Prenos programu do pamäte a testovanie
Prenos programu do pamäte a testovanie
Prenos programu do pamäte a testovanie

Keď sa pozrieme na „hlavný“obvod Logisim, zobrazený blok BYOC-I je symbolom skutočného počítačového obvodu označeného „BYOC-I“na table prieskumníka. Ak chcete zadať program do pamäte BYOC-I:

  1. Pravým tlačidlom myši kliknite na blok BYOC-I (nazýva sa „subobvod“) a zvoľte (umiestnite kurzor myši a kliknite naň ľavým tlačidlom myši) „Zobraziť BYOC-I“.
  2. Okruh BYOC-I sa objaví v pracovnej oblasti. Pravým tlačidlom myši kliknite na symbol „Programová pamäť“a zvoľte „Upraviť obsah..“.
  3. Pomocou hexadecimálneho editora Logisim zadajte hexadecimálny kód (iba tučné písmo), ako je uvedené vyššie.

Teraz ste pripravení spustiť program. Vráťte sa do hlavného okruhu dvojitým kliknutím na „BYOC-I“na table prieskumníka. Vstupy Run a Reset by mali byť spustené „0“. Pomocou nástroja Poke najskôr zmeňte Reset na „1“a potom späť na „0“. Vďaka tomu bude počiatočná adresa 0x0000 a pripraví obvod BYOC-I na vykonanie. Teraz prepnite vstup Spustiť na „1“a program sa spustí. (Poznámka: Na spustenie hodín Logisim musíte hlavne raz kliknúť na Control-K. Je to funkcia, ktorá vám umožňuje zastaviť hodiny Logisim a prechádzať programom opakovaným klepnutím na Control-T. Skúste to niekedy!)

Hodiny Logisim sú nastaviteľné pre široký rozsah frekvencií. V stiahnutom stave je to 8 Hz (8 cyklov za sekundu). Ako je počítač BYOC-I navrhnutý, každá inštrukcia trvá štyri hodiny. Ak chcete vypočítať rýchlosť BYOC-I, vydelte taktovaciu frekvenciu číslom 4. Pri 8 Hz je jeho rýchlosť 2 inštrukcie za sekundu. Hodiny môžete zmeniť kliknutím na „Simulovať“na paneli s nástrojmi a výberom „Frekvencia zaškrtnutia“. Možný rozsah je 0,25 Hz až 4100 Hz. Bola zvolená pomalá rýchlosť pri 8 Hz, aby ste mohli sledovať počet v registri A.

Maximálna rýchlosť simulácie BYOC-I (~ 1 000 pokynov za sekundu) je v porovnaní s modernými počítačmi veľmi nízka. Hardvérová verzia počítača BYOC opísaná v mojej knihe vykonáva viac ako 12 miliónov pokynov za sekundu!

Dúfam, že tento Instructable demystifikoval programovanie strojového jazyka a poskytol vám prehľad o tom, ako počítače fungujú na ich najzákladnejšej úrovni. Aby ste porozumeli, skúste kódovať dva nižšie uvedené programy.

  1. Napíšte program, ktorý začína na 5 a odpočítava sa do 0. (ANS. Count5to0.txt nižšie)
  2. Počnúc 2, počítajte do 3, kým číslo neprekročí 7. Dalo by sa urobiť malú mentálnu aritmetiku, skontrolujte 8, aby ste vedeli, že tam pristane, a potom reštartujte. Napíšte svoj program všeobecnejším spôsobom, ktorý skutočne testuje, či počet „presahuje“konkrétne číslo. Tip: Zistite, čo sa stane, keď odčítaním získate zápornú hodnotu, povedzme napríklad 8 - 9 = -1. Potom experimentujte s logickým AND a vyskúšajte, či je MSB v 8-bitovom čísle „1“. (ANS. ExceedsCount.txt)

Napadajú vás ďalšie náročné problémy pre počítač BYOC-I? Čo viac môže vzhľadom na svoje obmedzenia urobiť? Podeľte sa so mnou o svoje skúsenosti na adrese [email protected]. Ak vás zaujíma kódovanie mikroprocesorov, navštívte moju webovú stránku www.whippleway.com. Tam prenášam strojové kódovanie do moderných procesorov, ako je séria ATMEL Mega používaná v Arduinose.

Odporúča: