         Edinburgh IMP77 Compiler - Version 8.4
    1 %BEGIN
		.Ltext0:
				.align	1
				.global	main
				.thumb
				.thumb_func
		main:
		.LFB185:
				@ args = 0, pretend = 0, frame = 1032
				@ frame_needed = 0, uses_anonymous_args = 0
		.LVL0:
				push	{r4, r5, r6, r7, lr}
				subw	sp, sp, #1276
				ldr	r3, .L13
		.LPIC8:
				add	r3, pc
				ldr	r2, .L13+4
				ldr	r3, [r3, r2]
				ldr	r3, [r3]
				str	r3, [sp, #1268]
    2 !***********************************************************************
				bl	_imp_initialise(PLT)
		.LVL1:
		.LDL1:
		.LDL2:
		.LDL3:
		.LDL4:
		.LDL5:
		.LDL6:
		.LDL7:
		.LDL8:
		.LDL9:
		.LDL10:
		.LDL11:
		.LDL12:
		.LDL13:
		.LDL14:
		.LDL15:
		.LDL16:
		.LDL17:
		.LDL18:
		.LDL19:
		.LDL20:
				ldr	r0, .L13+8
		.LPIC9:
				add	r0, pc
				mov	r1, r0
				adds	r0, r0, #16
				movw	r4, #4003
		.LVL2:
		.L2:
    3 !*    SHOULD RUN WITHOUT OPUT. LOOPS ON SOME COMPILERS DUE TO          *
    4 !*    MISSING LABELS GIVING JUMPS WITH ZERO OFFSET                     *
    5 !***********************************************************************
    6 %OWNBYTEINTEGERARRAY CH(0:16)='0','1','2','3','4','5','6','7','8',
    7       '9','A','B','C','D','E','F','G'
    8 %INTEGER I,K,L
    9 %CONSTINTEGER J=0
   10       I=4000; L=10
   11       %IF I>4095 %AND J#0 %THEN I=I+1
   12       %IF I>4095 %AND J#0 %THEN I=I+1 %ELSE I=I-1
   13       %IF I>4095 %AND J#0 %THEN %START; %FINISH
   14       %IF I>4095 %AND J#0 %THEN %START
   15          I=I+1
   16       %FINISH %ELSE I=I-1
   17       %IF (I>4095 %AND J#0 ) %AND L=1 %THEN I=I+1
   18       %IF (I>4095 %AND J#0) %OR L=1 %THEN I=I+1
   19       %UNLESS I>4095 %AND J#0 %THEN I=I+1
   20       %UNLESS I>4095 %AND J#0 %THEN I=I+1 %ELSE I=I-1
   21       %UNLESS I>4095 %AND J#0 %THEN %START; %FINISH
   22       %UNLESS I>4095 %AND J#0 %THEN %START
   23          I=I+1
   24       %FINISH %ELSE I=I-1
   25       %UNLESS (I>4095 %AND J#0 ) %AND L=1 %THEN I=I+1
   26       %UNLESS (I>4095 %AND J#0) %OR L=1 %THEN I=I+1
   27        %FOR K=0,1,16 %CYCLE
   28          %UNLESS '0'<=CH(K)<='9' %OR 'A'<=CH(K)<='F' %THEN I=I+1
   29       %REPEAT
   30       %IF I=4004 %THEN PRINTSTRING("TEST OK") %ELSE %C
				cmp	r0, r1
				beq	.L3
		.LVL3:
		.LBB12:
				movw	r3, #4004
				cmp	r4, r3
				beq	.L12
		.L7:
		.LBB14:
				mov	r7, #256
				mov	r2, r7
				ldr	r1, .L13+12
		.LVL10:
		.LPIC11:
				add	r1, pc
				add	r1, r1, #276
				add	r5, sp, #1012
				mov	r0, r5
				bl	memcpy(PLT)
		.LVL11:
				mov	r2, r7
				mov	r1, r5
				add	r6, sp, #500
				mov	r0, r6
				bl	memcpy(PLT)
		.LVL12:
				mov	r2, r7
				mov	r1, r6
				mov	r0, r5
				bl	memcpy(PLT)
		.LVL13:
		.LBE14:
		.LBB15:
		.LBB16:
				movs	r2, #240
				addw	r1, sp, #1028
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL14:
				ldm	r5, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL15:
		.LBE16:
		.LBE15:
				movs	r1, #5
				mov	r0, r4
				bl	_imp_writeint(PLT)
		.LVL16:
		.L8:
		.LBB17:
		.LBB18:
				movs	r0, #0
				bl	exit(PLT)
		.LVL17:
		.L12:
		.LBE18:
		.LBE17:
		.LBB19:
   31          PRINTSTRING("WRONG ANSWERS") %AND WRITE(I,5)
				ldrb	r3, [r1, #1]!	@ zero_extendqisi2
		.LVL4:
				mov	r5, #256
				mov	r2, r5
				ldr	r1, .L13+16
		.LVL18:
		.LPIC10:
				add	r1, pc
				adds	r1, r1, #20
				add	r4, sp, #1012
		.LVL19:
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL20:
				mov	r2, r5
				mov	r1, r4
				add	r4, sp, #244
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL21:
				mov	r2, r5
				mov	r1, r4
				add	r4, sp, #756
				mov	r0, r4
				bl	memcpy(PLT)
		.LVL22:
		.LBE19:
		.LBB20:
		.LBB21:
				movs	r2, #240
				add	r1, sp, #772
				mov	r0, sp
				bl	memcpy(PLT)
		.LVL23:
				ldm	r4, {r0, r1, r2, r3}
				bl	_imp_printstring(PLT)
		.LVL24:
				b	.L8
		.L14:
				.align	2
		.L13:
				.word	_GLOBAL_OFFSET_TABLE_-(.LPIC8+4)
				.word	__stack_chk_guard(GOT)
				.word	.LANCHOR0-(.LPIC9+4)
				.word	.LANCHOR0-(.LPIC11+4)
				.word	.LANCHOR0-(.LPIC10+4)
		.LBE21:
		.LBE20:
		.LFE185:
				.section	.rodata
				.align	2
				.set	.LANCHOR0,. + 0
		CH.10025:
				.byte	48
				.byte	49
				.byte	50
				.byte	51
				.byte	52
				.byte	53
				.byte	54
				.byte	55
				.byte	56
				.byte	57
				.byte	65
				.byte	66
				.byte	67
				.byte	68
				.byte	69
				.byte	70
				.byte	71
				.space	3
		.LC0:
				.byte	7
				.ascii	"TEST OK\000"
				.space	247
		.LC1:
				.byte	13
				.ascii	"WRONG ANSWERS\000"
				.space	241
		.Letext0:
   32 %ENDOFPROGRAM
   29 Statements compiled
				sub	r2, r3, #48
				uxtb	r2, r2
				cmp	r2, #9
				bls	.L2
		.L5:
		.LVL5:
		.LBE12:
		.LBB13:
				subs	r3, r3, #65
		.LVL6:
				uxtb	r3, r3
		.LVL7:
				cmp	r3, #5
		.L6:
		.LBE13:
				it	hi
				addhi	r4, r4, #1
		.LVL8:
				b	.L2
		.LVL9:
		.L3:
