My dream CPU |
|
VIII. Структура на програмата
Една програма за RCPU представлява един XML файл със следните тагове: <program> <initCPU> <IP value="100"/> <SP value="1023"/> <memory value="2"/> </initCPU> <info>Type the program description here.</info> <prgcode> </prgcode> <data startadr="0"/> </program> Тагът initCPU.Със стойността на value атрибута на IP тага на initCPU се зарежда програмният брояч IP. От този адрес ще започне и разполагането на програмата в паметта. Със стойността на value атрибута на SP тага на initCPU се зарежда указателя на стека SP. Със стойността на value атрибута на memory тага на initCPU се определя заеманата от програмата памет в килобайти. Тагът Data.Данновата част е описана в тагът data. Тя съдържа тагове linedt, които съдържат числа които ще бъдат поставени в паметта при зареждането на програмата. Атрибут startadr на тагът data съдържа началният адрес от който ще започнат да се зареждат данните. Направен е за удобство, с промяната му променяме мястото на данните в паметта. Стойността на този таг се добавя към стойността на adr атрибута на linedt таговете които са в data тага. Таговете linedt, които са в таг Data.Ето един примерен linedt таг. <linedt label="arraySize" adr="300" value="39" comment="array size"/> Атрибутът label се използва да се зададе етикет на съответния linedt таг. Този етикет може да се използва от инструкция. При зареждане на програмата този етикет се подменя с реален адрес. Атрибутът adr съдържа адрес на който ще се разположи числото. Към този адрес се добавя стойността на startadr атрибута. Атрибутът value съдържа самото число което ще се постави в паметта. Ако то е без запетая или точка се приема за цяло число. Ако има точка ' . ' се приема за дробно число. Дробните числа се разполагат в 2 последователни адреса. И двете трябва да са изписани с точка ' . '. На първото число се взима само цялата част, на второто число се взима само дробната част. Всичко това е направено за да се извърши четене на 2 последователни адреса, за да се симулира четене на число с плаваща запетая. Всички знаем, че истинският формат на числата с плаваща запетая не е този. Това е полезно да видим разликата в изпълнението и бързодействието на един и същ алгоритъм, когато той работи с цели или дробни числа. Атрибутът comment е коментар. Тагът prgcode
Най съществената част тагът prgcode. Той съдържа самата програма. Тя представлява line тагове. adr - адрес на който ще се зареди тази инструкция. Tp - тип на линията. Приема 2 стойности dt и move. Ако е dt съдържа операнда на инструкцията. Ако е move е самата инструкция. По-горе обясних, че всяка инструкция е преместване на данни. Value - Ако tp= dt тук е операнда на инструкцията, число. Ако tp = move , няма value атрибут. Следните тагове са валидни само за инструкция. Rmr - Самата инструкция, показваща и посока на предаване на данните. Със стойности MR memory – register, RM register-memory, RR register register. Може да приема и стойности push, pop, mrIncX, mrIfMaxX, mrSort, call, ret. Conveyer - За кой конвейер се отнася инструкцията – I, D , A r - регистър rBs - базов регистър. Приема стойности rBs1, rBs2, rBs3, # rX - индексен регистър. Приема стойности rX1, rX2, rX3 condition - условие. label - етикет на линията. Може да се използва при преход към инструкцията. Comment - коментар Как се зарежда една програма в RCPUСлед като се отвори файла, най напред се прочита initCPU частта. От там се взимат стойностите за програмният брояч, стека и размера на програмата. След това се зарежда данновата част, като при зареждането и се взимат етикетите на редовете които имат и се поставят в хеш таблица заедно с адреса. Започва зареждането на самата програма, като първо се обхожда с търсене на редове с етикети, за да се поставят и те в хеш таблицата. Сега вече започва зареждането на самите инструкции, като етикетите се подменят със стойност от заредената преди това хеш таблица. |