1 / 13

Ассемблер для MDSP

Ассемблер для MDSP. Александр Поташев ноябрь, 2009 г. Цели и задачи. Создание ассемблера для микропроцессора MDSP: на входе – исходный код на ассемблере на выходе – образ программной памяти МП Синтаксис в стиле AT&T Использование по возможности общего с funcsim исходного кода. План.

luigi
Download Presentation

Ассемблер для MDSP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Ассемблер для MDSP Александр Поташев ноябрь, 2009 г.

  2. Цели и задачи Создание ассемблера для микропроцессора MDSP: на входе – исходный код на ассемблере на выходе – образ программной памяти МП Синтаксис в стиле AT&T Использование по возможности общего с funcsim исходного кода

  3. План Общий алгоритм работы Лексический анализатор Семантический анализатор Структура кода class Token class SemanticUnit class Operand class TokenAn class SemanticAn class Assembler

  4. Лексический анализатор (class TokenAn) label: brm%r0,(%r1) ld$100,%r0 label : EOS brm %r0 , ( %r1 ) EOS ld 100 , %r0 EOS jmp label Tokens

  5. Семантический анализатор (class SemanticAn) label: label : EOS brm %r0 , ( %r1 ) EOS brm %r0 m(%r1) ld 100 , %r0 EOS ld 100 %r0 SemanticUnits

  6. classToken переменные класса tokenType std::string sVal int iVal type() str() integer() getter getter getter TOKEN_ID TOKEN_CONST_INT createId(string id_string) TOKEN_COLON TOKEN_COMMA createConstInt(int iVal) TOKEN_LBRACKET createScalar(tokenType) TOKEN_RBRACKET TOKEN_EOS createEos() методы значения

  7. classSemanticUnit unitType std::string sVal vector<Operand *> operands type() str() nOperands() operator[] UNIT_LABEL UNIT_OPERATION createLabel(string id_string) createOperation(string opcode, operands) bool operator== (string str) Нет привязки к контексту

  8. classOperand type std::string sVal int iVal str() integer() OPERAND_GPR OPERAND_CUSTOM_ID OPERAND_CONST_INT isConstInt() createConstInt(int iVal) createId(string id_string) createIdInd(string id_string) indirect false isDirectGpr() %r0 true isIndirectGpr() (%r0)

  9. classTokenAn TokenAn(const char *filename) char *data readFileContents(const char *filename) long filelength initFileLength(const char *filename) char *ptr vector<Token *> run() skipSpaces()

  10. classSemanticAn vector<Token *> tokens SemanticAn(vector<Token *> tokens) vector<Token *>::iterator tok vector<SemanticUnit *> run() vector<Operand *> parseOperandList() Operand *parseOperand() isOpcode(string s)

  11. classAssembler vector<SemanticUnit *> units Assembler(vector<SemanticUnit *> units) map<unsigned int, hostUInt8> run() ByteLine *encodeOperation(SemanticUnit *op, pc) int getGprNum(string id) classOperation funcsim set(...) encode()

  12. Результаты Реализованы команды пересылки данных Для генерации образа памяти используется код funcsim исходный код образ памяти brm%r0, (%r1) brm(%r0),%r1 brr%r0,%r1 ld$100, %r0 ld$100, (%r0) 24 00 00 01 24 20 00 01 2C 00 00 01 38 00 0C 80 38 00 0C 80

  13. Спасибо за внимание!

More Related