Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 10 лет назад пользователемДмитрий Свиридов
1 Ассемблер для MDSP Александр Поташев ноябрь, 2009 г.
2 Цели и задачи Создание ассемблера для микропроцессора MDSP: на входе – исходный код на ассемблере на выходе – образ программной памяти МП Синтаксис в стиле AT&T Использование по возможности общего с funcsim исходного кода
3 План Общий алгоритм работы Лексический анализатор Семантический анализатор Структура кода class Token class SemanticUnit class Operand class TokenAn class SemanticAn class Assembler
4 label: brm %r0, (%r1) ld $100, %r0 label:EOS brm jmp label %r 0,( %r 1 ) ld100, %r 0 EOS Token s Лексический анализатор (class TokenAn)
5 label:EOS brm %r 0,( %r 1 ) ld100, %r 0 EOS label: %r0 m(%r1 ) 100%r0 brm ld SemanticUnits Семантический анализатор (class SemanticAn)
6 class Token int iValstd::string sValtokenType TOKEN_ID TOKEN_CONST_IN T TOKEN_EOS TOKEN_COMMA TOKEN_LBRACKET TOKEN_RBRACKET TOKEN_COLON createId(string id_string) createConstInt(int iVal) createScalar(tokenType) createEos() type()str()integer() переменные класса метод ы значени я getter
7 class SemanticUnit std::string sValunitType UNIT_LABEL UNIT_OPERATION createLabel(string id_string) createOperation(string opcode, operands) bool operator== (string str) type()str() Нет привязки к контексту vector operands nOperands( ) operator[]
8 class Operand type OPERAND_GPR OPERAND_CONST_IN T isDirectGpr() OPERAND_CUSTOM_I D createConstInt(int iVal) std::string sValint iVal str()integer() createId(string id_string) createIdInd(string id_string) isIndirectGpr() isConstInt() indirect false true %r0 (%r0)
9 class TokenAn skipSpaces() long filelength char *data char *ptr TokenAn(const char *filename) readFileContents(const char *filename) initFileLength(const char *filename) vector run()
10 class SemanticAn Operand *parseOperand() vector tokens vector ::iterator tok SemanticAn(vector tokens) isOpcode(string s) vector run() vector parseOperandList()
11 class Assembler int getGprNum(string id) vector units Assembler(vector units) map run() ByteLine *encodeOperation(SemanticUnit *op, pc) class Operation funcsi m set(...) encode()
12 Результаты C C 80 brm %r0, (%r1) brm (%r0), %r1 brr %r0, %r1 ld $100, %r0 ld $100, (%r0) исходный кодобраз памяти Реализованы команды пересылки данных Для генерации образа памяти используется код funcsim
13 Спасибо за внимание!
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.