Interface GenericAssembler<RP extends AssemblyResolvedPatterns>
- All Known Subinterfaces:
Assembler
- All Known Implementing Classes:
AbstractSleighAssembler
,SleighAssembler
-
Method Summary
Modifier and TypeMethodDescriptionAssemble a sequence of instructions and place them at the given address.byte[]
assembleLine
(Address at, String line) Assemble a line instruction at the given address.byte[]
assembleLine
(Address at, String line, AssemblyPatternBlock ctx) Assemble a line instruction at the given address, assuming the given context.getContextAt
(Address addr) Get the context at a given addressGet the language of this assemblerIf the assembler is bound to a program, get that programParse a line instruction.patchProgram
(byte[] insbytes, Address at) Place instruction bytes into the bound program.patchProgram
(AssemblyResolvedPatterns res, Address at) Place a resolved (and fully-masked) instruction into the bound program.resolveLine
(Address at, String line) Assemble a line instruction at the given address.resolveLine
(Address at, String line, AssemblyPatternBlock ctx) Assemble a line instruction at the given address, assuming the given context.resolveTree
(AssemblyParseResult parse, Address at) Resolve a given parse tree at the given address.resolveTree
(AssemblyParseResult parse, Address at, AssemblyPatternBlock ctx) Resolve a given parse tree at the given address, assuming the given context
-
Method Details
-
getLanguage
Language getLanguage()Get the language of this assembler- Returns:
- the processor language
-
getProgram
Program getProgram()If the assembler is bound to a program, get that program- Returns:
- the program, or null
-
assemble
InstructionIterator assemble(Address at, String... listing) throws AssemblySyntaxException, AssemblySemanticException, MemoryAccessException, AddressOverflowException Assemble a sequence of instructions and place them at the given address.This method is only valid if the assembler is bound to a program. An instance may optionally implement this method without a program binding. In that case, the returned iterator will refer to pseudo instructions.
NOTE: There must be an active transaction on the bound program for this method to succeed.
- Parameters:
at
- the location where the resulting instructions should be placedlisting
- a new-line separated or array sequence of instructions- Returns:
- an iterator over the resulting instructions
- Throws:
AssemblySyntaxException
- a textual instruction is non well-formedAssemblySemanticException
- a well-formed instruction cannot be assembledMemoryAccessException
- there is an issue writing the result to program memoryAddressOverflowException
- the resulting block is beyond the valid address range
-
assembleLine
byte[] assembleLine(Address at, String line) throws AssemblySyntaxException, AssemblySemanticException Assemble a line instruction at the given address.This method is valid with or without a bound program. Even if bound, the program is not modified; however, the appropriate context information is taken from the bound program. Without a program, the language's default context is taken at the given location.
- Parameters:
at
- the location of the start of the instructionline
- the textual assembly code- Returns:
- the binary machine code, suitable for placement at the given address
- Throws:
AssemblySyntaxException
- the textual instruction is not well-formedAssemblySemanticException
- the the well-formed instruction cannot be assembled
-
assembleLine
byte[] assembleLine(Address at, String line, AssemblyPatternBlock ctx) throws AssemblySemanticException, AssemblySyntaxException Assemble a line instruction at the given address, assuming the given context.This method works like
assembleLine(Address, String)
except that it allows you to override the assumed context at that location.- Parameters:
at
- the location of the start of the instructionline
- the textual assembly codectx
- the context register value at the start of the instruction- Returns:
- the results of semantic resolution (from all parse results)
- Throws:
AssemblySyntaxException
- the textual instruction is not well-formedAssemblySemanticException
- the well-formed instruction cannot be assembled
-
parseLine
Parse a line instruction.Generally, you should just use
assembleLine(Address, String)
, but if you'd like access to the parse trees outside of anAssemblySelector
, then this may be an acceptable option. Most notably, this is an excellent way to obtain suggestions for auto-completion.Each item in the returned collection is either a complete parse tree, or a syntax error Because all parse paths are attempted, it's possible to get many mixed results. For example, The input line may be a valid instruction; however, there may be suggestions to continue the line toward another valid instruction.
- Parameters:
line
- the line (or partial line) to parse- Returns:
- the results of parsing
-
resolveTree
AssemblyResolutionResults resolveTree(AssemblyParseResult parse, Address at, AssemblyPatternBlock ctx) Resolve a given parse tree at the given address, assuming the given contextEach item in the returned collection is either a completely resolved instruction, or a semantic error. Because all resolutions are attempted, it's possible to get many mixed results.
NOTE: The resolved instructions are given as masks and values. Where the mask does not cover, you can choose any value.
- Parameters:
parse
- a parse result giving a valid treeat
- the location of the start of the instructionctx
- the context register value at the start of the instruction- Returns:
- the results of semantic resolution
-
resolveTree
Resolve a given parse tree at the given address.Each item in the returned collection is either a completely resolved instruction, or a semantic error. Because all resolutions are attempted, it's possible to get many mixed results.
NOTE: The resolved instructions are given as masks and values. Where the mask does not cover, you can choose any value.
- Parameters:
parse
- a parse result giving a valid treeat
- the location of the start of the instruction- Returns:
- the results of semantic resolution
-
resolveLine
Assemble a line instruction at the given address.This method works like
resolveLine(Address, String, AssemblyPatternBlock)
, except that it derives the context usinggetContextAt(Address)
.- Parameters:
at
- the location of the start of the instructionline
- the textual assembly code- Returns:
- the collection of semantic resolution results
- Throws:
AssemblySyntaxException
- the textual instruction is not well-formed
-
resolveLine
AssemblyResolutionResults resolveLine(Address at, String line, AssemblyPatternBlock ctx) throws AssemblySyntaxException Assemble a line instruction at the given address, assuming the given context.This method works like
assembleLine(Address, String, AssemblyPatternBlock)
, except that it returns all possible resolutions for the parse trees that pass theAssemblySelector
.- Parameters:
at
- the location of the start of the instructionline
- the textual assembly codectx
- the context register value at the start of the instruction- Returns:
- the collection of semantic resolution results
- Throws:
AssemblySyntaxException
- the textual instruction is not well-formed
-
patchProgram
Place a resolved (and fully-masked) instruction into the bound program.This method is not valid without a program binding. Also, this method must be called during a program database transaction.
- Parameters:
res
- the resolved and fully-masked instructionat
- the location of the start of the instruction- Returns:
- the new
Instruction
code unit - Throws:
MemoryAccessException
- there is an issue writing the result to program memory
-
patchProgram
Place instruction bytes into the bound program.This method is not valid without a program binding. Also, this method must be called during a program database transaction.
- Parameters:
insbytes
- the instruction dataat
- the location of the start of the instruction- Returns:
- an iterator over the disassembled instructions
- Throws:
MemoryAccessException
- there is an issue writing the result to program memory
-
getContextAt
Get the context at a given addressIf there is a program binding, this will extract the actual context at the given address. Otherwise, it will obtain the default context at the given address for the language.
- Parameters:
addr
- the address- Returns:
- the context
-