Sisukord:

Arvuti kodeerimine ja testimine masinakeeles: 6 sammu
Arvuti kodeerimine ja testimine masinakeeles: 6 sammu

Video: Arvuti kodeerimine ja testimine masinakeeles: 6 sammu

Video: Arvuti kodeerimine ja testimine masinakeeles: 6 sammu
Video: Основные ошибки при возведении перегородок из газобетона #5 2024, November
Anonim
Image
Image

Selles juhendis näitan teile, kuidas arvutiprogrammi masinakeeles kodeerida ja testida. Masinakeel on arvutite emakeel. Kuna see koosneb stringidest 1 ja 0, ei ole see inimestele kergesti arusaadav. Selle lahendamiseks kodeerime programmid esmalt kõrgetasemelises keeles, näiteks C ++ või Java, seejärel kasutame spetsiaalseid arvutiprogramme, et tõlkida need 1 -ndate ja 0 -ndate arvutite arusaadavaks. Kõrgetasemelises keeles kodeerimise õppimine on kindlasti lihtne, kuid lühike sissejuhatus masinakeelde võib anda väärtusliku ülevaate arvutite toimimisest ja suurendada selle väga olulise tehnoloogia tunnustamist.

Masinakeele programmi kodeerimiseks ja testimiseks vajame juurdepääsu lihtsale arvutile, mille masinakeel on kergesti mõistetav. Personaalarvutid on liiga keerulised, et neid isegi kaaluda. Lahenduseks on kasutada loogikasimulaatorit Logisim, mis töötab personaalarvutis. Logisimiga saame simuleerida meie vajadustele vastavat arvutit. Ülaltoodud video annab teile aimu, mida me saame Logisimiga saavutada.

Arvutikujunduse jaoks kohandasin ühe oma Kindle e -raamatust „Ehita oma arvuti - nullist”. Alustasin seal kirjeldatud BYOC arvutiga ja kärpisin selle varieeruva põhilise BYOC-I (I for Instructable) jaoks, mida selles juhendis kasutame.

BYOC-I masinakeel on lihtne ja kergesti mõistetav. Te ei vaja arvutite või programmeerimise eriteadmisi. Kõik, mida vajame, on uudishimulik meel ja soov õppida

Lisalugemist

Teil võib tekkida küsimus, miks me kasutame arvuti kirjeldamiseks "masinat", kui see pole mehaaniline seade. Põhjus on ajalooline; esimesed arvutusseadmed olid mehaanilised, mis koosnesid hammasratastest ja ratastest. Allan Shermani lüürika "Kõik käigud liikusid klõpsatavalt …" oli alles sajand või kaks. Loe varase andmetöötluse kohta siit.

Samm: osade loend

Masina keele hierarhia ja koodid
Masina keele hierarhia ja koodid

Osade nimekiri on lühike. Vaja on ainult neid kahte üksust, mõlemad tasuta allalaaditavad:

  1. "Logisim-win-2.7.1.exe"-Logisim on populaarne ja hõlpsasti kasutatav loogikasimulaator. Laadige siit alla käivitatav fail Logisim ja looge otsetee mugavas kohas, näiteks töölaual. Selle käivitamiseks topeltklõpsake Logisimi ikooni. Märkus: Logisim kasutab siin asuvat Java Runtime paketti. Teil võidakse paluda see alla laadida.
  2. BYOC-I-Full.cir "-Laadige alla Logisimi vooluahela fail.

Käivitage Logisim, seejärel klõpsake "File-Open" ja laadige fail BYOC-I-Full.cir. Ülaltoodud pilt näitab Logisimi töökeskkonda. BYOC-I on esindatud ahela plokiga. Väliselt on ühendatud kaks sisendit, lähtestamine ja käivitamine, ning BYOC-I registrite ja programmimälu kuueteistkümnendarv.

BYOC-I programmimäll on eellaaditud lihtsa programmiga, mis loeb A registris 1 kuni 5. Programmi käivitamiseks toimige järgmiselt.

Samm - klõpsake tööriistal Poke. Kursor peaks muutuma torkivaks "sõrmeks". 2. samm - sisestage lähtestamise sisend kaks korda, muutes selle "1" -ks ja uuesti, et muuta see "0" -ks. See lähtestab BYOC -I programmi käivitamiseks aadressil 0. 3. samm - Puudutage üks kord Run sisendit, et muuta see väärtuseks "1". A -register peaks näitama, et arv muutub 1 -lt 5 -le ja seejärel kordub. 4. samm - kui programm ei käivitu, vajutage klahvikombinatsiooni C ja see peaks algama.

Kui soovite uurida Logisimi võimalusi, klõpsake menüüribal linki Abi. Sealt saate uurida Logisimi "õpetust", "kasutusjuhendit" ja "raamatukogu viidet". Suurepärase videotutvustuse leiate siit.

2. samm: masina keele hierarhia ja koodid

Masina keele hierarhia ja koodid
Masina keele hierarhia ja koodid

Arvuti BYOC-I täidab ülesandeid, mis põhinevad masina keeles kirjutatud programmidel. BYOC-I programmid koosnevad omakorda juhistest, mis täidetakse täpselt määratletud järjestuses. Iga juhis koosneb kindla pikkusega koodidest, mis esindavad BYOC-I erinevaid töökomponente. Lõpuks koosnevad need koodid stringidest 1 ja 0, mis moodustavad masinakeele, mida BYOC-I tegelikult täidab.

Selgituseks alustame koodidega ja liigume programmi tasemeni. Seejärel kodeerime lihtsa programmi, laadime selle BYOC-I mällu ja käivitame selle.

Koodid koosnevad fikseeritud arvust binaarsetest (1 ja 0) numbritest või bittidest. Näiteks on allolevas tabelis näidatud kõik võimalikud koodid (kokku 16) 4 -bitise laiusega koodi jaoks. Selle kõrval on kood kuueteistkümnendarv (alus 16) ja kümnendkoha ekvivalent. Kuueteistkümnendsüsteemi kasutatakse binaarsetele väärtustele viitamisel, kuna see on binaarsest kompaktsem ja binaarsest teisendatav lihtsam kui kümnendarv. Eesliide "0x" annab teile teada, et järgnev number on kuueteistkümnendarv või lühend "hex".

Binaarne - kuueteistkümnendarv - kümnendarv0000 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 1311

Koodi laius määrab, kui palju üksusi saab esitada. Nagu märgitud, võib ülaltoodud 4-bitine lai kood esindada kuni 16 üksust (0 kuni 15); see tähendab, et 2 korda 2 võetakse neli korda või 2 kuni 4 võim võrdub 16. Üldiselt tõstetakse esindatavate esemete arv 2 n -ndaks astmeks. Siin on lühike nimekiri n-bitise koodi võimsustest.

n - üksuste arv 1 22 43 84 165 326 647 1288 256

BYOC-I arvutikoodi laiused valitakse vastavalt koodiga tähistatavate üksuste arvule. Näiteks on neli käsutüüpi, seega sobib 2-bitine lai kood. Siin on BYOC-I koodid koos igaühe lühikese selgitusega.

Käsu tüübi kood (tt) On nelja käsutüüpi: (1) MVI - kohese 8 -bitise konstantse väärtuse teisaldamine mäluregistrisse. Mäluregister on seade, mis hoiab arvutamiseks kasutatavaid andmeid, (2) MOV - andmete teisaldamine ühest registrist teise, (3) RRC - registrist registrisse arvutamise teostamine ja (4) JMP - hüpik järgmise juhendi jätkamise asemel teisele juhisele. Vastuvõetud BYOC-I juhiste tüübikoodid on järgmised:

00 MVI01 MOV10 RRC11 JMP

Registrikood (dd ja ss) BYOC-I-l on neli 8-bitist registrit, mis suudavad salvestada väärtusi vahemikus 0 kuni 255. Nelja registri määramiseks piisab 2-bitisest koodist:

00 F register01 E register10 D register11 A register

Arvutuskood (ccc) BYOC-I toetab nelja aritmeetilist/loogilist toimingut. Kaheksa arvutuse laiendamiseks tulevikus kasutatakse 3-bitist koodi:

000 ADD, lisage kaks 8-bitist väärtust määratud registritesse ja salvestage tulemus ühte registritest 001 SUB, lahutage kaks 8-bitist väärtust määratud registrites ja salvestage tulemus ühte registritest 010-011 reserveeritud edaspidiseks kasutamiseks100 JA, loogiliselt JA kaks 8-bitist väärtust määratud registrites ja salvestavad tulemuse ühes registrites101 VÕI, loogiliselt VÕI kaks 8-bitist väärtust määratud registrites ja salvestavad tulemuse ühes registrites 110 kuni 111, reserveeritud edaspidiseks kasutamiseks

Hüppekood (j) 1-bitine kood, mis näitab, kas hüpe on tingimusteta (j = 1) või tingitud mitte-nullarvutamistulemusest (j = 0).

Andmed/aadressikood (v… v)/(a… a) 8-bitised andmed võivad sisalduda teatud juhistes, mis esindavad väärtusi vahemikus 00000000 kuni 11111111 või 0 kuni 255 kümnendkohani. Need andmed on 8-bitised, et neid saaks salvestada BYOC-I 8-bitistes registrites. Kümnendaritmeetika korral ei näita me nulle. Arvutiaritmeetika abil näitame nulljooni, kuid need väärtust ei mõjuta. 00000101 on arvuliselt sama 101 või 5 kümnendkohaga.

Soovitatud viited

Binaarne märge - https://learn.sparkfun.com/tutorials/binaryHexadecimal Notation -

Lisalugemist

Idee protsessi juhtimiseks koodide kasutamisest pärineb kaugest ajast. Üks põnev näide on Jacquard Loom. Automatiseeritud kangastelge juhtis puidust kaartide kett, millesse puuriti augud, mis kujutasid kudumiseks eri värvi lõnga koode. Nägin oma esimest Šotimaal, kus sellest tehti värvilisi tartaane. Jacquard Loomsi kohta loe lähemalt siit.

3. samm: BYOC-I juhiste anatoomia

BYOC-I juhiste anatoomia
BYOC-I juhiste anatoomia

Arvestades BYOC-I koode, liigume järgmisele tasemele, juhistele. Käsu loomiseks BYOC-I jaoks paigutame koodid kokku kindlas järjekorras ja juhendi kindlatesse kohtadesse. Kõik koodid ei ilmu kõigis juhistes, kuid kui need ilmuvad, hõivavad nad kindla asukoha.

MVI käsutüüp nõuab kõige rohkem, kokku 12 bitti. Tehes käsusõna 12 -bitiseks, mahutame kõik juhised. Kasutamata (nn "ei hooli") bittidele antakse väärtus 0. Siin on BYOC-I juhiste komplekt.

  1. Teisalda kohe (MVI) - 00 dd vvvvvvvv Funktsioon: teisaldage 8 -bitine andmeväärtus V = vvvvvvvv sihtregistrisse dd. Pärast täitmist on registri dd väärtus vvvvvvvv. Lühend: MVI R, V, kus R on A, D, E või F. Näide: 00 10 00000101 - MVI D, 5 - teisaldage väärtus 5 D registrisse.
  2. Teisalda register registrisse (MOV) - 01 dd ss 000000 Funktsioon: teisaldage andmed lähteregistrist ss sihtregistrisse dd. Pärast täitmist on mõlemal registril lähteregistriga sama väärtus. Lühend: MOV Rd, Rs, kus Rd on sihtregister A, D, E või F ja Rs on lähteregister A, D, E või F. Näide: 01 11 01 000000 - MOV A, E - väärtuse teisaldamine registris E A registreerimiseks.
  3. Register to Register Calculation (RRC) - 10 dd ss ccc 000 Funktsioon: Tehke määratud arvutus ccc, kasutades lähteregistrit ss ja sihtregistrit dd, seejärel salvestades tulemuse sihtregistrisse. Lühendid: ADD Rd, Rs (ccc = 000 Rd + Rs salvestatud Rd); SUB Rd, Rs (ccc = 001 Rd - Rs salvestatud Rd); JA Rd, Rs (ccc = 100 Rd ja Rd, mis on salvestatud Rd -sse); VÕI Rd, Rs (ccc = 101 Rd VÕI Rs, mis on salvestatud Rd -sse). Näide: 10 00 11 001 000 - ALA F, A - lahutage F -registrist A -registri väärtus, mille tulemus on F -registris.
  4. Funktsioon: muutke täitmist teistsuguseks käsuks, mis asub aadressil aaaa aaaa (a) Tingimusteta (j = 1) -11 1 0 aaaaaaaa Lühend: JMP L, kus L on aadress aaaa aaaaNäide: 11 1 0 00001000 - JMP 8 - muutke täitmine aadressiks 8. 0 00000100 JNZ 4 Kui viimane arvutus andis nullist erineva väärtuse, muutke täitmine aadressiks 4.

Käsusõnade bitid on nummerdatud vasakult (kõige olulisem bit MSB) paremale (kõige vähem oluline bit LSB) vahemikus 11 kuni 0. Koodide fikseeritud järjekord ja asukohad on järgmised:

Bits-Kood11-10 Juhendi tüüp9-8 Sihtkohtade register7-6 Allikate register5-3 Arvutus: 000-lisage; 001 - lahutada; 100 - loogiline JA; 101 - loogiline OR7-0 Pidev väärtus v… v ja a… a (0 kuni 255)

Juhendite kogum on kokku võetud ülaltoodud joonisel. Pange tähele iga juhendi koodide struktureeritud ja korrastatud välimust. Tulemuseks on BYOC-I jaoks lihtsam disain ja see muudab juhised inimestele arusaadavamaks.

4. samm: arvutijuhendi kodeerimine

Arvutijuhendi kodeerimine
Arvutijuhendi kodeerimine

Enne programmi tasemele liikumist konstrueerime mõned näidisjuhised, kasutades ülaltoodud BYOC-I juhiste komplekti.

1. Liigutage väärtus 1 registrisse A. BYOC-I registrid võivad salvestada väärtusi vahemikus 0 kuni 255. Sellisel juhul on registri A väärtus pärast käsu täitmist 1 (binaarne).

Lühend: MVI A, 1Koodid on kohustuslikud: tüüp MVI - 00; Sihtregister A - 11; Väärtus - 00000001Juhendisõna: 00 11 00000001

2. Teisaldage registri A sisu registrisse D. Pärast täitmist on mõlema registri väärtus algselt registris A.

Lühend: MOV D, A (pidage meeles, et sihtkoht on loendis esimene ja allikas teine) Nõutavad koodid: tüüp MOV - 01; Sihtregister D - 10; Allikate register A - 11Juhendsõna: 01 10 11 000000

3. Lisage registri D sisu registrisse A ja salvestage registrisse A. Pärast täitmist on registri A väärtus registri A ja registri D algväärtuse summa.

Lühend: ADD A, D (Tulemus salvestatakse sihtregistrisse) Vajalikud koodid: Tüüp RRC - 10; Sihtregister A - 11; Allikaregister D - 10; Arvutuste lisamine - 000 Juhendisõna: 10 11 10 000 000 (ccc on esimene 000 - lisage)

4. Hüppa aadressile mitte null. 3. Kui viimase arvutuse tulemus ei olnud null, muutub täitmine antud aadressil olevaks käsuks. Kui see on null, jätkatakse täitmist järgmiste juhiste järgi.

Lühend: JNZ 3Koodid on kohustuslikud: Tüüp JMP - 11; Hüppa tüüp - 0; Aadress - 00000003 Juhendisõna: 11 0 0 00000003 (hüppe tüüp on esimene 0)

5. Hüppa tingimusteta aadressile 0. Pärast täitmist muutub täitmine antud aadressil olevale käsule.

Lühend: JMP 0Kood kohustuslik: tüüp JMP - 11; Hüppa tüüp - 1; Aadress - 00000000Instruktsioonisõna; 11 1 0 00000000

Kuigi masina kodeerimine on mõnevõrra tüütu, näete, et see pole võimatu raske. Kui te kodeeriksite masinat päriselt, kasutaksite arvutiprogrammi, mida nimetatakse monteerijaks, et tõlkida lühendist (mida nimetatakse kokkupanekukoodiks) masinakoodiks.

Samm: arvutiprogrammi anatoomia

Arvutiprogrammi anatoomia
Arvutiprogrammi anatoomia

Arvutiprogramm on juhiste loend, mida arvuti täidab, alustades loendi algusest ja jätkates loendist allapoole. Sellised juhised nagu JNZ ja JMP võivad muuta järgmist käsku. Kõik loendis olevad juhised hõivavad arvuti mälus ühe aadressi, mis algab nullist. BYOC-I mälu mahutab 256 juhist, mis on meie jaoks enam kui piisav.

Arvutiprogrammid on loodud antud ülesande täitmiseks. Meie programmi jaoks valime lihtsa ülesande, lugedes 1 kuni 5. Ilmselgelt ei ole käsku "count", nii et esimene samm on jaotada ülesanne sammudeks, mida saavad BYOC-I väga piiratud juhiste komplekt.

Samm 1 Liigutage 1, et registreerida AStep 2 Teisaldage register A registreerimiseks DStep 3 Lisage register D registrisse A ja salvestage tulemus registrisse AStep 4 Liigutage 5, et registreerida EStep 5 Lahutage register A registrist E ja salvestage tulemus registrisse EStep 6 Kui lahutamise tulemus ei olnud null, minge tagasi 4. sammu juurde ja jätkake loendamist 7. samm Kui lahutamise tulemus oli null, minge tagasi ja alustage otsast peale

Järgmine samm on tõlkida need sammud BYOC-I juhisteks. BYOC-I programmid algavad aadressilt 0 ja nummerdatakse järjest. Hüppe sihtmärgi aadressid lisatakse viimasena pärast seda, kui kõik juhised on paigas.

Aadress: Juhend - Lühend; Kirjeldus 0: 00 11 00000001 - MVI A, 1; Liigutage 1 registrisse A1: 01 10 11 000000 - MOV D, A; Liigutage register A registrisse D2: 10 11 10 000 000 - ADD A, D; Lisage register D registrisse A ja salvestage tulemus registrisse A3: 00 01 00 00000101 - MVI E, 5; teisaldage 5 register E4: 10 01 11 001 000 - SUB E, A; lahutage register A registrist E ja salvestage tulemus registris E5: 11 0 0 00000010 - JNZ 2; Kui lahutamise tulemus ei olnud null, minge tagasi aadressile 3 ja jätkake lugemist 6: 11 1 0 00000000 - JMP 0; Kui lahutamise tulemus oli null, minge tagasi ja alustage uuesti

Enne programmi mällu ülekandmist tuleb Logisim Hex Editoriga kasutamiseks binaarne käsukood muuta kuueteistkümnendiks. Kõigepealt jagage juhised kolmeks 4 -bitiseks rühmaks. Seejärel tõlkige rühmad kuueteistkümnendsüsteemi, kasutades 2. sammu tabelit. Kasutatakse ainult kolme viimast kuueteistkümnendnumbrit (allpool paksus kirjas).

Aadress - Binary Binary - Juhend Binary Split - Juhend (Hex) 0 001100000001 0011 0000 0001 - 0x03011 011011000000 0110 1100 0000 - 0x06C02 101110000000 1011 1000 0000 - 0x0B803 000100000101 0001 0000 0101 - 0x0105000000100 111000000010 1110 0000 0000 - 0x0E00

On aeg programm testimiseks BYOC-I mällu üle kanda.

6. samm: programmi ülekandmine mällu ja testimine

Programmi ülekandmine mällu ja testimine
Programmi ülekandmine mällu ja testimine
Programmi ülekandmine mällu ja testimine
Programmi ülekandmine mällu ja testimine

Vaadates Logisimi "peamist" vooluahelat, on näidatud BYOC-I plokk sümbol tegelikul arvutiahelal, mis on Exploreri paanil märgistatud "BYOC-I". Programmi sisestamiseks BYOC-I mällu tehke järgmist.

  1. Paremklõpsake BYOC-I plokki (nimetatakse "alamringiks") ja valige (hõljutage kursorit ja klõpsake vasakut nuppu) "Vaata BYOC-I".
  2. BYOC-I vooluring ilmub tööpiirkonda. Paremklõpsake sümbolit "Programmi mälu" ja valige "Muuda sisu..".
  3. Sisestage Logisim Hex Editori abil kuueteistkümnendkood (ainult paksus kirjas), nagu ülal näidatud.

Nüüd olete programmi käivitamiseks valmis. Naaske põhiahelasse, topeltklõpsates Exploreri paanil nuppu "BYOC-I". Käivitamise ja lähtestamise sisendid peaksid alustamiseks olema "0". Muutke Poke tööriista abil kõigepealt Reset väärtuseks "1" ja seejärel tagasi "0". See teeb lähteaadressiks 0x0000 ja valmistab BYOC-I vooluringi täitmiseks ette. Nüüd pange Run sisend "1" ja programm käivitub. (Märkus. Logisimi kella käivitamiseks peate põhiliselt puudutama nuppu Control-K. See on funktsioon, mis võimaldab peatada Logisimi kella ja astuda läbi programmi, puudutades korduvalt nuppu Control-T. Proovige millalgi!)

Logisimi kell on seadistatav paljude sageduste jaoks. Allalaadimisel on see 8 Hz (8 tsüklit sekundis). Arvuti BYOC-I ülesehitus võtab iga käsu täitmiseks neli kella tsüklit. Niisiis, BYOC-I kiiruse arvutamiseks jagage taktsagedus 4-ga. 8 Hz juures on selle kiirus 2 juhist sekundis. Saate kella muuta, klõpsates tööriistaribal "Simuleeri" ja valides "Puugide sagedus". Võimalik vahemik on 0,25 Hz kuni 4100 Hz. Aeglane kiirus kiirusel 8 Hz valiti nii, et saaksite vaadata A -registri loendust.

BYOC-I simulatsiooni maksimaalne kiirus (~ 1000 juhist sekundis) on kaasaegsete arvutitega võrreldes väga aeglane. Minu raamatus kirjeldatud BYOC arvuti riistvaraline versioon täidab rohkem kui 12 miljonit juhist sekundis!

Loodan, et see Instructable on masinakeele programmeerimise demüstifitseerinud ja andnud teile ülevaate arvutite kõige elementaarsemast toimimisest. Mõistmise kinnitamiseks proovige kodeerida kaks allolevat programmi.

  1. Kirjutage programm, mis algab 5 -st ja loeb alla 0. (ANS. Count5to0.txt allpool)
  2. Alustades 2 -st, loendage 3 -ga, kuni arv ületab 7. Võiksite teha natuke vaimset aritmeetikat, kontrollida 8 -d, teades, et see maandub sinna ja seejärel taaskäivitada. Kirjutage oma programm üldisemal viisil, mis tõesti kontrollib, kas arv ületab konkreetse arvu. Vihje: uurige, mis juhtub, kui lahutamisel saadakse negatiivne väärtus, näiteks näiteks 8 - 9 = -1. Seejärel katsetage loogilise JA-ga, et testida, kas 8-bitise numbri MSB on "1". (ANS. ExceedsCount.txt)

Kas saate mõelda muudele BYOC-I arvuti probleemidele? Arvestades selle piiranguid, mida veel teha? Jagage minuga oma kogemusi aadressil [email protected]. Kui olete huvitatud mikroprotsessorite kodeerimisest, vaadake minu veebisaiti www.whippleway.com. Seal kannan masinakodeerimist kaasaegsetele protsessoritele nagu Ardelinos kasutatav ATMEL Mega seeria.

Soovitan: