Ассемблер для MDSP
Download
1 / 13

Ассемблер для MDSP - PowerPoint PPT Presentation


  • 149 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Ассемблер для MDSP' - luigi


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Ассемблер для MDSP

Александр Поташев

ноябрь, 2009 г.


Цели и задачи

Создание ассемблера для микропроцессора MDSP:

на входе – исходный код на ассемблере

на выходе – образ программной памяти МП

Синтаксис в стиле AT&T

Использование по возможности общего с funcsim исходного кода


План

Общий алгоритм работы

Лексический анализатор

Семантический анализатор

Структура кода

class Token

class SemanticUnit

class Operand

class TokenAn

class SemanticAn

class Assembler


Лексический анализатор

(class TokenAn)

label:

brm%r0,(%r1)

ld$100,%r0

label

:

EOS

brm

%r0

,

(

%r1

)

EOS

ld

100

,

%r0

EOS

jmp label

Tokens


Семантический анализатор

(class SemanticAn)

label:

label

:

EOS

brm

%r0

,

(

%r1

)

EOS

brm

%r0

m(%r1)

ld

100

,

%r0

EOS

ld

100

%r0

SemanticUnits


Class token
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()

методы

значения


Class semanticunit
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)

Нет привязки к контексту


Class operand
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)


Class tokenan
classTokenAn

TokenAn(const char *filename)

char *data

readFileContents(const char *filename)

long filelength

initFileLength(const char *filename)

char *ptr

vector<Token *> run()

skipSpaces()


Class semantican
classSemanticAn

vector<Token *> tokens

SemanticAn(vector<Token *> tokens)

vector<Token *>::iterator tok

vector<SemanticUnit *> run()

vector<Operand *> parseOperandList()

Operand *parseOperand()

isOpcode(string s)


Class assembler
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()


Результаты

Реализованы команды пересылки данных

Для генерации образа памяти используется код 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



ad