C8 Un asamblor `ntr-o coaj\ de nuc\ Despre: Felul cum putem folosi `mpreun\ dou\ instrumente puternice; no]iunea de functor din teoria categoriilor [i

Documente similare
Probleme date la examenul de logică matematică şi computaţională. Partea a II-a Claudia MUREŞAN Universitatea din Bucureşti Facultatea de Matematică ş

Microsoft Word - Prelegere 1 - Bratu C. - Microcontrolerul.doc

Microsoft Word - O problema cu bits.doc

Microsoft Word - 4Adrian Vizitiu.doc

Lucrul în mediul Excel 1.1. Componentele ferestrei Excel CAPITOLUL 1 LUCRUL ÎN MEDIUL EXCEL Fereastra Excel figura are numeroase elemente comune

Capitolul

Paradigme de Programare

ORDIN nr. 13 din 21 februarie 2008 pentru aprobarea Normei sanitare veterinare privind cerin ele minime pentru înregistrarea de informa ii cu ocazia i

Nr: 52 Data: RAfORT RE ivmrjlre Privind: BUNURI MOBILE Beneficiar!: S.C. SHOW ACT S.R.L. din Drobeta Tr Severin Executant: Evaluator autori

E_d_Informatica_sp_SN_2014_bar_10_LRO

Notiuni de algebra booleana

Microsoft Word - Secretul motivarii celorlalti -raport special GRATUIT.doc

Paradigme de programare

Microsoft Word - Carte_APDSV_v8

PROCEDURA PRIVIND ORGANIZAREA {I DESF {URAREA ADUN RILOR GENERALE ALE AC}IONARILOR SOCIET }II AEROSTAR SA Aprobat\ `n [edin]a Consiliului de Administr

Slide 1

Analiză statică Analiza fluxului de date 23 octombrie 2014

Microsoft Word - ETS_78A_romanian.doc

Adresarea memoriei Modurile de adresare constituie un instrument principal pentru reprezentarea în memorie a imaginii datelor, aşa cum este ace

TABEL CONTRIBUTII A3-2

Microsoft Word - Lab1a.doc

CERCURI REMARCABILE ASOCIATE UNUI TRIUNGHI CERCURI EXÎNSCRISE Natura vorbeşte în limbajul matematicii: literele acestei limbi sunt cercuri, tri

Microsoft Word - Declaratii avere si interese_2015

Colec ia MATE EDITURA PARALELA 45 Matematic. Clasa a VI-a 1

Vânz`tor:... Telefon:... Fax:... Cod ofert`: Nr. verificare 422:... Orange România Date semnificative Client existent: Nu Da Nr. Orange existent

Sisteme de m`surare Sisteme de m`surare Transpointer PX 10 Aplica]ii n Determin` punctul de ie[ire al unui burghiu sau transfer` punctul de început al

Laborator 5 - Paradigme de Programare

{ 3x + 3, x < 1 Exemple. 1) Fie f : R R, f(x) = 2x + 4, x 1. Funcţia f este derivabilă pe R\{1} (compunere de funcţii elementare), deci rămâne să stud

Minicurs CCS C / Aplicatia1 1.Programul CCS C Compiler. Instalare.Creare proiect. Descarcati ultima versiune a programului de

Prelegerea 4 În această prelegere vom învăţa despre: Algebre booleene; Funcţii booleene; Mintermi şi cuburi n - dimensionale. 4.1 Definirea algebrelor

Microsoft Word - ETS no.185, Romanian translation, official version.doc

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Logică și structuri discrete Mulțimi Casandra Holotescu

ExamView Pro - Untitled.tst

PPSD

Programarea calculatoarelor. Note de curs Marius Minea 1 Introducere în programarea în C 1.1 Funcţii în limbajul C Calcule şi funcţii La origine, rolu

Limbaje de ordinul I LOGICA DE ORDINUL I Un limbaj L de ordinul I este format din: o mulţime numărabilă V = {v n n N} de variabile; conectorii şi ; pa

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

Laborator 3

Analiză de flux de date 29 octombrie 2012

Declararea variabilelor

Limbaje Formale, Automate si Compilatoare

LOGICA MATEMATICA SI COMPUTATIONALA Sem. I,

Microsoft Word Curs PE - Gaze naturale.doc

UNITATEA ADMINISTRATIV TERITORIAL ORA{UL PUCIOASA Str. Fântânelor, Nr. 7, ora[ul Pucioasa, jude]ul Dâmbovi]a Telefon: 0245/ , Fax: 0245/

decizia 34 din 21 martie 2006

I

Legea_jertfei_de_mancare

COMENTARII FAZA JUDEŢEANĂ, 9 MARTIE 2013 Abstract. Personal comments on some of the problems presented at the District Round of the National Mathemati

MINISTERUL EDUCAŢIEI, CULTURII ŞI CERCETĂRII AL REPUBLICII MOLDOVA I.P. CENTRUL DE EXCELENŢĂ ÎN ENERGETICĂ ŞI ELECTRONICĂ REGULAMENTUL PRIVIND ORGANIZ

Logică și structuri discrete Logică propozițională Marius Minea marius/curs/lsd/ 3 noiembrie 2014

Slide 1

ORDIN ADMINISTRATIE PUBLICA 4829/2018 Emitent: Ministerul Educatiei si Cercetarii Domenii: Can't open file: 'legaturi.myd'. (errno: 145) Vigoare M.O.

2

GHERCĂ MAGDA CASA CORPULUI DIDACTIC BRĂILA PORTOFOLIU EVALUARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A Neamț SERIA 1 GRUPA 1 CURSANT: GHERCĂ G

Cuantizare Vectoriala.doc

Microsoft Word - CarteC.doc

MINISTERUL EDUCAŢIEI, CULTURII ŞI CERCETĂRII AL REPUBLICII MOLDOVA COORDONAT: 2017 Nr. de înregistrare a planului de învăţământ UNIVERSITATEA DE STAT

Raport tehnic şi ştiinţific final privind implementarea proiectului PN-III-P2-2.1-PED Acronim: ForVer Răzvan Diaconescu Decembrie Rez

Microsoft Word - cvAcuDumitru.doc

Dorel LUCHIAN Gabriel POPA Adrian ZANOSCHI Gheorghe IUREA algebră geometrie clasa a VIII-a ediţia a V-a, revizuită mate 2000 standard EDITURA PARALELA

View PDF

PROGRAMARE ORIENTATA PE OBIECTE

82 Materiale oficiale Acte normative noi Новые нормативные документы ORDIN cu privire la aprobarea =i punerea ]n aplicare a Standardului Na\ional de C

E_d_Informatica_sp_MI_2015_bar_02_LRO

untitled

Învăţământ preuniversitar

Microsoft Word - HG CO

Slide 1

15. Logică matematică cu aplicații în informatică - MI 3

ROMÂNIA MINISTERUL EDUCAŢIEI NAȚIONALE Domeniul fundamental: Matematică și știinţe ale naturii Domeniul de licenţă: Informatică Ciclu de studii: 1 Pro

PLAN DE ÎNVĂŢĂMÂNT

Microsoft PowerPoint - 11_USO_curs_08.ppt [Compatibility Mode]

Microsoft Word - Matematika_kozep_irasbeli_javitasi_0911_roman.doc

MergedFile

Microsoft Word - Pag Web 34.doc

PLANIFICAREA EXAMENELOR DIN SESIUNEA 19

Denumire pachet training Categorie licee Avantajele programului Metode interactive utilizate Pachet II.3 - Mecatronica Licee cu clase profil de Mecatr

Microsoft Word - 2 ES RO.doc

ECONOMIE SI ADMINISTRAREA AFACERILOR DREPT CHIMIE BIOLOGIE ANEXA I Studii universitare de licenta 2011 Nr. crt. Facultatea Domeniul Specilizarea Condi

D.Rusu, Teoria măsurii şi integrala Lebesgue 6 MĂSURA LEBESGUE Cursul 5 Teorema 6.26 Există submulţimi ale lui R care nu sunt măsurabile Lebesgue. Dem

MergedFile

Curs 10 Aplicaţii ale calculului diferenţial. Puncte de extrem 10.1 Diferenţiale de ordin superior S¼a trecem acum la de nirea diferenţialelor de ordi

Информационная система персонализации, печати и учета документов об образовании

U.T.Cluj-Napoca, C.U.N. Baia Mare Facultatea: Inginerie PLAN de INVĂŢĂMÂNT Domeniul: Calculatoare şi Tehnologia Informaţiei anul univ Progr

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

coperta

Curs7

CONSTIENT Marius Chirila

Concurs online de informatică Categoria PROGRAMARE Secţiunea 5-6 avansaţi PROBLEMA puncte DANS De 1 Iunie - Ziua Copilului se organizează un spe

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Hyun Bin – descoperirea de sine

BOILERE ELECTRICE AQUA-THERMO SM~L UITE CU VOLUM DE 10, 15, 30, 50, 80, 100, 120, 150, 200 LITRI ATEN IE!: Citi\i cu aten\ie acest manual [nainte de a

Regulament GRANTURI 2016_nou

Tarife [i servicii PrePay Informa]ii generale Cartela SIM PrePay Cu Orange PrePay tu de]ii controlul. Nu ai abonament sau factur` de pl`tit. Po]i s` a

Limbaje de Programare Curs 6 – Functii de intrare-iesire

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

Transcriere:

C8 Un asamblor `ntr-o coaj\ de nuc\ Despre: Felul cum putem folosi `mpreun\ dou\ instrumente puternice; no]iunea de functor din teoria categoriilor [i limbajul Haskell 98 pentru a proiecta [i implementa `n scurt timp un assamblor adaptabil, [i universal, `n sensul c\ prin modificarea morfismului care indic\ transformarea mnemonicilor `n coduri rezult\ imediat asamblorul altui limbaj. Este greu de argumentat un r\spuns la `ntrebarea ce este un asamblor. Defini]ia clasic\ afirm\ c\ el este compilatorul unui limbaj de asamblare. Deoarece [irul de numere produs de asamblor este format din coduri ma[in\, asamblorul este un compilator, `n virtutea ideii c\ produc cod doar compilatoarele. Totu[i unele p\r]i ale unui asamblor sunt de natur\ interpretativ\, de exemplu interpretorul care calculeaz\ valoarea expresiilor constante din limbajul de asamblare [i plaseaz\ constantele rezultate `n cod. (De regul\, aceast\ evaluare a expresiilor nu se face gener=nd cod pentru ele [i execut=ndu-l!). Dac\ `ns\ consider\m textul `n limbaj de asamblare ca pe o gigantic\ expresie cu valori `n mul]imea listelor de coduri, atunci putem construi un evaluator pentru semantica acestor Dan Popa 1 7.feb.2006

expresii! Acesta va fi pe de o parte un interpretor de expresii iar pe de alt\ parte asamblorul limbajului, adic\ un program produc\tor de cod, deci aparent un compilator. Aceast\ afirma]ie nu este o noutate absolut\, mai exist=nd `n literatura de specialitate lucr\ri `n care compilarea (dar acolo este unui limbaj de nivel `nalt) este v\zut\ ca o evaluare (mai exact o evaluare par]ial\) a unei semantici bazate pe un functor. (Harrison, L. William; Kamin, N. Samuel; Compilation as Partial Evaluation of Functor Category Semantics, 1997). ~n paragrafele care urmeaz\ ne vom ocupa de construc]ia unui asamblor adaptabil, folosind tot un functor. Adaptabilitatea se va ob]ine prin separarea informa]iilor despre compilarea instruc]iunilor cu diverse mnemonici de restul programului. Ele vor descrie doar un morfism. Un functor transform\ acest morfism `ntr-un asamblor. Morfismul se poate imediat redefini f\r\ a mai face alte modific\ri `n program [i de aici rezult\ adaptabilitatea. C=teva defini]ii sunt prezentate `n continuare. Fundamente O defini]e a no]iunii de categorie poate fi g\sit\ `n volumul semnat de Barr Michael [i Wells Charles, Toposes, Triples and Theories, (McGill University, 2002), la p.1-11: O categorie C const\ `n dou\ colec]ii, Ob(C) a c\rei elemente sunt numite obiectele din C [i Ar(C) s\ge]ile sau morfismele categoriei C. Fiec\rei s\ge]i `i sunt asociate dou\ obiecte numite respectiv sursa (domeniul) [i destina]ia (codomeniul, `n limba englez\ termenul Dan Popa 2 7.feb.2006

target `nseamn\ ]int\) s\ge]ii. Morfismul cu sursa (originea) A [i destina]ia B se noteaz\ cu f : A ->B. Dac\ f : A ->B [i g : B->C sunt dou\ morfisme atunci exist\ `n categoria C un al treilea morfism g o f : A ->C numit compunerea lui g cu f. Aceast\ compunere nu mai este precizat\ prin nimic altceva. Ea se noteaz\ g f `n loc de g o f atunci c=nd nu exist\ pericol de confuzie. Pentru fiecare obiect A din categoria C exist\ un morfism asociat lui, notat id A (uneori notat 1 A sau pur [i simplu 1 `n func]ie de context), numit identitatea (sau morfismul identitate) al obiectului A. id A : A -> A are asociat\ perechea de obiecte, surs\ [i destina]ie (A,A). Aceste obiecte [i morfisme se conformeaz\ urm\toarelor axiome: 1. Pentru orice f : A ->B, f o id A = id B o f = f 2. Pentru orice f : A -> B, g : B -> C, h : C ->D, h o (g o f ) = (h o g) o f Deci o categorie const\ `n dou\ colec]ii, una de obiecte [i una de s\ge]i care verific\ o serie de axiome. ~n aceea[i carte, la pagina 11 g\sim defini]ia no]iunii de functor. Ca [i pentru alte feluri de obiecte matematice av=nd o structuur\ [i pentru categorii se define[te o no]iune analoag\ celei de morfism. Este natural s\ se defineasc\ un fel de morfism `ntre categorii care s\ duc\ obiectele `n obiecte, s\ge]ile `n s\ge]i [i s\ p\streze sursa, destina]ia, compozi]ia [i identit\]ile (duce sursa `n surs\, destina]ia `n destina]ie, [i fiecare morfism-identitate `n alt morfism-identitate.) El se nume[te functor. Dan Popa 3 7.feb.2006

Dac\ C [i D sunt dou\ categorii, un functor F : C ->D, este o aplica]ie care verific\: 1. Dac\ f : A -> B este un morfism din categoria C, atunci Ff : FA -> FB este un morfism `n categoria D; 2. F(id A ) = id FA [i 3. Dac\ g : B -> C, atunci F(g o f) = Fg o Ff. Un exemplu Exemplul urm\tor, care apare `n multe c\r]i de specialitate, este reprodus dup\ lucrarea semnat\ de Andrea Schalk, intitulat\ Some notes on monads. Exemplul 1: Fie M : Set -> Set un functor care duce fiecare mul]ime (alfabet) A `n mul]imea cuvintelor (A*) care se pot forma peste alfabetul A [i a c\rui ac]iune asupra morfismelor este c\ pentru fiecare f : A -> B din Set avem Mf : MA -> MB dat de: Mf(a 1.. a n ) = f(a 1 ).. f(a n ) Functorul serve[te `n continuare la construirea asamblorului adaptabil. Programul va fi scris tot `n Haskell 98, versiunea revizuit\ din 2003. Sursa unui asamblor, scris `n 8 linii de cod Ca prim exemplu prezent\m un mic asamblor pentru un limbaj de asamblare minuscul format din dou\ mnemonici, NOP [i RET cu codurile 0 [i respectiv 201. -- Un mic asamblor adaptabil scris in Haskell 98, -- Dan Popa, 2005 Dan Popa 4 7.feb.2006

data Instr = Nop Ret -- Arrow f :: Instr -> [Int] f Nop = [ 0 ] f Ret = [ 201 ] f _ = [] -- Functor m :: (Instr -> [Int]) -> [Instr] -> [Int] m f [] = [] m f (a1:l) = f a1 ++ m f l -- Assembler assemble :: [Instr] -> [Int] assemble x = m f x Observa]ie: Fiecare element din tipul Instr poate produce, teoretic, o list\ de oric=te coduri ma[in\. Implementarea [i testarea Interpretorul Hugs 98, al limbajului Haskell 98, a fost fost folosit pentru a rula programul de mai sus. (GHC 6.2, sau 6.4 Glasgow Haskell Compiler este de asemenea de luat `n considerare.) Sistemul de operare a fost un Mandrake Linux 8.2 (actualmente Mandriva), una din pu]inele distribu]ii care, `n varianta de download, cuprinde [i interpretorul Haskell 98 pe nume Hugs. Rezultatele test\rii asamblorului pot fi v\zute `n imaginea urm\toare: Dan Popa 5 7.feb.2006

Adaptarea asamblorului Scopul urm\tor de `ndeplinit este adaptarea asamblorului precedent la un alt limbaj, cu instruc]iuni mai complexe. Limbajul ales ca exemplu este cel descris `n capitolul 4 al volumului profesorului P.D. Terry, Compilers and Compiler Generators. Pentru construirea asamblorului este suficient s\ preciz\m s\geata care duce mnemonicele `n liste de coduri [i s\-i aplic\m acela[i functor pentru a ob]ine asamblorul. Noul program este: -- Dan Popa 22.iunie.2005 -- Instructions -- Instructiunile de asamblat data Instr =NOP CLA CLC CLX CMC INC DEC INX DEX TAX INI INH INB INA OTI OTC OTH OTB OTA PSH POP SHL SHR RET HLT LDA Int LDX Int LDI Int LSP Int LSI Int STA Int STX Int ADD Int ADX Int ADI Int ADC Int ACX Int ACI Int SUB Int SBX Int SBI Int SBC Int SCX Int SCI Int CMP Int CPX Int CPI Int ANA Int ANX Int ANI Int ORA Int ORX Int ORI Int BRN Int BZE Int BNZ Int BPZ Int BNG Int BCC Int BCS Int JSR Int -- Arrow f -- Morfismul de asamblare a fiecarei instructiuni -- The semantics -- el ne da semantica de generare a codului f :: Instr -> [Int] f NOP = [ 00] f CLA = [ 01] f CLC = [ 02] f CLX = [ 03] f CMC = [ 04] f INC = [ 05] f DEC = [ 06] f INX = [ 07] f DEX = [ 08] Dan Popa 6 7.feb.2006

f TAX = [ 09] f INI = [ 10] f INH = [ 11] f INB = [ 12] f INA = [ 13] f OTI = [ 14] f OTC = [ 15] f OTH = [ 16] f OTB = [ 17] f OTA = [ 18] f PSH = [ 19] f POP = [ 20] f SHL = [ 21] f SHR = [ 22] f RET = [ 23] f HLT = [ 24] -- Double byte instr.- Instructiuni pe 2 bytes f ( LDA b ) = [ 25, b ] f ( LDX b ) = [ 26, b ] f ( LDI b ) = [ 27, b ] f ( LSP b ) = [ 28, b ] f ( LSI b ) = [ 29, b ] f ( STA b ) = [ 30, b ] f ( STX b ) = [ 31, b ] f ( ADD b ) = [ 32, b ] f ( ADX b ) = [ 33, b ] f ( ADI b ) = [ 34, b ] f ( ADC b ) = [ 35, b ] f ( ACX b ) = [ 36, b ] f ( ACI b ) = [ 37, b ] f ( SUB b ) = [ 38, b ] f ( SBX b ) = [ 39, b ] f ( SBI b ) = [ 40, b ] f ( SBC b ) = [ 41, b ] f ( SCX b ) = [ 42, b ] f ( SCI b ) = [ 43, b ] f ( CMP b ) = [ 44, b ] f ( CPX b ) = [ 45, b ] Dan Popa 7 7.feb.2006

f ( CPI b ) = [ 46, b ] f ( ANA b ) = [ 47, b ] f ( ANX b ) = [ 48, b ] f ( ANI b ) = [ 49, b ] f ( ORA b ) = [ 50, b ] f ( ORX b ) = [ 51, b ] f ( ORI b ) = [ 52, b ] f ( BRN b ) = [ 53, b ] f ( BZE b ) = [ 54, b ] f ( BNZ b ) = [ 55, b ] f ( BPZ b ) = [ 56, b ] f ( BNG b ) = [ 57, b ] f ( BCC b ) = [ 58, b ] f ( BCS b ) = [ 59, b ] f ( JSR b ) = [ 60, b ] f _ = [] -- Functorul M -- functor M -- l inseamna lista elementelor a2...an m :: (Instr -> [Int]) -> [Instr] -> [Int] m f [] = [] m f (a1:l) = f a1 ++ m f l -- Asamblorul final rezultat din m si f -- The final assembler assemble :: [Instr] -> [Int] assemble x = m f x Remarc\: a[a cum se observ\ citind sursa programului, tot ce am avut de f\cut a fost s\ scriem noile mnemonici [i noile liste de coduri ma[in\. Functorul r\m=ne neschimbat. Iar el transform\ [i de aceast\ dat\ s\geata codific\rii mnemonicilor `n asamblor. Testarea noului asamblor Am folosit exemplul 4.3 din aceea[i carte deoarece `n acela[i capitol Dan Popa 8 7.feb.2006

exist\ [i sursa [i codul produs prin asamblare din el. Sursa: INI SHR BCC 13 STA 19 LDA 20 INC STA 20 LDA 19 BNZ 1 LDA 20 OTI HLT Conform autorului, prof. Terry, trebuie s\ rezulte prin asamblare secven]a de coduri: 10 22 58 13 30 19 25 20 5 30 20 25 19 55 1 25 20 14 24 Iar traducerea reu[e[te,a[a cum se vede din imagine: Avantaj: Nu este deci nevoie s\ schimb\m `ntregul asamblor ci doar mnemonicele. Timpul de adaptare a unui asemenea asamblor este extrem de scurt. Cele dou\ exemple de mai sus s-au `ncadrat `mpreun\ `ntr-un timp de realizare mai mic de o or\. Dan Popa 9 7.feb.2006