Taula de continguts:
- Pas 1: llista de peces
- Pas 2: jerarquia i codis del llenguatge automàtic
- Pas 3: Anatomia de les instruccions BYOC-I
- Pas 4: Codificació d'una instrucció d'ordinador
- Pas 5: Anatomia d'un programa d'ordinador
- Pas 6: transferència del programa a memòria i proves
Vídeo: Codifiqueu i proveu un ordinador en llenguatge automàtic: 6 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:13
En aquest instructiu, us mostraré com codificar i provar un programa d’ordinador en llenguatge automàtic. El llenguatge automàtic és la llengua materna dels ordinadors. Com que es compon de cadenes d'1s i 0s, no és fàcil d'entendre pels humans. Per solucionar-ho, codifiquem els programes primer en un llenguatge d’alt nivell com C ++ o Java i, a continuació, utilitzem programes especials d’ordinador per traduir-los a l’ordinador 1s i 0s que comprenen. Aprendre a codificar en un llenguatge d’alt nivell és certament una obvietat, però una breu introducció al llenguatge de màquina pot proporcionar una informació valuosa sobre el funcionament dels ordinadors i augmentar l’apreciació d’aquesta importantíssima tecnologia.
Per codificar i provar un programa de llenguatge automàtic, necessitem accedir a un ordinador senzill el llenguatge automàtic del qual s’entén fàcilment. Els ordinadors personals són massa complexos per considerar-los. La solució és utilitzar Logisim, un simulador de lògica que s’executa en un ordinador personal. Amb Logisim podem simular un ordinador que satisfà les nostres necessitats. El vídeo anterior us dóna una idea del que podem aconseguir amb Logisim.
Per al disseny d’ordinadors, n’he adaptat un del llibre electrònic de Kindle Build Your Own Computer - From Scratch. Vaig començar amb l'ordinador BYOC que s'hi descriu i el vaig reduir fins al BYOC-I bàsic (I per a instructable) que utilitzarem en aquest instructable.
El llenguatge automàtic de BYOC-I és senzill i fàcil d’entendre. No necessiteu cap coneixement especial d’ordinadors ni de programació. Tot el que cal és una ment inquisidora i ganes d’aprendre
Per llegir més
Us podeu preguntar per què fem servir "màquina" per descriure un ordinador quan no és un dispositiu mecànic. El motiu és històric; els primers dispositius informàtics eren mecànics formats per engranatges i rodes. La lletra de Allan Sherman, "All all gear go going click-clack …", només va sortir d'un segle o dos. Llegiu més informació sobre la informàtica primerenca aquí.
Pas 1: llista de peces
La llista de peces és breu. Només calen aquests dos elements, tots dos descarregables de franc:
- "Logisim-win-2.7.1.exe": Logisim és un simulador de lògica popular i fàcil d'utilitzar. Descarregueu el fitxer executable de Logisim des d’aquí i creeu una drecera en un lloc convenient com l’escriptori. Feu doble clic a la icona Logisim per iniciar-la. Nota: Logisim utilitza el paquet Java Runtime que es troba aquí. És possible que se us demani que el descarregueu.
- BYOC-I-Full.cir ": baixeu el fitxer del circuit Logisim a continuació.
Inicieu Logisim i, a continuació, feu clic a "Obre el fitxer" i carregueu el fitxer BYOC-I-Full.cir. La imatge superior mostra l'entorn de treball Logisim. El BYOC-I està representat pel bloc de subcircuit. Connectats externament hi ha dues entrades, Reset i Run, i pantalles hexadecimals per als registres i la memòria del programa del BYOC-I.
La memòria del programa del BYOC-I es pre-carrega amb un programa senzill que compta de 1 a 5 al registre A. Per executar (executar) el programa, seguiu aquests passos.
Pas 1: feu clic a l'eina Poke. El cursor hauria de canviar al "dit" punxant. Pas 2: col·loqueu l'entrada Restableix dues vegades, un cop canvieu-la a "1" i torneu a canviar-la a "0". Això restableix el BYOC-I per iniciar el programa a l'adreça 0. Pas 3: introduïu l'entrada Run per canviar-la a "1". El registre A hauria de mostrar el recompte que canvia d’1 a 5. Després es repeteix. Pas 4: si el programa no s’executa, premeu control-K i hauria d’iniciar-se.
Si voleu explorar les funcions de Logisim, feu clic a l'enllaç Ajuda de la barra de menú. Des d'allà, podeu explorar el "Tutorial", la "Guia de l'usuari" i la "Referència de la biblioteca" de Logisim. Aquí es troba una excel·lent introducció en vídeo.
Pas 2: jerarquia i codis del llenguatge automàtic
L’ordinador BYOC-I realitza tasques basades en programes escrits en llenguatge automàtic. Els programes BYOC-I, al seu torn, es componen d’instruccions executades en una seqüència ben definida. Cada instrucció està formada per codis de longitud fixa que representen diversos components operatius del BYOC-I. Finalment, aquests codis consisteixen en cadenes d'1s i 0s que constitueixen el llenguatge màquina que BYOC-I realitza realment.
A tall d’explicació, començarem amb codis i anirem fins al nivell del programa. Després codificarem un programa senzill, el carregarem a la memòria del BYOC-I i l'executarem.
Els codis consisteixen en un nombre fix de dígits o bits binaris (1 i 0), en resum. Per exemple, la taula següent mostra tots els codis possibles (16 en total) per a un codi de 4 bits d'ample. Al costat es mostra el codi és l'equivalent hexadecimal (base 16) i decimal. L’hexadecimal s’utilitza per referir-se a valors binaris, ja que és més compacte que binari i és més fàcil de convertir de binari que decimal. El prefix "0x" us permet saber que el número següent és hexadecimal o "hex" en resum.
Binari - Hexadecimal - 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 0x000E 1411
L'amplada d'un codi determina quants elements es poden representar. Com es va assenyalar, el codi ample de 4 bits anterior pot representar fins a 16 elements (0 a 15); és a dir, 2 vegades 2 preses quatre vegades o 2 a 4a potència és igual a 16. En general, el nombre d’elements representables és 2 elevat a la enèsima potència. Aquí teniu una llista breu de capacitats de codi de n-bits.
n - Nombre d'articles 1 22 43 84 165 326 647 1288 256
Les amplades de codi de l’ordinador BYOC-I s’escullen per adaptar-se al nombre d’elements que el codi ha de representar. Per exemple, hi ha quatre tipus d’instruccions, de manera que és adequat un codi ample de 2 bits. Aquí teniu els codis BYOC-I amb una breu explicació de cadascun.
Codi de tipus d’instruccions (tt) Hi ha quatre tipus d’instruccions: (1) MVI: mou un valor constant de 8 bits immediat a un registre de memòria. El registre de memòria és un dispositiu que conté dades que s’utilitzaran per fer un càlcul, (2) MOV: moure dades d’un registre a un altre, (3) RRC: realitzar un càlcul de registre a registre i (4) JMP - Saltar a una instrucció diferent en lloc de continuar a la següent instrucció. Els codis de tipus d’instruccions BYOC-I adoptats són els següents:
00 MVI01 MOV10 RRC11 JMP
Codi de registre (dd i ss) El BYOC-I té quatre registres de 8 bits capaços d'emmagatzemar valors de 0 a 255. Un codi de 2 bits és suficient per designar els quatre registres:
00 F registre01 E registre10 D registre11 A registre
Codi de càlcul (ccc) El BYOC-I admet quatre operacions aritmètiques / lògiques. Per permetre l'expansió futura a vuit càlculs, s'utilitza un codi de 3 bits:
000 AFEGIR, afegiu dos valors de 8 bits en registres designats i emmagatzemeu el resultat en un dels registres 001 SUB, resteu dos valors de 8 bits en registres designats i emmagatzemeu el resultat en un dels registres 010 - 011 Reservats per a un ús futur100 I, lògicament I dos valors de 8 bits en registres designats i emmagatzemen el resultat en un dels registres101 O, lògicament O dos valors de 8 bits en registres designats i emmagatzemen el resultat en un dels registres110 a 111, reservat per a ús futur
Codi de salt (j) Un codi d'1 bit que indica si el salt és incondicional (j = 1) o està condicionat a un resultat de càlcul diferent de zero (j = 0).
Codi de dades / adreça (v … v) / (a … a) Les dades de 8 bits es poden incloure en determinades instruccions que representen valors de 00000000 a 11111111 o de 0 a 255 decimals. Aquestes dades tenen una amplada de 8 bits per emmagatzemar-la als registres de 8 bits de BYOC-I. Amb l'aritmètica decimal, no mostrem zeros inicials. Amb l'aritmètica de l'ordinador, mostrem zeros inicials, però no afecten el valor. 00000101 és numèricament igual a 101 o 5 decimals.
Referències suggerides
Notació binària: https://learn.sparkfun.com/tutorials/binaryHexadecimal Notation:
Per llegir més
La idea d’utilitzar codis per impulsar un procés es remunta molt enrere. Un exemple fascinant és el teler Jacquard. El teler automatitzat estava controlat per una cadena de cartes de fusta en què es perforaven forats que representaven codis per a filats de diferents colors per teixir. Vaig veure el meu primer a Escòcia, on es feia servir per fer tartanes de colors. Llegiu més sobre Jacquard Looms aquí.
Pas 3: Anatomia de les instruccions BYOC-I
Tenint en compte els codis BYOC-I, passem al següent nivell, instruccions. Per crear una instrucció per al BYOC-I, col·loquem els codis junts en un ordre especificat i en llocs específics dins de la instrucció. No tots els codis apareixen a totes les instruccions, però, quan ho fan, ocupen una ubicació específica.
El tipus d’instrucció MVI requereix la major quantitat de bits, 12 en total. En fer la paraula d’instruccions de 12 bits de longitud, acomodem totes les instruccions. Als bits no utilitzats (els anomenats "no m'importen") se'ls dóna el valor 0. Aquí teniu el conjunt d'instruccions BYOC-I.
- Move Immediate (MVI) - 00 dd vvvvvvvv Funció: Moveu un valor de dades de 8 bits V = vvvvvvvv al registre de destinació dd. Després de l'execució, el registre dd tindrà el valor vvvvvvvv. Abreviatura: MVI R, V on R és A, D, E o F. Exemple: 00 10 00000101 - MVI D, 5 - Moveu el valor 5 al registre D.
- Moveu el registre al registre (MOV) - 01 dd ss 000000 Funció: Moveu les dades del registre origen ss al registre desination dd. Després de l'execució, tots dos registres tenen el mateix valor que el registre font. Abreviatura: MOV Rd, Rs on Rd és el registre de destinació A, D, E o F i Rs és el registre font A, D, E o F. Exemple: 01 11 01 000000 - MOV A, E - Mou el valor al registre E per registrar A.
- Registre per registrar càlcul (RRC) - 10 dd ss ccc 000 Funció: Realitzeu un càlcul designat ccc mitjançant el registre font ss i el registre de destinació dd i deseu el resultat al registre de destinació. Abreviatures: ADD Rd, Rs (ccc = 000 Rd + Rs emmagatzemats a Rd); SUB Rd, Rs (ccc = 001 Rd - Rs emmagatzemats a Rd); AND Rd, Rs (ccc = 100 Rd AND Rs emmagatzemats a Rd); O Rd, Rs (ccc = 101 Rd O Rs emmagatzemats a Rd). Exemple: 10 00 11 001 000 - SUB F, A: resteu el valor del registre A del registre F amb el resultat al registre F.
- Vés a instruccions diferents (JMP) - 11 j 0 aaaaaaaa Funció: canvia l'execució a una instrucció diferent ubicada a l'adreça aaaa aaaa (a) Incondicionalment (j = 1) -11 1 0 aaaaaaaa Abreviatura: JMP L on L és adreça aaaa aaaaExemple: 11 1 0 00001000 - JMP 8 - Canvieu l'execució a l'adreça 8. (b) Condicionalment (j = 0) quan el càlcul anterior va donar lloc a un resultat no nul - 11 0 0 aaaaaaaa Abreviatura: JNZ L on L és adreça aaaa aaaa. Exemple: 11 0 0 00000100 JNZ 4 Si l'últim càlcul va donar un valor diferent de zero, canvieu l'execució a l'adreça 4.
Els bits de paraula d’instrucció es numeren d’esquerra (bit MSB més significatiu) a dreta (bit LSB menys significatiu) d’11 a 0. L’ordre i la ubicació fixats dels codis són els següents:
Bits - Codi11-10 Tipus d’instrucció9-8 Registre de destinacions7-6 Registre font5-3 Càlcul: 000 - afegir; 001 - restar; 100 - AND lògic; 101 - OR7-0 lògic Valor constant v … v i a … a (0 a 255)
El conjunt d’instruccions es resumeix a la figura anterior. Tingueu en compte l’aspecte estructurat i ordenat dels codis en cada instrucció. El resultat és un disseny més senzill per al BYOC-I i facilita la comprensió de les instruccions per als humans.
Pas 4: Codificació d'una instrucció d'ordinador
Abans de passar al nivell de programa, construïm algunes instruccions d'exemple amb el conjunt d'instruccions BYOC-I anterior.
1. Moveu el valor 1 per registrar A. Els registres BYOC-I poden emmagatzemar valors de 0 a 255. En aquest cas, el registre A tindrà el valor 1 (binari 00000001) després de l'execució de la instrucció.
Abreviatura: MVI A, 1 Codis obligatoris: tipus MVI - 00; Registre de destinacions A - 11; Valor: 00000001 Paraula d’instruccions: 00 11 00000001
2. Moveu el contingut del registre A al registre D. Després de l'execució, tots dos registres tindran el valor originalment al registre A.
Abreviatura: MOV D, A (Recordeu, la destinació és la primera i la segona font de la llista) Codis obligatoris: Escriviu MOV - 01; Registre de destinacions D - 10; Registre font A - 11 Paraula d’instruccions: 01 10 11 000000
3. Afegiu el contingut del registre D al registre A i emmagatzemeu-lo al registre A. Després de l'execució, el valor del registre A serà la suma del valor original del registre A i del registre D.
Abreviatura: ADD A, D (El resultat s’emmagatzema al registre de destinació) Codis obligatoris: tipus RRC - 10; Registre de destinacions A - 11; Registre font D - 10; Addició de càlcul - 000 Paraula d’instruccions: 10 11 10 000 000 (ccc és el primer 000 - afegir)
4. Saltar a zero a l'adreça 3. Si el resultat de l'últim càlcul no va ser zero, l'execució canviarà a la instrucció a l'adreça indicada. Si és zero, l'execució es reprèn a la instrucció següent.
Abreviatura: JNZ 3 Codis obligatoris: tipus JMP - 11; Tipus de salt: 0; Adreça - 00000003 Paraula d’instruccions: 11 0 0 00000003 (el tipus de salt és el primer 0)
5. Saltar incondicionalment a l'adreça 0. Després de l'execució, l'execució canvia a la instrucció a l'adreça indicada.
Abreviatura: JMP 0 Codi obligatori: tipus JMP - 11; Tipus de salt: 1; Adreça - 00000000 Instruction Word; 11 1 0 00000000
Tot i que la codificació de màquina és una mica tediosa, podeu veure que no és increïblement difícil. Si estiguéssiu realment codificant la màquina, faríeu servir un programa d’ordinador anomenat ensamblador per traduir de l’abreviatura (que s’anomena codi d’assemblea) al codi de la màquina.
Pas 5: Anatomia d'un programa d'ordinador
Un programa d'ordinador és una llista d'instruccions que l'ordinador executa començant pel començament de la llista, continuant per la llista fins al final. Instruccions com JNZ i JMP poden canviar quina instrucció s'executa a continuació. Cada instrucció de la llista ocupa una única adreça a la memòria de l'ordinador a partir de 0. La memòria BYOC-I pot contenir una llista de 256 instruccions, més que suficient per als nostres propòsits.
Els programes d'ordinador estan dissenyats per realitzar una tasca determinada. Per al nostre programa, escollirem una tasca senzilla, comptant de l'1 al 5. viouslybviament, no hi ha cap instrucció de "recompte", de manera que el primer pas és dividir la tasca en passos que els BYOC-I poden gestionar conjunt d'instruccions limitat.
Pas 1 Moveu 1 per registrar AStep 2 Moveu registre A per registrar DStep 3 Afegiu registre D per registrar A i emmagatzemeu el resultat al registre AStep 4 Moveu 5 per registrar EStep 5 Resteu el registre A del registre E i emmagatzemeu el resultat al registre ES Pas 6 Si el resultat de la resta no era nul, torneu al pas 4 i continueu comptant Pas 7 Si el resultat de la resta era nul, torneu enrere i torneu a començar
El següent pas és traduir aquests passos a instruccions BYOC-I. Els programes BYOC-I comencen a l’adreça 0 i es numeren de manera consecutiva. Les adreces de destinació de salt s'afegeixen darrerament després que totes les instruccions estiguin al seu lloc.
Adreça: Instrucció - Abreviatura; Descripció0: 00 11 00000001 - MVI A, 1; Mou 1 al registre A1: 01 10 11 000000 - MOV D, A; Mou el registre A al registre D2: 10 11 10 000 000 - ADD A, D; Afegiu el registre D per registrar A i emmagatzemeu el resultat al registre A3: 00 01 00 00000101 - MVI E, 5; Moveu el registre E4: 10 01 11 001 000 - SUB E, A; Resteu el registre A del registre E i emmagatzemeu el registre resultat al registre E5: 11 0 0 00000010 - JNZ 2; Si el resultat de la resta no era zero, torneu a l'adreça 3 i continueu comptant 6: 11 1 0 00000000 - JMP 0; Si el resultat de la resta era zero, torneu enrere i torneu a començar
Abans de transferir el programa a la memòria, el codi d'instruccions binàries s'ha de canviar a hexadecimal per utilitzar-lo amb l'Editor hexagonal Logisim. Primer, dividiu la instrucció en tres grups de 4 bits cadascun. A continuació, traduïu els grups a hexadecimal mitjançant la taula del pas 2. Només s’utilitzaran els tres darrers dígits hexadecimals (en negreta a continuació).
Adreça - Instrucció binària - Instrucció binària dividida - Instrucció (hexadecimal) 0 001100000001 0011 0000 0001 - 0x03011 011011000000 0110 1100 0000 - 0x06C02 101110000000 1011 1000 0000 - 0x0B803 000100000101 0001 0000 0101 - 0x01054 1001110010000000000000000000000000000 111000000010 1110 0000 0000 - 0x0E00
És hora de transferir el programa a la memòria del BYOC-I per fer-ne proves.
Pas 6: transferència del programa a memòria i proves
Mirant el circuit "principal" de Logisim, el bloc BYOC-I que es mostra és el símbol del circuit informàtic real etiquetat com "BYOC-I" al panell Explorer. Per introduir un programa a la memòria BYOC-I:
- Feu clic amb el botó dret al bloc BYOC-I (anomenat "subcircuit") i seleccioneu (passeu el cursor per sobre i feu clic esquerre) "Veure BYOC-I".
- El circuit BYOC-I apareixerà a l’àrea de treball. Feu clic amb el botó dret sobre el símbol "Memòria del programa" i seleccioneu "Edita el contingut..".
- Mitjançant l’Editor hexagonal Logisim, introduïu el codi hexadecimal (només en negreta) tal com es mostra a la part anterior.
Ja esteu a punt per executar el programa. Torneu al circuit principal fent doble clic a "BYOC-I" al tauler Explorador. Les entrades Executar i restablir han de ser "0" per començar. Amb l'eina Poke, primer canvieu Restableix a "1" i torneu a "0". Això fa que l'adreça inicial sigui 0x0000 i prepari el circuit BYOC-I per a l'execució. Ara poseu l'entrada Run a "1" i el programa s'executarà. (Nota: principalment heu de tocar Control-K una vegada per iniciar el rellotge Logisim. Aquesta és una característica que us permet aturar el rellotge Logisim i passar pel programa tocant Control-T repetidament. Proveu-ho en algun moment!)
El rellotge Logisim es pot configurar per a una àmplia gamma de freqüències. Com es descarrega, és de 8 Hz (8 cicles per segon). La manera com es dissenya l’ordinador BYOC-I, cada instrucció triga quatre cicles de rellotge en completar-se. Per tant, per calcular la velocitat BYOC-I, divideix la freqüència del rellotge per 4. A 8 Hz, la seva velocitat és de 2 instruccions per segon. Podeu canviar el rellotge fent clic a "Simula" a la barra d'eines i seleccionant "Freqüència de tick". El rang possible és de 0,25 Hz a 4100 Hz. Es va triar la velocitat lenta a 8 Hz per poder veure el recompte al registre A.
La velocitat màxima de la simulació BYOC-I (~ 1000 instruccions per segon) és molt lenta en comparació amb els ordinadors moderns. La versió de maquinari de l’ordinador BYOC descrita al meu llibre s’executa a més de 12 milions d’instruccions per segon.
Espero que aquest Instructable hagi desmitificat la programació del llenguatge màquina i us hagi donat informació sobre com funcionen els ordinadors al seu nivell més bàsic. Per entendre la vostra comprensió, intenteu codificar els dos programes següents.
- Escriviu un programa que comenci per 5 i compti fins a 0. (ANS. Count5to0.txt a continuació)
- A partir de 2, compteu fins a 3 fins que el nombre excedeixi de 7. Podeu fer una mica d’aritmètica mental, comproveu-ne 8 sabent que hi aterraria i reinicieu. Escriviu el programa d'una manera més general que provi realment si el recompte "supera" un nombre específic. Consell: exploreu què passa quan una resta produeix un valor negatiu, per exemple, entre 8 i 9 = -1. A continuació, experimenteu amb el AND lògic per comprovar si el MSB d'un número de 8 bits és "1". (ANS. ExceedCount.txt)
Se us acudeixen altres problemes difícils per a l'ordinador BYOC-I? Donades les seves limitacions, què més pot fer? Comparteix les teves experiències amb mi a [email protected]. Si esteu interessats en codificar microprocessadors, consulteu el meu lloc web www.whippleway.com. Allà porto la codificació de màquines a processadors moderns com la sèrie ATMEL Mega que s’utilitza a Arduinos.
Recomanat:
Programa d'addició simple en llenguatge de programació de Shakespeare: 18 passos
Programa d'addició simple en llenguatge de programació de Shakespeare: el llenguatge de programació de Shakespeare (SPL) és un exemple d'un llenguatge de programació esotèric, potser interessant d'aprendre i divertit d'utilitzar, però que no és especialment útil en aplicacions de la vida real. SPL és un idioma on el codi font r
Codifiqueu un script CustomCmd per a l'indicador d'ordres de Windows: 6 passos
Codifiqueu un script CustomCmd per a l'indicatiu d'ordres de Windows: utilitzeu molt CMD? Faig! Però un munt de persones, inclòs jo, pensen que és massa avorrit. Avui codificaré un script que ens permetrà personalitzar CMD el suficient per divertir-lo. Comencem! DESCÀRREGA DEL CODI AL FONS DE ARTICLEYOU WIL
Vista és massa lent? Proveu això: 5 passos
Vista és massa lent? Proveu-ho: ara, tots els equips nous inclouen Windows Vista. Ja no vénen amb XP. Com molta gent sap, Vista és una memòria RAM, especialment Vista Ultimate. Tot el que significa és que és molt, molt lent. La majoria de la gent informàtica us ho dirà per poder
Proveu un transistor bipolar (fora de circuit): 3 passos
Proveu un transistor bipolar (fora de circuit): heu creat un projecte d'un transistor i va funcionar molt bé, però ara ha deixat de funcionar. Vostè decideix que el transistor pot ser defectuós. Però no esteu segur de com provar-lo. Aquest instructiu serveix per provar un transistor després de treure'l del
L’ordinador portàtil sembla mort? Proveu de canviar la bateria del BIOS: 7 passos
L’ordinador portàtil sembla mort? Proveu de canviar la bateria del BIOS: Hola, un amic em va donar un ordinador portàtil perquè la placa base estava morta. Aquest amic es va posar en contacte amb HP, volien reparar 400 $ Només cal reparar-lo en 5 minuts