Arm/accum1
From ASMBits
Write a function that performs a sequence of calculations (addition, subtraction, multiplication), following instructions encoded in an array of bytes.
This calculator is based on a single 32-bit "accumulator": A 32-bit value that all of the operations will operate on. Set the accumulator to zero at the beginning of your function.
Your function will be passed one parameter: A pointer to the beginning of the byte array. In the byte array, every two bytes encode an instruction. The first byte is a character that indicates which operation to perform ('+', '-', '*', or null), and the second byte is an 8-bit signed operand (Note that the accumulator is 32 bits). Implement the following 4 operations:
- '+': Accumulator <= Accumulator + operand
- '-': Accumulator <= Accumulator - operand
- '*': Accumulator <= Accumulator * operand
- null: Return from the function and return the current Accumulator value in r0.
For example, the (null-terminated) string "+0+@-P" encodes 4 operations:
- "+0": Add 0x30 to the accumulator. The accumulator starts off as 0, and now contains 0x30
- "+@": Add 0x40 to the accumulator. The accumulator now contains 0x70
- "-P": Subtract 0x50 from the accumulator. The accumulator now contains 0x20
- null: Quit. The function returns 0x20 in r0
Similarly, the following will compute 100*100:
.byte '+', 100, '*', 100, 0
Starting with an accumulator with 0, add 100, then multiply by 100, then return the result.
Write a function that will process the sequence of instructions and return the final value of the accumulator.
Sample Input
"+0+@-P"
Sample Output
r0=0x20