mars
Class ProgramStatement

java.lang.Object
  extended by mars.ProgramStatement

public class ProgramStatement
extends Object

Represents one assembly/machine statement. This represents the "bare machine" level. Pseudo-instructions have already been processed at this point and each assembly statement generated by them is one of these.

Author:
Pete Sanderson and Jason Bumgarner

Constructor Summary
ProgramStatement(int binaryStatement, int textAddress)
          Constructor for ProgramStatement used only for writing a binary machine instruction with no source code to refer back to.
ProgramStatement(MIPSprogram sourceMIPSprogram, String source, TokenList origTokenList, TokenList strippedTokenList, Instruction inst, int textAddress, int sourceLine)
          Constructor for ProgramStatement when there are links back to all source and token information.
 
Method Summary
 void buildBasicStatementFromBasicInstruction(ErrorList errors)
          Given specification of BasicInstruction for this operator, build the corresponding assembly statement in basic assembly format (e.g.
 void buildMachineStatementFromBasicStatement(ErrorList errors)
          Given the current statement in Basic Assembly format (see above), build the 32-bit binary machine code statement.
 int getAddress()
          Produces Text Segment address where the binary machine statement is stored.
 String getBasicAssemblyStatement()
          Produces Basic Assembly statement for this MIPS source statement.
 int getBinaryStatement()
          Produces 32-bit binary machine statement as int.
 Instruction getInstruction()
          Produces Instruction object corresponding to this statement's operator.
 String getMachineStatement()
          Produces binary machine statement as 32 character string, all '0' and '1' chars.
 int getOperand(int i)
          Produces operand value from given array position (first operand is position 0).
 int[] getOperands()
          Produces int array of operand values for this statement.
 TokenList getOriginalTokenList()
          Produces token list generated from original source statement.
 String getPrintableBasicAssemblyStatement()
          Produces printable Basic Assembly statement for this MIPS source statement.
 String getSource()
          Produces MIPS source statement.
 String getSourceFile()
          Produces String name of the source file containing this statement.
 int getSourceLine()
          Produces line number of MIPS source statement.
 MIPSprogram getSourceMIPSprogram()
          Produces MIPSprogram object representing the source file containing this statement.
 TokenList getStrippedTokenList()
          Produces token list stripped of all but operator and operand tokens.
 void setBasicAssemblyStatement(String statement)
          Assigns given String to be Basic Assembly statement equivalent to this source line.
 void setBinaryStatement(int binaryCode)
          Assigns given int to be binary machine code equivalent to this source line.
 void setMachineStatement(String statement)
          Assigns given String to be binary machine code (32 characters, all of them 0 or 1) equivalent to this source line.
 void setSource(String src)
          associates MIPS source statement.
 String toString()
          Crude attempt at building String representation of this complex structure.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

ProgramStatement

public ProgramStatement(MIPSprogram sourceMIPSprogram,
                        String source,
                        TokenList origTokenList,
                        TokenList strippedTokenList,
                        Instruction inst,
                        int textAddress,
                        int sourceLine)
Constructor for ProgramStatement when there are links back to all source and token information. These can be used by a debugger later on.

Parameters:
sourceMIPSprogram - The MIPSprogram object that contains this statement
source - The corresponding MIPS source statement.
origTokenList - Complete list of Token objects (includes labels, comments, parentheses, etc)
strippedTokenList - List of Token objects with all but operators and operands removed.
inst - The Instruction object for this statement's operator.
textAddress - The Text Segment address in memory where the binary machine code for this statement is stored.

ProgramStatement

public ProgramStatement(int binaryStatement,
                        int textAddress)
Constructor for ProgramStatement used only for writing a binary machine instruction with no source code to refer back to. Originally supported only NOP instruction (all zeroes), but extended in release 4.4 to support all basic instructions. This was required for the self-modifying code feature.

Parameters:
binaryStatement - The 32-bit machine code.
textAddress - The Text Segment address in memory where the binary machine code for this statement is stored.
Method Detail

buildBasicStatementFromBasicInstruction

public void buildBasicStatementFromBasicInstruction(ErrorList errors)
Given specification of BasicInstruction for this operator, build the corresponding assembly statement in basic assembly format (e.g. substituting register numbers for register names, replacing labels by values).

Parameters:
errors - The list of assembly errors encountered so far. May add to it here.

buildMachineStatementFromBasicStatement

public void buildMachineStatementFromBasicStatement(ErrorList errors)
Given the current statement in Basic Assembly format (see above), build the 32-bit binary machine code statement.

Parameters:
errors - The list of assembly errors encountered so far. May add to it here.

toString

public String toString()
Crude attempt at building String representation of this complex structure.

Overrides:
toString in class Object
Returns:
A String representing the ProgramStatement.

setBasicAssemblyStatement

public void setBasicAssemblyStatement(String statement)
Assigns given String to be Basic Assembly statement equivalent to this source line.

Parameters:
statement - A String containing equivalent Basic Assembly statement.

setMachineStatement

public void setMachineStatement(String statement)
Assigns given String to be binary machine code (32 characters, all of them 0 or 1) equivalent to this source line.

Parameters:
statement - A String containing equivalent machine code.

setBinaryStatement

public void setBinaryStatement(int binaryCode)
Assigns given int to be binary machine code equivalent to this source line.

Parameters:
binaryCode - An int containing equivalent binary machine code.

setSource

public void setSource(String src)
associates MIPS source statement. Used by assembler when generating basic statements during macro expansion of extended statement.

Parameters:
src - a MIPS source statement.

getSourceMIPSprogram

public MIPSprogram getSourceMIPSprogram()
Produces MIPSprogram object representing the source file containing this statement.

Returns:
The MIPSprogram object. May be null...

getSourceFile

public String getSourceFile()
Produces String name of the source file containing this statement.

Returns:
The file name.

getSource

public String getSource()
Produces MIPS source statement.

Returns:
The MIPS source statement.

getSourceLine

public int getSourceLine()
Produces line number of MIPS source statement.

Returns:
The MIPS source statement line number.

getBasicAssemblyStatement

public String getBasicAssemblyStatement()
Produces Basic Assembly statement for this MIPS source statement. All numeric values are in decimal.

Returns:
The Basic Assembly statement.

getPrintableBasicAssemblyStatement

public String getPrintableBasicAssemblyStatement()
Produces printable Basic Assembly statement for this MIPS source statement. This is generated dynamically and any addresses and values will be rendered in hex or decimal depending on the current setting.

Returns:
The Basic Assembly statement.

getMachineStatement

public String getMachineStatement()
Produces binary machine statement as 32 character string, all '0' and '1' chars.

Returns:
The String version of 32-bit binary machine code.

getBinaryStatement

public int getBinaryStatement()
Produces 32-bit binary machine statement as int.

Returns:
The int version of 32-bit binary machine code.

getOriginalTokenList

public TokenList getOriginalTokenList()
Produces token list generated from original source statement.

Returns:
The TokenList of Token objects generated from original source.

getStrippedTokenList

public TokenList getStrippedTokenList()
Produces token list stripped of all but operator and operand tokens.

Returns:
The TokenList of Token objects generated by stripping original list of all except operator and operand tokens.

getInstruction

public Instruction getInstruction()
Produces Instruction object corresponding to this statement's operator.

Returns:
The Instruction that matches the operator used in this statement.

getAddress

public int getAddress()
Produces Text Segment address where the binary machine statement is stored.

Returns:
address in Text Segment of this binary machine statement.

getOperands

public int[] getOperands()
Produces int array of operand values for this statement.

Returns:
int array of operand values (if any) required by this statement's operator.

getOperand

public int getOperand(int i)
Produces operand value from given array position (first operand is position 0).

Parameters:
i - Operand position in array (first operand is position 0).
Returns:
Operand value at given operand array position. If < 0 or >= numOperands, it returns -1.