Kazalo:

Kodirajte in preizkusite računalnik v strojnem jeziku: 6 korakov
Kodirajte in preizkusite računalnik v strojnem jeziku: 6 korakov

Video: Kodirajte in preizkusite računalnik v strojnem jeziku: 6 korakov

Video: Kodirajte in preizkusite računalnik v strojnem jeziku: 6 korakov
Video: Casio G-Shock GMW-B5000D-1E - честный обзор и отзыв, плюсы и недостатки. Стальные Касио Джишок 5000. 2024, November
Anonim
Image
Image

V tem navodilu vam bom pokazal, kako kodirati in preizkusiti računalniški program v strojnem jeziku. Strojni jezik je materni jezik računalnikov. Ker je sestavljen iz nizov 1s in 0s, ga ljudje ne razumejo zlahka. Da bi se tega izognili, najprej kodiramo programe v jeziku na visoki ravni, kot sta C ++ ali Java, nato pa jih s pomočjo posebnih računalniških programov prevedemo v računalnike 1s in 0s, ki jih računalniki razumejo. Učenje kodiranja v jeziku na visoki ravni je vsekakor nemogoče, vendar kratek uvod v strojni jezik lahko ponudi dragocen vpogled v delovanje računalnikov in poveča spoštovanje te zelo pomembne tehnologije.

Za kodiranje in preizkušanje programa strojnega jezika potrebujemo dostop do brezhibnega računalnika, katerega strojni jezik je lahko razumljiv. Osebni računalniki so preveč zapleteni, da bi jih sploh upoštevali. Rešitev je uporaba Logisima, logičnega simulatorja, ki deluje na osebnem računalniku. Z Logisimom lahko simuliramo računalnik, ki ustreza našim potrebam. Zgornji videoposnetek vam daje predstavo o tem, kaj lahko dosežemo z Logisimom.

Za računalniško zasnovo sem eno prilagodil iz svoje e -knjige Kindle Build Your Own Computer - From Scratch. Začel sem z računalnikom BYOC, ki je opisan tam, in ga skrajšal na različne osnovne BYOC-I (I za Instructable), ki jih bomo uporabljali v tem Instructable.

Strojni jezik BYOC-I je preprost in razumljiv. Ne potrebujete posebnega znanja o računalnikih ali programiranju. Vse, kar potrebujete, je radovednost in želja po učenju

Nadaljnje branje

Morda se sprašujete, zakaj uporabljamo "stroj" za opis računalnika, če to ni mehanska naprava. Razlog je zgodovinski; prve računalniške naprave so bile mehanske, sestavljene iz zobnikov in koles. Besedilo Allana Shermana, "Bilo je vse orodje, ki je klikalo …" je nastalo šele stoletje ali dve. Več o zgodnjem računalništvu preberite tukaj.

Korak: Seznam delov

Hierarhija strojnih jezikov in kode
Hierarhija strojnih jezikov in kode

Seznam delov je kratek. Potrebna sta le ta dva elementa, oba za prenos brezplačno:

  1. "Logisim-win-2.7.1.exe"-Logisim je priljubljen in enostaven za uporabo logični simulator. Od tu prenesite izvršljivo datoteko Logisim in ustvarite bližnjico na priročnem mestu, kot je namizje. Dvokliknite ikono Logisim, da jo zaženete. Opomba: Logisim uporablja paket Runtime Java, ki se nahaja tukaj. Morda boste morali prenesti.
  2. BYOC-I-Full.cir "-Prenesite datoteko vezja Logisim spodaj.

Zaženite Logisim, kliknite "File-Open" in naložite datoteko BYOC-I-Full.cir. Zgornja slika prikazuje delovno okolje Logisim. BYOC-I je predstavljen z vezjem. Zunaj sta povezana dva vhoda, ponastavitev in zagon ter šestnajstiški prikaz za registre BYOC-I in programski pomnilnik.

Programski pomnilnik BYOC-I je vnaprej naložen s preprostim programom, ki v registru A šteje od 1 do 5. Če želite izvesti (zagnati) program, sledite tem korakom.

1. korak - Kliknite Poke Tool. Kazalec se mora spremeniti v "prst". 2. korak - Vhod za ponastavitev dvakrat potisnite, enkrat ga spremenite v "1" in znova, da ga spremenite nazaj v "0". S tem ponastavite BYOC -I za zagon programa na naslovu 0. Korak 3 - Enkrat potisnite vnos Run, da ga spremenite v "1". Register A naj prikaže število, ki se spreminja od 1 do 5. Nato se ponovi. 4. korak - Če se program ne izvede, pritisnite control -K in začel se bo.

Če želite raziskati zmogljivosti Logisima, kliknite povezavo Pomoč v menijski vrstici. Od tam lahko raziščete Logisimove "Vadnice", "Uporabniški priročnik" in "Knjižnična referenca". Odličen video uvod najdete tukaj.

2. korak: Hierarhija strojnega jezika in kode

Hierarhija strojnih jezikov in kode
Hierarhija strojnih jezikov in kode

Računalnik BYOC-I opravlja naloge, ki temeljijo na programih, napisanih v strojnem jeziku. Programi BYOC-I so sestavljeni iz navodil, ki se izvajajo v natančno določenem zaporedju. Vsako navodilo je sestavljeno iz kod s fiksno dolžino, ki predstavljajo različne delovne komponente BYOC-I. Končno so te kode sestavljene iz nizov 1s in 0s, ki sestavljajo strojni jezik, ki ga BYOC-I dejansko izvaja.

Kot pojasnilo bomo začeli s kodami in napredovali do programske ravni. Nato bomo kodirali preprost program, ga naložili v pomnilnik BYOC-I in ga izvedli.

Kode so sestavljene iz fiksnega števila binarnih (1 in 0) števk ali bitov, na kratko. Spodnja tabela na primer prikazuje vse možne kode (skupaj 16) za kodo širine 4 bitov. Koda, prikazana ob strani, je šestnajstiška (osnova 16) in decimalna enakovredna. Šestnajstiško se uporablja pri sklicevanju na binarne vrednosti, saj je bolj kompaktno kot binarno in ga je lažje pretvoriti iz binarnega kot decimalnega. Predpona "0x" vam pove, da je naslednja številka šestnajstiška ali na kratko "šestnajstiška".

Binarno - šestnajstiško - decimalno0000 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

Širina kode določa, koliko elementov je mogoče predstaviti. Kot je navedeno, zgornja 4-bitna široka koda lahko predstavlja do 16 postavk (0 do 15); to pomeni, da je 2 krat 2 vzeta štirikrat ali 2 do 4 moč enaka 16. Na splošno je število predstavljivih elementov 2 dvignjeno na n -to stopnjo. Tu je kratek seznam zmogljivosti n-bitne kode.

n - Število postavk 1 22 43 84 165 326 647 1288 256

Širine računalniške kode BYOC-I so izbrane tako, da ustrezajo številu elementov, ki jih predstavlja koda. Na primer, obstajajo štiri vrste navodil, zato je primerna 2-bitna široka koda. Tu so kode BYOC-I s kratko razlago vsake od njih.

Koda vrste ukaza (tt) Obstajajo štiri vrste navodil: (1) MVI - premaknite takojšnjo 8 -bitno konstantno vrednost v pomnilniški register. Pomnilniški register je naprava, ki vsebuje podatke, ki jih je treba uporabiti za izračun, (2) MOV - premik podatkov iz enega registra v drugega, (3) RRC - izvedba izračuna iz registra v register in (4) JMP - skok namesto da bi nadaljevali z naslednjim navodilom. Sprejete kode vrst navodil BYOC-I so naslednje:

00 MVI01 MOV10 RRC11 JMP

Registrska koda (dd in ss) BYOC-I ima štiri 8-bitne registre, ki lahko shranijo vrednosti od 0 do 255. 2-bitna koda zadošča za označevanje štirih registrov:

00 F register01 E register10 D register11 A register

Izračunska koda (ccc) BYOC-I podpira štiri aritmetične/logične operacije. Za prihodnjo razširitev na osem izračunov se uporablja 3-bitna koda:

000 ADD, dodajte dve 8-bitni vrednosti v označene registre in rezultat shranite v enega od registrov 001 SUB, odštejte dve 8-bitni vrednosti v označene registre in rezultat shranite v enega od registrov 010-011 Rezervirano za prihodnjo uporabo100 AND, logično IN dve 8-bitni vrednosti v označenih registrih in rezultat shranite v enega od registrov101 ALI, logično ALI dve 8-bitni vrednosti v označene registre in rezultat shranite v enega od registrov 110 do 111, rezervirano za prihodnjo uporabo

Koda skoka (j) 1-bitna koda, ki označuje, ali je skok brezpogojen (j = 1) ali pogojen z rezultatom izračuna, ki ni nič (j = 0).

Koda podatkov/naslova (v… v)/(a… a) 8-bitni podatki so lahko vključeni v nekatera navodila, ki predstavljajo vrednosti od 00000000 do 11111111 ali 0 do 255 decimalnih mest. Ti podatki so široki 8 bitov za shranjevanje v 8-bitnih registrih BYOC-I. Z decimalno aritmetiko ne prikazujemo vodilnih ničel. Z računalniško aritmetiko prikažemo začetne ničle, ki pa ne vplivajo na vrednost. 00000101 je številčno enak 101 ali 5 decimalk.

Predlagane reference

Binarni zapis - https://learn.sparkfun.com/tutorials/binaryHeksadecimalni zapis -

Nadaljnje branje

Zamisel o uporabi kod za vodenje procesa sega daleč nazaj. En fascinanten primer je Jacquard Loom. Avtomatiziran statve je nadzoroval veriga lesenih kart, v katerih so bile izvrtane luknje, ki predstavljajo kode za različno barvno prejo za tkanje. Svojega prvega sem videl na Škotskem, kjer so ga uporabljali za izdelavo pisanih tartanov. Več o Jacquardovih statvah preberite tukaj.

3. korak: Anatomija navodil BYOC-I

Anatomija navodil BYOC-I
Anatomija navodil BYOC-I

Glede na kode BYOC-I se premaknemo na naslednjo stopnjo, navodila. Če želite ustvariti navodilo za BYOC-I, postavimo kode skupaj v določenem vrstnem redu in na določena mesta v navodilu. Vse kode niso prikazane v vseh navodilih, ko pa se pojavijo, zavzamejo določeno mesto.

Vrsta ukaza MVI zahteva največ bitov, skupaj 12. Z besedno zvezo dolžine 12 bitov prilagodimo vsa navodila. Neuporabljeni (tako imenovani "vseeno") biti dobijo vrednost 0. Tu je nabor navodil BYOC-I.

  1. Premakni takojšnje (MVI) - 00 dd vvvvvvvv Funkcija: premaknite 8 -bitno podatkovno vrednost V = vvvvvvvv v ciljni register dd. Po izvedbi bo imel register dd vrednost vvvvvvvv. Kratica: MVI R, V, kjer je R A, D, E ali F. Primer: 00 10 00000101 - MVI D, 5 - Premaknite vrednost 5 v register D.
  2. Premakni register v register (MOV) - 01 dd ss 000000Funkcija: Premakni podatke iz izvornega registra ss v dezinfekcijski register dd. Po izvedbi imata oba registra isto vrednost kot izvorni register. Kratica: MOV Rd, Rs, kjer je Rd ciljni register A, D, E ali F in Rs izvorni register A, D, E ali F. Primer: 01 11 01 000000 - MOV A, E - premaknite vrednost v registru E v register A.
  3. Register to Register Calculation (RRC) - 10 dd ss ccc 000 Funkcija: Izvedite določeni izračun ccc z uporabo izvornega registra ss in ciljnega registra dd, nato pa rezultat shranite v ciljni register. Rd); SUB Rd, Rs (ccc = 001 Rd - Rs shranjeno v Rd); AND Rd, Rs (ccc = 100 Rd IN Rs shranjeni v Rd); ALI Rd, Rs (ccc = 101 Rd ALI R, shranjeni v Rd). Primer: 10 00 11 001 000 - SUB F, A - Vrednost v registru A odštejte iz registra F z rezultatom v registru F.
  4. Skoči na druga navodila (JMP) - 11 j 0 aaaaaaaa Funkcija: spremenite izvedbo v drugo navodilo, ki se nahaja na naslovu aaaa aaaa (a) Brezpogojno (j = 1) -11 1 0 aaaaaaaa Kratica: JMP L kjer je L naslov aaaa aaaa Primer: 11 1 0 00001000 - JMP 8 - Spremeni izvedbo na naslov 8. (b) Pogojno (j = 0), ko je prejšnji izračun povzročil rezultat, ki ni nič - 11 0 0 aaaaaaaa Kratica: JNZ L, kjer je L naslov aaaa aaaa. Primer: 11 0 0 00000100 JNZ 4 Če je zadnji izračun dal vrednost, ki ni nič, spremenite izvedbo na naslov 4.

Biti besednih navodil so oštevilčeni levo (najpomembnejši bit MSB) v desno (najmanj pomemben bit LSB) od 11 do 0. Fiksni vrstni red in lokacije kod so naslednji:

Bitovi-Koda11-10 Vrsta ukaza9-8 Ciljni register7-6 Register virov5-3 Izračun: 000-dodaj; 001 - odštej; 100 - logično AND; 101 - logično OR7-0 Konstantna vrednost v… v in a… a (0 do 255)

Navodila so povzeta na zgornji sliki. Upoštevajte strukturiran in urejen videz kod v vsakem navodilu. Rezultat je preprostejša zasnova za BYOC-I in olajša razumevanje navodil.

4. korak: Kodiranje računalniških navodil

Kodiranje računalniških navodil
Kodiranje računalniških navodil

Preden se premaknemo na programsko raven, sestavimo nekaj zglednih navodil z uporabo zgornjega nabora navodil BYOC-I.

1. Premaknite vrednost 1 v register A. Registri BYOC-I lahko shranijo vrednosti od 0 do 255. V tem primeru bo imel register A vrednost 1 (00000001 binarno) po izvedbi ukaza.

Kratica: MVI A, 1 Potrebne kode: Tip MVI - 00; Ciljni register A - 11; Vrednost - 00000001 Navodila za uporabo: 00 11 00000001

2. Premaknite vsebino registra A v register D. Po izvedbi bosta oba registra imela prvotno vrednost v registru A.

Kratica: MOV D, A (Ne pozabite, cilj je prvi in vir drugi na seznamu) Zahtevane kode: Tip MOV - 01; Ciljni register D - 10; Vir vira A - 11 Navodila za uporabo: 01 10 11 000000

3. Dodajte vsebino registra D v register A in ga shranite v register A. Po izvedbi bo vrednost registra A vsota prvotne vrednosti registra A in registra D.

Kratica: ADD A, D (rezultat je shranjen v registru namembnosti) Potrebne kode: Tip RRC - 10; Ciljni register A - 11; Vir registra D - 10; Izračun Dodaj - 000 Navodilo: 10 11 10 000 000 (ccc je prvi 000 - dodaj)

4. Skočite ne na nič na naslov 3. Če rezultat zadnjega izračuna ni bil nič, se bo izvedba spremenila v navodilo na danem naslovu. Če je nič, se izvajanje nadaljuje po naslednjem navodilu.

Kratica: JNZ 3 Zahtevane kode: Tip JMP - 11; Vrsta skoka - 0; Naslov - 00000003 Besedna beseda: 11 0 0 00000003 (Vrsta skoka je prva 0)

5. Brezpogojno skočite na naslov 0. Po izvedbi se izvedba spremeni v navodilo na danem naslovu.

Kratica: JMP 0 Zahtevana koda: Tip JMP - 11; Vrsta skoka - 1; Naslov - 00000000 Navodila Word; 11 1 0 00000000

Čeprav je strojno kodiranje nekoliko dolgočasno, lahko vidite, da to ni nemogoče težko. Če bi resnično kodirali strojno, bi uporabili računalniški program, imenovan asembler, za prevod iz okrajšave (ki se imenuje montažna koda) v strojno kodo.

5. korak: Anatomija računalniškega programa

Anatomija računalniškega programa
Anatomija računalniškega programa

Računalniški program je seznam navodil, ki jih računalnik izvaja od začetka na seznamu in se nadaljuje po seznamu do konca. Navodila, kot sta JNZ in JMP, lahko spremenijo, katera navodila bodo izvedena naslednja. Vsako navodilo na seznamu zaseda en naslov v pomnilniku računalnika, ki se začne pri 0. Pomnilnik BYOC-I lahko vsebuje seznam 256 navodil, kar je za naše namene več kot dovolj.

Računalniški programi so zasnovani za opravljanje določene naloge. Za naš program bomo izbrali preprosto nalogo, ki šteje od 1 do 5. Očitno ni navodil za "štetje", zato je prvi korak razdeliti nalogo na korake, ki jih lahko obravnavajo zelo BYOC-I omejen nabor navodil.

Korak 1 Premaknite 1 za registracijo AStep 2 Premaknite register A za registracijo DStep 3 Dodajte register D za registracijo A in shranite rezultat v register AStep 4 Premaknite 5 za registracijo EStep 5 Odštejte register A iz registra E in shranite rezultat v register EStep 6 Če rezultat odštevanja ni bil nič, se vrnite na 4. korak in nadaljujte s štetjem 7. korak Če je bil rezultat odštevanja nič, se vrnite in začnite znova

Naslednji korak je, da te korake prevedete v navodila BYOC-I. Programi BYOC-I se začenjajo pri naslovu 0 in zaporedni številki. Ciljni naslovi za skok se dodajo zadnji, potem ko so na voljo vsa navodila.

Naslov: Navodilo - Kratica; Opis 0: 00 11 00000001 - MVI A, 1; Premaknite 1 za registracijo A1: 01 10 11 000000 - MOV D, A; Premaknite register A za registracijo D2: 10 11 10 000 000 - ADD A, D; Dodajte register D v register A in shranite rezultat v register A3: 00 01 00 00000101 - MVI E, 5; Premaknite 5 register E4: 10 01 11 001 000 - SUB E, A; Odštejte register A iz registra E in shranite rezultat v registru E5: 11 0 0 00000010 - JNZ 2; če rezultat odštevanja ni bil nič, se vrnite na naslov 3 in nadaljujte s štetjem 6: 11 1 0 00000000 - JMP 0; če je bil rezultat odštevanja nič, pojdite nazaj in začnite znova

Pred prenosom programa v pomnilnik je treba kodo binarnih navodil spremeniti v šestnajstiško, da jo lahko uporabite v urejevalniku šesterokotnikov Logisim. Najprej razdelite navodilo v tri skupine po 4 bite. Nato s pomočjo tabele v 2. koraku prevedite skupine v šestnajstiško število. Uporabljajo se le zadnje tri šestnajstiške števke (krepko spodaj).

Naslov - Navodila Binarni - Navodila Binarni Split - navodilo (Hex) 0 001100000001 0011 0000 0001 - 0x03011 011011000000 0110 1100 0000 - 0x06C02 101.110.000.000 1011 1000 0000 - 0x0B803 000100000101 0001 0000 0101 - 0x01054 100.111.001.000 1001 1100 1000 - 0x09C85 110.000.000.100 1100 0000 0010 - 0x0C026 111000000010 1110 0000 0000 - 0x0E00

Čas je, da program prenesemo v pomnilnik BYOC-I za testiranje.

6. korak: prenos programa v pomnilnik in testiranje

Prenos programa v pomnilnik in testiranje
Prenos programa v pomnilnik in testiranje
Prenos programa v pomnilnik in testiranje
Prenos programa v pomnilnik in testiranje

Če pogledamo "glavno" vezje Logisim, je prikazani blok BYOC-I simbol za dejansko računalniško vezje z oznako "BYOC-I" v podoknu Explorerja. Za vnos programa v pomnilnik BYOC-I:

  1. Z desno miškino tipko kliknite blok BYOC-I (imenovan "podvezje") in izberite (premaknite miškin kazalec in levi klik) "Ogled BYOC-I".
  2. Na delovnem območju se bo pojavilo vezje BYOC-I. Z desno miškino tipko kliknite simbol "Programski pomnilnik" in izberite "Uredi vsebino..".
  3. S šestnajstiškim urejevalnikom Logisim vnesite šestnajstiško kodo (samo krepko), kot je prikazano zgoraj.

Zdaj ste pripravljeni na izvajanje programa. Vrnite se v glavno vezje tako, da dvokliknete »BYOC-I« v podoknu Explorerja. Za zagon morata biti vhoda Run in Reset "0". Z orodjem Poke najprej spremenite Reset na "1", nato pa nazaj na "0". To naredi začetni naslov 0x0000 in pripravi vezje BYOC-I za izvedbo. Zdaj potisnite vnos Run na "1" in program se bo izvajal. (Opomba: Če želite zagnati uro Logisim, morate le enkrat pritisniti Control-K. To je funkcija, ki vam omogoča, da ustavite uro Logisim in stopite skozi program tako, da se večkrat dotaknete Control-T. Poskusite kdaj!)

Ura Logisim je nastavljiva za široko paleto frekvenc. Med prenosom je 8 Hz (8 ciklov na sekundo). Način, kako je zasnovan računalnik BYOC-I, vsako navodilo potrebuje štiri cikle ure. Torej, za izračun hitrosti BYOC-I delite frekvenco ure s 4. Pri 8 Hz je njena hitrost 2 ukaza na sekundo. Uro lahko spremenite tako, da v orodni vrstici kliknete »Simuliraj« in izberete »Pogostnost kljukic«. Možno območje je od 0,25 Hz do 4100 Hz. Izbrana je bila počasna hitrost pri 8 Hz, tako da si lahko ogledate štetje v registru A.

Največja hitrost simulacije BYOC-I (~ 1000 navodil na sekundo) je v primerjavi s sodobnimi računalniki zelo počasna. Različica strojne opreme računalnika BYOC, opisana v moji knjigi, izvaja več kot 12 milijonov navodil na sekundo!

Upam, da je ta Instructable demistificiral programiranje strojnega jezika in vam dal vpogled v delovanje računalnikov na njihovi najosnovnejši ravni. Za boljše razumevanje poskusite kodirati spodnja dva programa.

  1. Napišite program, ki se začne pri 5 in odšteva do 0. (ANS. Count5to0.txt spodaj)
  2. Začenši pri 2, štej za 3, dokler število ne preseže 7. Lahko narediš malo miselne aritmetike, preveri 8, veš, da bo pristalo, nato pa znova zaženi. Napišite svoj program na bolj splošen način, ki resnično preveri, ali število "presega" določeno število. Namig: Raziščite, kaj se zgodi, če odštevanje da negativno vrednost, na primer 8 - 9 = -1. Nato poskusite z logičnim AND in preizkusite, ali je MSB v 8-bitnem številu "1". (ANS. ExceedsCount.txt)

Ali lahko pomislite na druge zahtevne težave za računalnik BYOC-I? Kaj lahko glede na svoje omejitve naredi? Delite svoje izkušnje z mano na [email protected]. Če vas zanima kodiranje mikroprocesorjev, obiščite mojo spletno stran www.whippleway.com. Tam nosim strojno kodiranje do sodobnih procesorjev, kot je serija ATMEL Mega, ki se uporablja v Arduinosu.

Priporočena: