Sadržaj:

Kodirajte i testirajte računalo na strojnom jeziku: 6 koraka
Kodirajte i testirajte računalo na strojnom jeziku: 6 koraka

Video: Kodirajte i testirajte računalo na strojnom jeziku: 6 koraka

Video: Kodirajte i testirajte računalo na strojnom jeziku: 6 koraka
Video: Создание настольных приложений с помощью Python - Урок 5 (Qt Designer - калькулятор) 2024, Studeni
Anonim
Image
Image

U ovom Instructable -u pokazat ću vam kako kodirati i testirati računalni program na strojnom jeziku. Strojni jezik je maternji jezik računala. Budući da se sastoji od nizova 1s i 0s, ljudi ga ne razumiju lako. Da bismo to zaobišli, prvo kodiramo programe na jeziku visoke razine kao što je C ++ ili Java, a zatim ih pomoću posebnih računalnih programa prevedemo u znakove 1 i 0 koji računala razumiju. Učenje kodiranja na jeziku visoke razine zasigurno je jednostavno, ali kratak uvod u strojni jezik može pružiti vrijedan uvid u to kako računala rade i povećati uvažavanje ove vrlo važne tehnologije.

Za kodiranje i testiranje programa strojnog jezika potreban nam je pristup beskompromisnom računalu čiji se strojni jezik lako razumije. Osobna računala su previše složena da bi se o njima uopće moglo razmišljati. Rješenje je korištenje Logisima, logičkog simulatora, koji radi na osobnom računalu. S Logisimom možemo simulirati računalo koje zadovoljava naše potrebe. Gornji video daje vam neku ideju što možemo postići s Logisimom.

Za dizajn računala prilagodio sam jednu iz svoje e -knjige Kindle Build Your Own Computer - From Scratch. Počeo sam s tamo opisanim računalom BYOC i sveo ga na različite osnovne BYOC-I (I za Instructable) koje ćemo koristiti u ovom Instructable.

Strojni jezik BYOC-I je jednostavan i lak za razumijevanje. Ne trebate posebno znanje o računalima ili programiranju. Potreban je samo znatiželjan um i želja za učenjem

Daljnje čitanje

Možda se pitate zašto koristimo "stroj" za opisivanje računala ako to nije mehanički uređaj. Razlog je povijesni; prvi računalni uređaji bili su mehanički koji su se sastojali od zupčanika i kotača. Stihovi Allana Shermana, "Bilo je to sve zupčanik koji je klikao-klackali …", nastali su tek stoljeće ili dva. Više o ranom računanju pročitajte ovdje.

Korak 1: Popis dijelova

Hijerarhija strojnih jezika i kodovi
Hijerarhija strojnih jezika i kodovi

Popis dijelova je kratak. Potrebne su samo ove dvije stavke, obje se mogu besplatno preuzeti:

  1. "Logisim-win-2.7.1.exe"-Logisim je popularan i jednostavan za korištenje logički simulator. Ovdje preuzmite izvršnu datoteku Logisim, a zatim stvorite prečac na prikladnom mjestu poput radne površine. Dvaput kliknite ikonu Logisim da biste je pokrenuli. Napomena: Logisim koristi Java Runtime paket koji se nalazi ovdje. Možda će biti zatraženo da ga preuzmete.
  2. BYOC-I-Full.cir "-preuzmite datoteku sklopa Logisim u nastavku.

Pokrenite Logisim, a zatim kliknite "File-Open" i učitajte datoteku BYOC-I-Full.cir. Gornja slika prikazuje radno okruženje Logisim. BYOC-I je predstavljen blokom podkruga. Vanjski su spojena dva ulaza, Reset i Run, te heksadecimalni prikazi za BYOC-I registre i programsku memoriju.

Programska memorija BYOC-I unaprijed je učitana jednostavnim programom koji broji od 1 do 5 u A registru. Da biste izvršili (pokrenuli) program, slijedite ove korake.

Korak 1 - Kliknite na Poke Tool. Kursor bi se trebao promijeniti u "prst" koji pokazuje. Korak 2 - Dvaput dodirnite Reset ulaz, jednom promijenite ga na "1" i opet da ga vratite na "0". Ovo resetira BYOC -I za pokretanje programa na adresi 0. Korak 3 - Jednom probadajte ulaz Run da biste ga promijenili na "1". Registar A trebao bi prikazati broj koji se mijenja od 1 do 5, a zatim se ponavlja. Korak 4 - Ako se program ne izvrši, pritisnite control -K i trebao bi se pokrenuti.

Ako želite istražiti Logisimove mogućnosti, kliknite vezu Pomoć na traci izbornika. Odatle možete istražiti Logisimov "Tutorial", "User Guide" i "Library Reference". Odličan video uvod nalazi se ovdje.

Korak 2: Hijerarhija strojnih jezika i kodovi

Hijerarhija strojnih jezika i kodovi
Hijerarhija strojnih jezika i kodovi

Računalo BYOC-I obavlja zadatke na temelju programa napisanih na strojnom jeziku. S druge strane, programi BYOC-I sastavljeni su od uputa koje se izvršavaju u točno definiranom slijedu. Svaka instrukcija sastoji se od kodova fiksne duljine koji predstavljaju različite operativne komponente BYOC-I. Konačno, ti se kodovi sastoje od nizova 1s i 0s koji čine strojni jezik koji BYOC-I zapravo izvršava.

Radi objašnjenja, počet ćemo s kodovima i krenuti do programske razine. Zatim ćemo kodirati jednostavan program, učitati ga u memoriju BYOC-I i izvršiti ga.

Kodovi se sastoje od fiksnog broja binarnih (1 i 0) znamenki ili bitova, skraćeno. Na primjer, donja tablica prikazuje sve moguće kodove (ukupno 16) za kôd širine 4 bita. Kod je prikazan heksadecimalni (baza 16) i decimalni ekvivalent. Heksadecimalno se koristi za pozivanje na binarne vrijednosti jer je kompaktnije od binarnog i lakše ga je pretvoriti iz binarnog u decimalni. Prefiks "0x" omogućuje vam da znate da je broj koji slijedi heksadecimalni ili skraćeno "hex".

Binarno - heksadecimalno - 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 0x000D

Širina koda određuje koliko se stavki može predstaviti. Kao što je napomenuto, gornji 4-bitni široki kod može predstavljati do 16 stavki (0 do 15); to jest, 2 puta 2 uzeto četiri puta ili 2 do 4 snage jednako je 16. Općenito, broj reprezentativnih stavki 2 je povećan na n -tu stepen. Evo kratkog popisa kapaciteta n-bitnog koda.

n - Broj stavki1 22 43 84 165 326 647 1288 256

Širine računalnog koda BYOC-I odabrane su tako da odgovaraju broju stavki koje će šifra predstaviti. Na primjer, postoje četiri vrste uputa, pa je prikladan 2-bitni širok kod. Ovdje su BYOC-I kodovi s kratkim objašnjenjem svakog od njih.

Kod vrste upute (tt) Postoje četiri vrste uputa: (1) MVI - Premjestite neposrednu 8 -bitnu konstantnu vrijednost u memorijski registar. Memorijski registar je uređaj koji sadrži podatke koji se koriste za izračun, (2) MOV - Premještanje podataka iz jednog registra u drugi, (3) RRC - Izvođenje izračunavanja registra u registar i (4) JMP - Skok na drugu uputu umjesto nastavka na sljedećoj uputi. Usvojeni kodovi vrsta uputa BYOC-I su sljedeći:

00 MVI01 MOV10 RRC11 JMP

Kôd registra (dd i ss) BYOC-I ima četiri 8-bitna registra koji mogu pohraniti vrijednosti od 0 do 255. 2-bitni kôd dovoljan je za označavanje četiri registra:

00 F registar01 E registar10 D registar11 A registar

Izračunski kod (ccc) BYOC-I podržava četiri aritmetičke/logičke operacije. Kako bi se omogućilo buduće proširenje na osam izračuna, koristi se 3-bitni kôd:

000 ADD, dodajte dvije 8-bitne vrijednosti u označene registre i pohranite rezultat u jedan od registara 001 SUB, oduzmite dvije 8-bitne vrijednosti u označene registre i pohranite rezultat u jedan od registara 010-011 Rezervirano za buduću uporabu100 AND, logički I dvije 8-bitne vrijednosti u označene registre, a rezultat pohranjuju u jedan od registara101 ILI, logički ILI dvije 8-bitne vrijednosti u označene registre i spremaju rezultat u jedan od registara 110 do 111, Rezervirano za buduću upotrebu

Kôd skoka (j) 1-bitni kôd koji pokazuje je li skok bezuvjetan (j = 1) ili uvjetovan rezultatom izračuna koji nije nula (j = 0).

Kôd podataka/adrese (v… v)/(a… a) 8-bitni podaci mogu biti uključeni u određene upute koje predstavljaju vrijednosti od 00000000 do 11111111 ili 0 do 255 decimalnih mjesta. Ti su podaci široki 8 bita za pohranu u 8-bitnim registrima BYOC-I. S decimalnom aritmetikom ne prikazujemo vodeće nule. Računalnom aritmetikom prikazujemo vodeće nule, ali one ne utječu na vrijednost. 00000101 je brojčano isti 101 ili 5 decimalnih mjesta.

Predložene reference

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

Daljnje čitanje

Ideja o korištenju kodova za pokretanje procesa seže daleko u prošlost. Jedan od fascinantnih primjera je Jacquard Loom. Automatiziranim razbojem upravljao je lanac drvenih karata u kojima su izbušene rupe koje predstavljaju kodove za različite boje pređe za tkanje. Svoju prvu sam vidio u Škotskoj gdje su je koristili za izradu šarenih tartana. Ovdje pročitajte više o Jacquard razbojima.

Korak 3: Anatomija uputa BYOC-I

Anatomija uputa BYOC-I
Anatomija uputa BYOC-I

S obzirom na kodove BYOC-I, prelazimo na sljedeću razinu, upute. Kako bismo stvorili instrukciju za BYOC-I, postavljamo kodove zajedno određenim redoslijedom i na određena mjesta unutar upute. Ne pojavljuju se svi kodovi u svim uputama, ali kad se pojave, zauzimaju određeno mjesto.

Vrsta MVI instrukcija zahtijeva najviše bitova, ukupno 12. Učinkom riječi upute duljine 12 bita, prilagođavamo sve upute. Neiskorišteni (tzv. "Briga") bitovi dobivaju vrijednost 0. Ovdje je skup uputa BYOC-I.

  1. Premjesti odmah (MVI) - 00 dd vvvvvvvv Funkcija: Premjestite 8 -bitnu vrijednost podataka V = vvvvvvvv u odredišni registar dd. Nakon izvršenja, registar dd imat će vrijednost vvvvvvvv. Kratica: MVI R, V gdje je R A, D, E ili F. Primjer: 00 10 00000101 - MVI D, 5 - Premjestite vrijednost 5 u D registar.
  2. Premjesti registar u registar (MOV) - 01 dd ss 000000Funkcija: Premjestite podatke iz izvornog registra ss u registar odredišta dd. Nakon izvršenja oba registra imaju istu vrijednost kao izvorni registar. Kratica: MOV Rd, Rs gdje je Rd odredišni registar A, D, E ili F i Rs izvorni registar A, D, E ili F. Primjer: 01 11 01 000000 - MOV A, E - premjestite vrijednost u registru E za upis A.
  3. Registrirajte se za izračunavanje izračuna (RRC) - 10 dd ss ccc 000 Funkcija: Izvedite naznačeni izračun ccc koristeći izvorni registar ss i odredišni registar dd, a zatim pohranite rezultat u odredišni registar. Kratice: ADD Rd, Rs (ccc = 000 Rd + Rs pohranjeni u Rd); SUB Rd, Rs (ccc = 001 Rd - Rs pohranjeno u Rd); AND Rd, Rs (ccc = 100 Rd I Rs pohranjeni u Rd); ILI Rd, Rs (ccc = 101 Rd ILI Rs pohranjen u Rd). Primjer: 10 00 11 001 000 - SUB F, A - Oduzmite vrijednost u registru A iz registra F s rezultatom u registru F.
  4. Skoči na drugu instrukciju (JMP) - 11 j 0 aaaaaaaa Funkcija: Promijenite izvršavanje na drugu instrukciju koja se nalazi na adresi aaaa aaaa (a) Bezuvjetno (j = 1) -11 1 0 aaaaaaaaSkraćenica: JMP L gdje je L adresa aaaa aaaaPrimjer: 11 1 0 00001000 - JMP 8 - Promijeni izvršenje na adresu 8. (b) Uvjetno (j = 0) ako je prethodni izračun rezultirao rezultatom koji nije nula - 11 0 0 aaaaaaaaSkraćenica: JNZ L gdje je L adresa aaaa aaaa. Primjer: 11 0 0 00000100 JNZ 4 Ako je posljednji izračun dao vrijednost različitu od nule, promijenite izvršenje na adresu 4.

Bitovi riječi s uputama numerirani su lijevo (najznačajniji bit MSB) nadesno (najmanji bit LSB) od 11 do 0. Fiksni redoslijed i lokacije kodova su sljedeći:

Bitovi-Šifra11-10 Vrsta upute9-8 Registar odredišta7-6 Registar izvora5-3 Izračun: 000-dodaj; 001 - oduzeti; 100 - logičko I; 101 - logičko OR7-0 Konstantna vrijednost v… v i a… a (0 do 255)

Skup uputa sažet je na gornjoj slici. Obratite pozornost na strukturiran i uredan izgled kodova u svakoj uputi. Rezultat je jednostavniji dizajn za BYOC-I i čini upute ljudima razumljivijima.

Korak 4: Kodiranje računalnih uputa

Kodiranje računalnih uputa
Kodiranje računalnih uputa

Prije nego prijeđemo na programsku razinu, konstruirajmo neke primjere uputstava koristeći gornji skup uputa BYOC-I.

1. Premjestite vrijednost 1 u registar A. Registri BYOC-I mogu pohraniti vrijednosti od 0 do 255. U ovom slučaju, registar A će imati vrijednost 1 (00000001 binarno) nakon izvršenja instrukcije.

Kratica: MVI A, 1 Potrebni kodovi: Tip MVI - 00; Odredišni registar A - 11; Vrijednost - 00000001 Riječ upute: 00 11 00000001

2. Premjestite sadržaj registra A u registar D. Nakon izvršenja oba registra imat će vrijednost izvorno u registru A.

Kratica: MOV D, A (Upamtite, odredište je prvo, a izvor drugi na popisu) Potrebni kodovi: Tip MOV - 01; Odredišni registar D - 10; Izvorni registar A - 11 Riječ upute: 01 10 11 000000

3. Dodajte sadržaj registra D u registar A i pohranite u registar A. Nakon izvršenja vrijednost registra A bit će zbroj izvorne vrijednosti registra A i registra D.

Kratica: ADD A, D (Rezultat je pohranjen u registru odredišta) Potrebni kodovi: Tip RRC - 10; Odredišni registar A - 11; Izvorni registar D - 10; Izračun Dodaj - 000 Riječ upute: 10 11 10 000 000 (ccc je prvi 000 - dodaj)

4. Skočite s nule na adresu 3. Ako rezultat posljednjeg izračuna nije bio nula, izvršenje će se promijeniti u instrukciju na zadanoj adresi. Ako je nula, izvršavanje se nastavlja prema sljedećoj uputi.

Kratica: JNZ 3 Potrebni kodovi: Tip JMP - 11; Vrsta skoka - 0; Adresa - 00000003 Riječ upute: 11 0 0 00000003 (Vrsta skoka je prva 0)

5. Bezuvjetno skočite na adresu 0. Nakon izvršenja, izvršenje se mijenja u instrukciju na zadanoj adresi.

Kratica: JMP 0Kod potreban: Tip JMP - 11; Vrsta skoka - 1; Adresa - 00000000Instrukcijska riječ; 11 1 0 00000000

Iako je strojno kodiranje pomalo dosadno, možete vidjeti da to nije nemoguće. Da ste stvarno strojno kodirali, upotrijebili biste računalni program koji se naziva asembler za prevođenje iz kratice (koja se naziva sklopni kod) u strojni kod.

Korak 5: Anatomija računalnog programa

Anatomija računalnog programa
Anatomija računalnog programa

Računalni program je popis uputa koje računalo izvršava počevši od početka popisa nastavljajući se niz popis do kraja. Upute poput JNZ -a i JMP -a mogu promijeniti sljedeću naredbu. Svaka instrukcija na popisu zauzima jednu adresu u memoriji računala počevši od 0. BYOC-I memorija može sadržavati popis od 256 uputa, što je više nego dovoljno za naše potrebe.

Računalni programi osmišljeni su za izvršavanje zadanog zadatka. Za naš program odabrat ćemo jednostavan zadatak, računajući od 1 do 5. Očigledno, nema instrukcije "prebrojavanja", pa je prvi korak razbiti zadatak na korake kojima se mogu baviti vrlo BYOC-I ograničen skup uputa.

Korak 1 Pomaknite 1 za registraciju AStep 2 Premjestite registar A za registraciju DStep 3 Dodajte registar D za registraciju A i pohranite rezultat u registar AStep 4 Premjestite 5 za registraciju EStep 5 Oduzmite registar A iz registra E i pohranite rezultat u registar EStep 6 Ako rezultat oduzimanja nije bio nula, vratite se na korak 4 i nastavite brojati Korak 7 Ako je rezultat oduzimanja bio nula, vratite se i počnite ispočetka

Sljedeći korak je prevođenje ovih koraka u upute BYOC-I. BYOC-I programi počinju s adresom 0 i rednim brojem. Ciljne adrese za skok dodaju se posljednje nakon što su postavljene sve upute.

Adresa: Uputa - Kratica; Opis0: 00 11 00000001 - MVI A, 1; Pomicanje 1 za registraciju A1: 01 10 11 000000 - MOV D, A; Pomicanje registra A za registraciju D2: 10 11 10 000 000 - ADD A, D; Dodajte registar D u registar A i pohranite rezultat u registar A3: 00 01 00 00000101 - MVI E, 5; Premjestite 5 registar E4: 10 01 11 001 000 - SUB E, A; Oduzmite registar A iz registra E i spremite rezultat u registru E5: 11 0 0 00000010 - JNZ 2; Ako rezultat oduzimanja nije bio nula, vratite se na adresu 3 i nastavite brojati 6: 11 1 0 00000000 - JMP 0; Ako je rezultat oduzimanja bio nula, vratite se natrag i počnite ispočetka

Prije prijenosa programa u memoriju, binarni kôd instrukcija mora se promijeniti u heksadecimalni za upotrebu s Logisim Hex Editor -om. Najprije podijelite instrukciju u tri skupine po 4 bita. Zatim prevedite grupe u heksadecimalnu pomoću tablice u 2. koraku. Koristit će se samo posljednje tri heksadecimalne znamenke (podebljano ispod).

Adresa - Uputstvo binarno - Uputstvo binarno Podijeli - Upute (šesterokutno) 0 001100000001 0011 0000 0001 - 0x03011 011011000000 0110 1100 0000 - 0x06C02 101110000000 1011 1000 0000 - 0x0B803 000100000101 0001 0000 0101 - 0x01054 1001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 111000000010 1110 0000 0000 - 0x0E00

Vrijeme je za prijenos programa u memoriju BYOC-I radi testiranja.

Korak 6: Prijenos programa u memoriju i testiranje

Prijenos programa u memoriju i testiranje
Prijenos programa u memoriju i testiranje
Prijenos programa u memoriju i testiranje
Prijenos programa u memoriju i testiranje

Gledajući "glavni" sklop Logisima, prikazani blok BYOC-I simbol je stvarnog računalnog kruga s oznakom "BYOC-I" u oknu Explorer. Za unos programa u BYOC-I memoriju:

  1. Desnom tipkom miša kliknite BYOC-I blok (naziva se "podkružnica") i odaberite (zadržite pokazivač miša i kliknite lijevo) "Prikaz BYOC-I".
  2. U radnom području pojavit će se sklop BYOC-I. Desnom tipkom miša kliknite simbol "Memorija programa" i odaberite "Uredi sadržaj..".
  3. Pomoću Logisim Hex Editor -a unesite heksadecimalni kôd (samo podebljano) kao što je prikazano gore.

Sada ste spremni za izvršavanje programa. Vratite se na glavni krug dvostrukim klikom na "BYOC-I" u oknu Explorer. Ulazi Run i Reset trebaju biti "0" za početak. Koristeći Poke Tool, prvo promijenite Reset na "1", a zatim natrag na "0". To čini početnu adresu 0x0000 i priprema sklop BYOC-I za izvođenje. Sada postavite ulaz Run na "1" i program će se izvršiti. (Napomena: Za pokretanje sata Logisim morate samo jednom dodirnuti Control-K. Ovo je značajka koja vam omogućuje da zaustavite sat Logisim i prođete kroz program dodirom na Control-T. Pokušajte to jednom!)

Sat Logisim podesiv je za širok raspon frekvencija. Prilikom preuzimanja iznosi 8 Hz (8 ciklusa u sekundi). Način na koji je računalo BYOC-I dizajnirano, svakoj je instrukciji potrebno četiri ciklusa takta da se dovrši. Dakle, za izračun BYOC-I brzine, podijelite taktnu frekvenciju sa 4. Na 8 Hz, njegova brzina je 2 upute u sekundi. Sat možete promijeniti klikom na "Simuliraj" na alatnoj traci i odabirom "Učestalost otkucaja". Mogući raspon je od 0,25 Hz do 4100 Hz. Odabrana je spora brzina pri 8 Hz kako biste mogli gledati brojanje u A registru.

Maksimalna brzina simulacije BYOC-I (~ 1000 uputa u sekundi) vrlo je spora u usporedbi s modernim računalima. Hardverska verzija računala BYOC opisana u mojoj knjizi izvršava se s više od 12 milijuna uputa u sekundi!

Nadam se da je ovaj Instructable demistificirao programiranje strojnog jezika i dao vam uvid u to kako računala rade na njihovoj najosnovnijoj razini. Da biste stekli razumijevanje, pokušajte kodirati dva programa u nastavku.

  1. Napišite program koji počinje s 5 i odbrojava do 0. (ANS. Broj od 5 do 0.txt ispod)
  2. Počevši od 2, brojite 3 dok broj ne pređe 7. Možete napraviti malo mentalne aritmetike, provjeriti ima li 8 znajući da će tamo pasti, a zatim ponovo pokrenite. Napišite svoj program na općenitiji način koji doista provjerava da li broj "prelazi" određeni broj. Savjet: Istražite što se događa kada oduzimanje dobije negativnu vrijednost, na primjer 8 - 9 = -1. Zatim eksperimentirajte s logičkim I da biste provjerili je li MSB u 8-bitnom broju "1". (ANS. ExceedsCount.txt)

Možete li se sjetiti drugih izazovnih problema za računalo BYOC-I? S obzirom na svoja ograničenja, što više može učiniti? Podijelite svoja iskustva sa mnom na [email protected]. Ako ste zainteresirani za kodiranje mikroprocesora, posjetite moju web stranicu www.whippleway.com. Tamo nosim strojno kodiranje na moderne procesore poput ATMEL Mega serije koja se koristi u Arduinosu.

Preporučeni: