Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations IamaSherpa on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

MIPS stack calculator

Status
Not open for further replies.

emilios

Programmer
Aug 25, 2002
1
GB
The Unix system has a stack based calc which works the same as the Java prog here:
WHat I need to do is convert this into MIPS using SPIM. I've done the first part of translating the atoi function/inputs/ outputs, but the problems now is that I have no clue of how to use the stack in MIPS, or how to declare arrays (+no experience using MIPS). I'm seriously stuck!
Any help will be highly appreciated.

Here is an example of dc in use.

cspc100% dc
8
42
+
p
50
70
-
p
-20
q
cspc100%

//***************THE JAVA PROG******************
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class PartII {
private static int stackSize = 256;

private static int[] stack = new int[ stackSize ];
private static int sp = stackSize - 1;

public static void main(String[] args) throws IOException {
final InputStreamReader inputStreamReader =
new InputStreamReader(System.in);
final BufferedReader bufferedReader =
new BufferedReader(inputStreamReader);

boolean quit = false;
int t, u;


while (!quit) {
String line = bufferedReader.readLine();

if ('0' <=line.charAt(0) && line.charAt(0) <= '9') {
stack[ sp-- ] = atoi(line);
} else if (line.charAt(0) == '+') {
u = stack[ ++sp ];
t = stack[ ++sp ];
stack[ sp-- ] = t + u;
} else if (line.charAt(0) == '-') {
u = stack[ ++sp ];
t = stack[ ++sp ];
stack[ sp-- ] = t - u;
} else if (line.charAt(0) == '*') {
u = stack[ ++sp ];
t = stack[ ++sp ];
stack[ sp-- ] = t * u;
} else if (line.charAt(0) == '/') {
u = stack[ ++sp ];
t = stack[ ++sp ];
stack[ sp-- ] = t / u;
} else if (line.charAt(0) == 'p') {
System.out.println(stack[ sp + 1 ]);
} else if (line.charAt(0) == 'q') {
quit = true;
}
}
}
private static int atoi(String line){//characters to ASCIIZ
int result = 0;
int i;

for (i = 0; i < line.length(); i++) {
result = result * 10 + (line.charAt(i) -'0');
}

return result;

}
}
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top