Files
EC-Overture/src/TC_answers/storage_cracker.asm

38 lines
999 B
NASM

#include "definitions.asm"
;
; Solution to Storage Cracker level on TC
; Output is the guess to 'crack the code'
; Input is 1 if the guess was too high and 0 if low
;
; Uses r0, r1, r2, r5
; Unused r4
prog:
imm6 1
load r0, r1
load r0, r2
ror ; make a 0b1000_0000 from 0b00000001 ROR 1
; 128 in r3
load r3, r5 ; save as starting point
.loop_1:
out r3
in r3
imm6 prog.low ; if input is 1 the code is a higher number, if 0 its lower
beqz ; branch if r3 == 0
load r5, r1 ; saved value of previous loop/or starting point
imm6 1 ; step size
load r0, r2
.high:
sub ; current - 1 = next guess
load r3, r5
imm6 prog.result ; jump over low
ba
.low:
add ; current + 1 = next guess
load r3, r5 ; save for next round
.result:
imm6 prog.loop_1 ; branch back to the start
ba
.halt:
halt