Question: Lab 5 - Binary Fibonacci This lab you will write binary code ( using our Toy ISA ) you will run your code on our

Lab 5- Binary Fibonacci
This lab you will write binary code (using our Toy ISA) you will run your code on our online simulator .
The Instructions
The instructions from our machine are below for reference.
icode Behaviors:
icode operation
0
rA = rB
1
rA += rB
2
rA &= rB
3
rA = read from memory at address rB
4
write rA to memory at address rB
5
do different things for different values of b:
b action
0 rA = ~rA
1 rA =-rA
2 rA =!rA
3 rA = pc
6
do different things for different values of b:
b action
0 rA = read from memory at pc +1
1 rA += read from memory at pc +1
2 rA &= read from memory at pc +1
3 rA = read from memory at the address stored at pc +1
In all 4 cases, increase pc by 2, not 1, at the end of this instruction
7
Compare rA (as an 8-bit 2s-complement number) to 0; - if rA <=0, set pc = rB - otherwise, increment pc like normal.
Running programs
You should create two files
One you work with, that has comments and notes to keep you sane. Call this anything you like.
One you run and submit, which contains nothing by hex bytes separated by white space. Youll submit this as a file named fib.binary
To our online simulator and click the file upload button at the top of the page to load your fib.binary into the simulators memory.
Your Task
Create a binary program (i.e., a file containing hex bytes) that runs in this language; name the file fib.binary.
When run in a simulator (../homework/files/toy-isa-sim.html)), fib.binary should change the contents of memory for all addresses i >= C016, placing in address i the i-0xC0th Fibonacci number (modulo 256, since these are bytes).
Once 0xC0 through 0xFF are set, halt by running an instruction with the reserved bit set.
The file fib.binary itself must not contain more than C016(19210) hexadecimal bytes.
It should be the case that running your simulator on fib.binary for many cycles should result in output ending with the following:
0xc0-cf: 0101020305080d 1522375990 e97962 db
0xd0-df: 3d 18556d c22f f12011314273 b528 dd 05
0xe0-ef: e2 e7 c9 b07929 a2 cb 6d 38 a5 dd 825f e140
0xf0-ff: 216182 e36548 ad f5 a29739 d009 d9 e2 bb
Your code should not change the byte stored in address 0x00 during its run. Your code must finish within 2048 clock cycles.
Hints, tips, and suggestions
How to compute Fibonacci numbers
Keep track of two numbers, current and previous. Start them both off at 1.
Let next be the sum of current and previous.
Rename current -> previous, next -> current (in that order)
Repeat
You definitely want to make sure you can write working code for this in some language you know well before trying to convert that code into binary.
How to write binary
We suggest following these steps, carefully, saving the result of each in a file so you can go back and fix them if they were wrong:
Write pseudocode that does the desired task
Convert any for loops to while loops with explicit counters
Change any if or while guards to the form something <=0
a <= b becomes a-b <=0
a < b becomes a+1<= b becomes a+1-b <=0
a >= b becomes 0>= b-a becomes b-a <=0
a > b becomes 0> b-a becomes b+1-a <=0
a == b becomes a-b ==0 becomes !(a-b)==1 becomes !!(a-b)<=0
a != b becomes a-b !=0 becomes !(a-b)==0 becomes !(a-b)<=0
Add more variables to split multi-operation lines into a series of single-operation lines
Add more operations to convert ones not in the instruction set into ones in the instruction set
Change each loop into a pair of instructions, opening with spot1= pc and closing with if ..., goto spot1
Count the number of variables needed
If1 it is <=4, skip to step 10
else2, continue with next step
Pick a memory address for each variable. Make these big enough your code is unlikely to get that big; for example, you might pick 0x80 though 0x80+ number of variables
Convert each statement that uses variables into a. register load variables memory b. original statement c. store variables memory register
translate each instruction into numeric (icode, a, b) triples, possibly followed by a M[pc+1] immediate value
turn (icode, a, b) into hex
Write all the hex into fib.binary
Debugging binary is hard. Thats part of why we dont generally write code in binary. If you get stuck, you should probably try pulling just the part you are stuck on separate from the rest and test it until it works, then put it back in the main solution. Please know that your TAs are here in lab to help as well!
Please show me how to code this my code doesn't work.
My code: 001100130 C0124301201373
Feedback:
0) Check submitted files (0/0)
Missing fib.binary
If you submitted a file named "fib.binary.txt" you may ignore this message,
butfor future labs you will have to rename and resubmit.

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!