Question: Your task Your code should 1 . Load the values in memory at addresses 0 x 0 1 and 0 x 0 3 into registers

Your task
Your code should
1.Load the values in memory at addresses 0x01 and 0x03 into registers
Note: since we have not discussed ways to get other data into our memory yet, we will directly modify your code so that the second (0x01) and fourth (0x03) bytes are the input values. This means your first (0x00) and third (0x02) bytes (instructions) should be very specific operations.
2. Compute the modulo of those values (i.e.,(whats at 0x01) mod (whats at 0x03))
3. Store the product at address 0xD0
4. Halt once it is done
For example, if mod.binary begins __10__06 then when it is finished it should have 04 in address 0xD0; in decimal, that is 16 mod 6, which is 4. If mod.binary begins __7F __0A then when it is finished it should have 07 in address 0xD0; in decimal, that is 127 mod 10, which is 7.
Note: We should be able to change the second and fourth bytes of your program to do other modulo calculations too.
You may assume that neither value will be negative, but either may be zero. If either operand is 0, your code should set the value at 0xD0 to 0x00.
Hints, tips, and suggestions
How to compute modulo
Modulo, a mod n or a % n, is defined as the remainder when dividing a by n. As in our examples above with 16 mod 6,16/6=6*2+4, where the quotient is 2 and the remainder is 4. Therefore, 16 mod 6=4.
Hint: For the division operation, think along the lines of how many times can fit into ? You may wish to consider multiples of
.
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
register load variables memory
original statement
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 mod.binary

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!