         Edinburgh IMP77 Compiler - Version 8.4
    1 %begin
		.Ltext0:
				.section	.rodata
				.align 32
		.LC0:
				.byte	3
				.string	"d2("
				.zero	251
				.align 32
		.LC1:
				.byte	2
				.string	", "
				.zero	252
				.align 32
		.LC2:
				.byte	4
				.string	") = "
				.zero	250
				.align 32
		.LC3:
				.byte	3
				.string	",  "
				.zero	251
				.globl	main
		main:
		.LFB189:
				leal	4(%esp), %ecx
				andl	$-16, %esp
				pushl	-4(%ecx)
				pushl	%ebp
				movl	%esp, %ebp
				pushl	%edi
				pushl	%esi
				pushl	%ebx
				pushl	%ecx
				subl	$4648, %esp
				call	__x86.get_pc_thunk.bx
				addl	$_GLOBAL_OFFSET_TABLE_, %ebx
				movl	%ecx, %eax
				movl	4(%eax), %edx
				movl	%edx, -4652(%ebp)
				movl	%gs:20, %esi
				movl	%esi, -28(%ebp)
				xorl	%esi, %esi
				subl	$8, %esp
				pushl	-4652(%ebp)
				pushl	(%eax)
				call	_imp_initialise@PLT
				addl	$16, %esp
    2   ! It would appear that Imp and C do not store their arrays in the same x-major order.
    3   %integerarray d2(0:1, 0:2)
				leal	-4516(%ebp), %edx
				movl	$0, %eax
				movl	$17, %ecx
				movl	%edx, %edi
				rep stosl
				leal	-4540(%ebp), %eax
				movl	%eax, -4516(%ebp)
				movl	$4, -4512(%ebp)
    4   %ownintegerarray d1(0:5) = 0,1,2,3,4,5
				leal	-4448(%ebp), %edx
				movl	$0, %eax
				movl	$17, %ecx
				movl	%edx, %edi
				rep stosl
				leal	D1.6023@GOTOFF(%ebx), %eax
				movl	%eax, -4448(%ebp)
				movl	$4, -4444(%ebp)
    5   %integername d, e
    6   %integer i,j
    7   d == d2(0,0);            e == d1(0);              d = e;
				leal	-4540(%ebp), %eax
				movl	%eax, -4632(%ebp)
				leal	D1.6023@GOTOFF(%ebx), %eax
				movl	%eax, -4628(%ebp)
				movl	-4628(%ebp), %eax
				movl	(%eax), %edx
				movl	-4632(%ebp), %eax
				movl	%edx, (%eax)
				movl	-4632(%ebp), %eax
				movl	%eax, -4548(%ebp)
		.LBB76:
		.LBB77:
				movl	-4548(%ebp), %eax
		.LBE77:
		.LBE76:
    8   d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
				addl	$4, %eax
				movl	%eax, -4552(%ebp)
		.LBB78:
		.LBB79:
				movl	-4552(%ebp), %eax
		.LBE79:
		.LBE78:
				movl	%eax, -4632(%ebp)
				movl	-4628(%ebp), %eax
				movl	%eax, -4556(%ebp)
		.LBB80:
		.LBB81:
				movl	-4556(%ebp), %eax
		.LBE81:
		.LBE80:
				addl	$4, %eax
				movl	%eax, -4560(%ebp)
		.LBB82:
		.LBB83:
				movl	-4560(%ebp), %eax
		.LBE83:
		.LBE82:
				movl	%eax, -4628(%ebp)
				movl	-4628(%ebp), %eax
				movl	(%eax), %edx
				movl	-4632(%ebp), %eax
				movl	%edx, (%eax)
				movl	-4632(%ebp), %eax
				movl	%eax, -4564(%ebp)
		.LBB84:
		.LBB85:
				movl	-4564(%ebp), %eax
		.LBE85:
		.LBE84:
    9   d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
				addl	$4, %eax
				movl	%eax, -4568(%ebp)
		.LBB86:
		.LBB87:
				movl	-4568(%ebp), %eax
		.LBE87:
		.LBE86:
				movl	%eax, -4632(%ebp)
				movl	-4628(%ebp), %eax
				movl	%eax, -4572(%ebp)
		.LBB88:
		.LBB89:
				movl	-4572(%ebp), %eax
		.LBE89:
		.LBE88:
				addl	$4, %eax
				movl	%eax, -4576(%ebp)
		.LBB90:
		.LBB91:
				movl	-4576(%ebp), %eax
		.LBE91:
		.LBE90:
				movl	%eax, -4628(%ebp)
				movl	-4628(%ebp), %eax
				movl	(%eax), %edx
				movl	-4632(%ebp), %eax
				movl	%edx, (%eax)
				movl	-4632(%ebp), %eax
				movl	%eax, -4580(%ebp)
		.LBB92:
		.LBB93:
				movl	-4580(%ebp), %eax
		.LBE93:
		.LBE92:
   10   d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
				addl	$4, %eax
				movl	%eax, -4584(%ebp)
		.LBB94:
		.LBB95:
				movl	-4584(%ebp), %eax
		.LBE95:
		.LBE94:
				movl	%eax, -4632(%ebp)
				movl	-4628(%ebp), %eax
				movl	%eax, -4588(%ebp)
		.LBB96:
		.LBB97:
				movl	-4588(%ebp), %eax
		.LBE97:
		.LBE96:
				addl	$4, %eax
				movl	%eax, -4592(%ebp)
		.LBB98:
		.LBB99:
				movl	-4592(%ebp), %eax
		.LBE99:
		.LBE98:
				movl	%eax, -4628(%ebp)
				movl	-4628(%ebp), %eax
				movl	(%eax), %edx
				movl	-4632(%ebp), %eax
				movl	%edx, (%eax)
				movl	-4632(%ebp), %eax
				movl	%eax, -4596(%ebp)
		.LBB100:
		.LBB101:
				movl	-4596(%ebp), %eax
		.LBE101:
		.LBE100:
   11   d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
				addl	$4, %eax
				movl	%eax, -4600(%ebp)
		.LBB102:
		.LBB103:
				movl	-4600(%ebp), %eax
		.LBE103:
		.LBE102:
				movl	%eax, -4632(%ebp)
				movl	-4628(%ebp), %eax
				movl	%eax, -4604(%ebp)
		.LBB104:
		.LBB105:
				movl	-4604(%ebp), %eax
		.LBE105:
		.LBE104:
				addl	$4, %eax
				movl	%eax, -4608(%ebp)
		.LBB106:
		.LBB107:
				movl	-4608(%ebp), %eax
		.LBE107:
		.LBE106:
				movl	%eax, -4628(%ebp)
				movl	-4628(%ebp), %eax
				movl	(%eax), %edx
				movl	-4632(%ebp), %eax
				movl	%edx, (%eax)
				movl	-4632(%ebp), %eax
				movl	%eax, -4612(%ebp)
		.LBB108:
		.LBB109:
				movl	-4612(%ebp), %eax
		.LBE109:
		.LBE108:
   12   d == INTEGER(addr(d)+4); e == INTEGER(ADDR(e)+4); d = e
				addl	$4, %eax
				movl	%eax, -4616(%ebp)
		.LBB110:
		.LBB111:
				movl	-4616(%ebp), %eax
		.LBE111:
		.LBE110:
				movl	%eax, -4632(%ebp)
				movl	-4628(%ebp), %eax
				movl	%eax, -4620(%ebp)
		.LBB112:
		.LBB113:
				movl	-4620(%ebp), %eax
		.LBE113:
		.LBE112:
				addl	$4, %eax
				movl	%eax, -4624(%ebp)
		.LBB114:
		.LBB115:
				movl	-4624(%ebp), %eax
		.LBE115:
		.LBE114:
				movl	%eax, -4628(%ebp)
				movl	-4628(%ebp), %eax
				movl	(%eax), %edx
				movl	-4632(%ebp), %eax
				movl	%edx, (%eax)
   13   %for i = 0, 1, 1 %cycle
				movl	$-1, -4636(%ebp)
		.L22:
				cmpl	$1, -4636(%ebp)
				je	.L39
				addl	$1, -4636(%ebp)
				nop
		.L24:
		.LBB130:
		.LBB131:
				call	_imp_newline@PLT
		.LBE131:
		.LBE130:
   14     %for j = 0, 1, 2 %cycle
				movl	$-1, -4640(%ebp)
		.L25:
				cmpl	$2, -4640(%ebp)
				je	.L40
				addl	$1, -4640(%ebp)
		.LBB116:
				nop
		.L27:
		.LBB128:
		.LBB129:
				call	_imp_newline@PLT
		.LBE129:
		.LBE128:
   15       printstring("d2(");write(i,0);printstring(", ");write(j,0);printstring(") = "); write(d2(i,j),0);printstring(",  ");
				leal	-284(%ebp), %eax
				leal	.LC0@GOTOFF(%ebx), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-4380(%ebp), %eax
				leal	-284(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-2076(%ebp), %eax
				leal	-4380(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
		.LBE116:
		.LBB117:
		.LBB118:
				subl	$256, %esp
				movl	%esp, %eax
				movl	%eax, %edi
				leal	-2076(%ebp), %eax
				movl	$64, %edx
				movl	%eax, %esi
				movl	%edx, %ecx
				rep movsl
				call	_imp_printstring@PLT
				addl	$256, %esp
		.LBE118:
		.LBE117:
				subl	$8, %esp
				pushl	$0
				pushl	-4636(%ebp)
				call	_imp_writeint@PLT
				addl	$16, %esp
		.LBB119:
				leal	-284(%ebp), %eax
				leal	.LC1@GOTOFF(%ebx), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-4124(%ebp), %eax
				leal	-284(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-1820(%ebp), %eax
				leal	-4124(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
		.LBE119:
		.LBB120:
		.LBB121:
				subl	$256, %esp
				movl	%esp, %eax
				movl	%eax, %edi
				leal	-1820(%ebp), %eax
				movl	$64, %edx
				movl	%eax, %esi
				movl	%edx, %ecx
				rep movsl
				call	_imp_printstring@PLT
				addl	$256, %esp
		.LBE121:
		.LBE120:
				subl	$8, %esp
				pushl	$0
				pushl	-4640(%ebp)
				call	_imp_writeint@PLT
				addl	$16, %esp
		.LBB122:
				leal	-284(%ebp), %eax
				leal	.LC2@GOTOFF(%ebx), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-3868(%ebp), %eax
				leal	-284(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-1564(%ebp), %eax
				leal	-3868(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
		.LBE122:
		.LBB123:
		.LBB124:
				subl	$256, %esp
				movl	%esp, %eax
				movl	%eax, %edi
				leal	-1564(%ebp), %eax
				movl	$64, %edx
				movl	%eax, %esi
				movl	%edx, %ecx
				rep movsl
				call	_imp_printstring@PLT
				addl	$256, %esp
		.LBE124:
		.LBE123:
				movl	-4636(%ebp), %edx
				movl	%edx, %eax
				addl	%eax, %eax
				addl	%edx, %eax
				movl	-4640(%ebp), %edx
				addl	%edx, %eax
				movl	-4540(%ebp,%eax,4), %eax
				subl	$8, %esp
				pushl	$0
				pushl	%eax
				call	_imp_writeint@PLT
				addl	$16, %esp
		.LBB125:
				leal	-284(%ebp), %eax
				leal	.LC3@GOTOFF(%ebx), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-3612(%ebp), %eax
				leal	-284(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-1308(%ebp), %eax
				leal	-3612(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
		.LBE125:
		.LBB126:
		.LBB127:
				subl	$256, %esp
				movl	%esp, %eax
				movl	%eax, %edi
				leal	-1308(%ebp), %eax
				movl	$64, %edx
				movl	%eax, %esi
				movl	%edx, %ecx
				rep movsl
				call	_imp_printstring@PLT
				addl	$256, %esp
		.LBE127:
		.LBE126:
   16     %repeat
				jmp	.L25
		.L40:
   17     newline
   18   %repeat
				jmp	.L22
		.L39:
   19   newline
   20   %for i = 0, 1, 2 %cycle
				movl	$-1, -4636(%ebp)
		.L28:
				cmpl	$2, -4636(%ebp)
				je	.L41
				addl	$1, -4636(%ebp)
				nop
		.L30:
		.LBB146:
		.LBB147:
				call	_imp_newline@PLT
				movl	$0, -4544(%ebp)
		.LBE147:
		.LBE146:
		.LBB148:
		.LBB149:
				subl	$12, %esp
				pushl	-4544(%ebp)
				call	exit@PLT
		.LBE149:
		.LBE148:
		.LFE189:
				.data
				.align 4
		D1.6023:
				.long	0
				.long	1
				.long	2
				.long	3
				.long	4
				.long	5
				.section	.text.__x86.get_pc_thunk.bx,"axG",@progbits,__x86.get_pc_thunk.bx,comdat
				.globl	__x86.get_pc_thunk.bx
				.hidden	__x86.get_pc_thunk.bx
		__x86.get_pc_thunk.bx:
		.LFB190:
				movl	(%esp), %ebx
				ret
		.LFE190:
		.Letext0:
   21     %for j = 0, 1, 1 %cycle
				movl	$-1, -4640(%ebp)
		.L31:
				cmpl	$1, -4640(%ebp)
				je	.L42
				addl	$1, -4640(%ebp)
		.LBB132:
				nop
		.L33:
		.LBB144:
		.LBB145:
				call	_imp_newline@PLT
		.LBE145:
		.LBE144:
   22       printstring("d2(");write(j,0);printstring(", ");write(i,0);printstring(") = "); write(d2(j,i),0);printstring(",  ");
				leal	-2588(%ebp), %eax
				leal	.LC0@GOTOFF(%ebx), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-3356(%ebp), %eax
				leal	-2588(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-1052(%ebp), %eax
				leal	-3356(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
		.LBE132:
		.LBB133:
		.LBB134:
				subl	$256, %esp
				movl	%esp, %eax
				movl	%eax, %edi
				leal	-1052(%ebp), %eax
				movl	$64, %edx
				movl	%eax, %esi
				movl	%edx, %ecx
				rep movsl
				call	_imp_printstring@PLT
				addl	$256, %esp
		.LBE134:
		.LBE133:
				subl	$8, %esp
				pushl	$0
				pushl	-4640(%ebp)
				call	_imp_writeint@PLT
				addl	$16, %esp
		.LBB135:
				leal	-2588(%ebp), %eax
				leal	.LC1@GOTOFF(%ebx), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-3100(%ebp), %eax
				leal	-2588(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-796(%ebp), %eax
				leal	-3100(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
		.LBE135:
		.LBB136:
		.LBB137:
				subl	$256, %esp
				movl	%esp, %eax
				movl	%eax, %edi
				leal	-796(%ebp), %eax
				movl	$64, %edx
				movl	%eax, %esi
				movl	%edx, %ecx
				rep movsl
				call	_imp_printstring@PLT
				addl	$256, %esp
		.LBE137:
		.LBE136:
				subl	$8, %esp
				pushl	$0
				pushl	-4636(%ebp)
				call	_imp_writeint@PLT
				addl	$16, %esp
		.LBB138:
				leal	-2588(%ebp), %eax
				leal	.LC2@GOTOFF(%ebx), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-2844(%ebp), %eax
				leal	-2588(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-540(%ebp), %eax
				leal	-2844(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
		.LBE138:
		.LBB139:
		.LBB140:
				subl	$256, %esp
				movl	%esp, %eax
				movl	%eax, %edi
				leal	-540(%ebp), %eax
				movl	$64, %edx
				movl	%eax, %esi
				movl	%edx, %ecx
				rep movsl
				call	_imp_printstring@PLT
				addl	$256, %esp
		.LBE140:
		.LBE139:
				movl	-4640(%ebp), %edx
				movl	%edx, %eax
				addl	%eax, %eax
				addl	%edx, %eax
				movl	-4636(%ebp), %edx
				addl	%edx, %eax
				movl	-4540(%ebp,%eax,4), %eax
				subl	$8, %esp
				pushl	$0
				pushl	%eax
				call	_imp_writeint@PLT
				addl	$16, %esp
		.LBB141:
				leal	-2588(%ebp), %eax
				leal	.LC3@GOTOFF(%ebx), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-2332(%ebp), %eax
				leal	-2588(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
				leal	-284(%ebp), %eax
				leal	-2332(%ebp), %edx
				movl	$64, %ecx
				movl	%eax, %edi
				movl	%edx, %esi
				rep movsl
		.LBE141:
		.LBB142:
		.LBB143:
				subl	$256, %esp
				movl	%esp, %eax
				movl	%eax, %edi
				leal	-284(%ebp), %eax
				movl	$64, %edx
				movl	%eax, %esi
				movl	%edx, %ecx
				rep movsl
				call	_imp_printstring@PLT
				addl	$256, %esp
		.LBE143:
		.LBE142:
   23     %repeat
				jmp	.L31
		.L42:
   24     newline
   25   %repeat
				jmp	.L28
		.L41:
   26   newline
   27 %endofprogram
   50 Statements compiled
