         Edinburgh IMP77 Compiler - Version 8.4
    1 %BEGIN
		.Ltext0:
				.globl	main
		main:
		.LFB185:
		.LVL0:
				pushq	%rbx
				subq	$1040, %rsp
				movq	%fs:40, %rax
				movq	%rax, 1032(%rsp)
				xorl	%eax, %eax
    2 !***********************************************************************
				call	_imp_initialise@PLT
		.LVL1:
		.LDL1:
		.LDL2:
		.LDL3:
		.LDL4:
		.LDL5:
		.LDL6:
		.LDL7:
		.LDL8:
		.LDL9:
		.LDL10:
		.LDL11:
		.LDL12:
		.LDL13:
		.LDL14:
		.LDL15:
		.LDL16:
		.LDL17:
		.LDL18:
		.LDL19:
		.LDL20:
				leaq	1+CH.6387(%rip), %rdx
				leaq	16(%rdx), %rsi
				movl	$4003, %ebx
				jmp	.L2
		.LVL2:
		.L4:
				addq	$1, %rdx
		.LVL3:
		.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
				cmpq	%rsi, %rdx
				je	.L3
		.LVL4:
		.LBB12:
				cmpl	$4004, %ebx
				je	.L11
		.L7:
		.LVL10:
		.LBB14:
				movabsq	$5638823699073159767, %rax
				movabsq	$357862561619, %rdx
		.LVL11:
				movq	%rax, 769(%rsp)
				movq	%rdx, 777(%rsp)
				leaq	785(%rsp), %rdi
				movl	$239, %ecx
				movl	$0, %eax
				rep stosb
				movb	$13, 768(%rsp)
				leaq	256(%rsp), %rdi
				leaq	768(%rsp), %rsi
				movl	$32, %ecx
				rep movsq
		.LVL12:
				movb	$13, 256(%rsp)
				leaq	768(%rsp), %rdi
				leaq	256(%rsp), %rsi
				movl	$32, %ecx
				rep movsq
		.LBE14:
		.LBB15:
		.LBB16:
				subq	$256, %rsp
				leaq	1024(%rsp), %rsi
				movl	$32, %ecx
				movq	%rsp, %rdi
				rep movsq
				call	_imp_printstring@PLT
		.LVL13:
		.LBE16:
		.LBE15:
				addq	$256, %rsp
				movl	$5, %esi
				movl	%ebx, %edi
				call	_imp_writeint@PLT
		.LVL14:
		.L8:
		.LBB17:
		.LBB18:
				movl	$0, %edi
				call	exit@PLT
		.LVL15:
		.L11:
		.LBE18:
		.LBE17:
		.LBB19:
   31          PRINTSTRING("WRONG ANSWERS") %AND WRITE(I,5)
				movzbl	(%rdx), %eax
		.LVL5:
				movabsq	$21197623525590356, %rax
				movl	$0, %edx
		.LVL16:
				movq	%rax, 769(%rsp)
				movq	%rdx, 777(%rsp)
				leaq	785(%rsp), %rdi
				movl	$239, %ecx
				movl	$0, %eax
				rep stosb
				movb	$7, 768(%rsp)
				movq	%rsp, %rdi
				leaq	768(%rsp), %rsi
				movl	$32, %ecx
				rep movsq
		.LVL17:
				movb	$7, (%rsp)
				leaq	512(%rsp), %rdi
				movq	%rsp, %rsi
				movl	$32, %ecx
				rep movsq
		.LBE19:
		.LBB20:
		.LBB21:
				subq	$256, %rsp
				leaq	768(%rsp), %rsi
				movl	$32, %ecx
				movq	%rsp, %rdi
				rep movsq
				call	_imp_printstring@PLT
		.LVL18:
				addq	$256, %rsp
				jmp	.L8
		.LBE21:
		.LBE20:
		.LFE185:
				.section	.rodata
				.align 16
		CH.6387:
				.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
		.Letext0:
   32 %ENDOFPROGRAM
   29 Statements compiled
				leal	-48(%rax), %ecx
				cmpb	$9, %cl
				jbe	.L4
		.L5:
		.LVL6:
		.LBE12:
		.LBB13:
				subl	$65, %eax
		.LVL7:
		.LBE13:
				cmpb	$6, %al
				sbbl	$-1, %ebx
		.LVL8:
				jmp	.L4
		.L6:
		.LVL9:
		.L3:
