38 lines
999 B
NASM
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 |