         Edinburgh IMP77 Compiler - Version 8.4
    1 ! File of externals followed by a main program.
		.Ltext0:
				.comm	XI1,4,4
				.comm	XIN1,4,4
				.comm	XR1,4,4
				.comm	XI2,4,4
				.comm	XI3,4,4
				.globl	XCR1
				.data
				.align 4
		XCR1:
				.long	1078529622
				.comm	XRA1,40,32
				.globl	XRA1_dv
				.section	.data.rel,"aw",@progbits
				.align 32
		XRA1_dv:
				.long	XRA1
				.long	4
				.zero	60
				.comm	XRAN1,4,4
				.globl	XRAN1_dv
				.bss
				.align 32
		XRAN1_dv:
				.zero	68
				.globl	XCLR1
				.data
				.align 8
		XCLR1:
				.long	-1065151889
				.long	1074340298
				.comm	XLRA1,80,32
				.globl	XLRA1_dv
				.section	.data.rel
				.align 32
		XLRA1_dv:
				.long	XLRA1
				.long	8
				.zero	60
				.comm	XLRAN1,4,4
				.globl	XLRAN1_dv
				.bss
				.align 32
		XLRAN1_dv:
				.zero	68
				.comm	XINA1,40,32
				.globl	XINA1_dv
				.section	.data.rel
				.align 32
		XINA1_dv:
				.long	XINA1
				.long	4
				.zero	60
				.comm	XINAN1,4,4
				.globl	XINAN1_dv
				.bss
				.align 32
		XINAN1_dv:
				.zero	68
				.globl	main
		main:
		.LFB189:
    2
    3 %recordformat rf ( %integer i, %real r, %integer rf)  ;! Are record format vars in a sub-scope?  Or is it just that formats are in a different name space?
    4
    5 ! owns and externals are simpler declarations
    6 %externalinteger xi1
    7 %externalintegername xin1
    8 %externalreal xr1
    9 %externalinteger xi2,xi3
   10 %externalreal xcr1 = 3.1415
   11 %externalrealarray xra1(0:9)
   12 %externalrealarrayname xran1
   13 %externallongreal xclr1 = 3.1415
   14 %externallongrealarray xlra1(0:9)
   15 %externallongrealarrayname xlran1
   16 %externalintegernamearray xina1(0:9)
   17 %externalintegernamearrayname xinan1
   18
   19 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   20
   21 %begin
				leal	4(%esp), %ecx
				andl	$-16, %esp
				pushl	-4(%ecx)
				pushl	%ebp
				movl	%esp, %ebp
				pushl	%edi
				pushl	%ebx
				pushl	%ecx
				subl	$876, %esp
				call	__x86.get_pc_thunk.bx
				addl	$_GLOBAL_OFFSET_TABLE_, %ebx
				movl	%ecx, %eax
				movl	4(%eax), %edx
				movl	%edx, -876(%ebp)
				movl	%gs:20, %edi
				movl	%edi, -28(%ebp)
				xorl	%edi, %edi
				subl	$8, %esp
				pushl	-876(%ebp)
				pushl	(%eax)
				call	_imp_initialise@PLT
				addl	$16, %esp
   22   %integer %array ia3, ia4(1:10), ia5(2:11,0:1,0:2)
				leal	-780(%ebp), %edx
				movl	$0, %eax
				movl	$17, %ecx
				movl	%edx, %edi
				rep stosl
				leal	-860(%ebp), %eax
				movl	%eax, -780(%ebp)
				movl	$4, -776(%ebp)
				leal	-712(%ebp), %edx
				movl	$0, %eax
				movl	$17, %ecx
				movl	%edx, %edi
				rep stosl
				leal	-820(%ebp), %eax
				movl	%eax, -712(%ebp)
				movl	$4, -708(%ebp)
				leal	-644(%ebp), %edx
				movl	$0, %eax
				movl	$17, %ecx
				movl	%edx, %edi
				rep stosl
				leal	-508(%ebp), %eax
				movl	%eax, -644(%ebp)
				movl	$4, -640(%ebp)
   23   %integernamearray in3a1(2:11,0:1,0:2)
				leal	-576(%ebp), %edx
				movl	$0, %eax
				movl	$17, %ecx
				movl	%edx, %edi
				rep stosl
				leal	-268(%ebp), %eax
				movl	%eax, -576(%ebp)
				movl	$4, -572(%ebp)
   24
   25 xi1 = 123
				movl	XI1@GOT(%ebx), %eax
				movl	$123, (%eax)
   26   xin1 == xi1
				movl	XIN1@GOT(%ebx), %eax
				movl	XI1@GOT(%ebx), %edx
				movl	%edx, (%eax)
   27   xin1 = xi1
				movl	XIN1@GOT(%ebx), %eax
				movl	(%eax), %eax
				movl	XI1@GOT(%ebx), %edx
				movl	(%edx), %edx
				movl	%edx, (%eax)
   28
   29   xr1 = 1.23
				movl	XR1@GOT(%ebx), %eax
				flds	.LC0@GOTOFF(%ebx)
				fstps	(%eax)
   30   xr1 = xra1(4)
				movl	XRA1@GOT(%ebx), %eax
				flds	16(%eax)
				movl	XR1@GOT(%ebx), %eax
				fstps	(%eax)
   31   xra1(4) = xr1
				movl	XR1@GOT(%ebx), %eax
				flds	(%eax)
				movl	XRA1@GOT(%ebx), %eax
				fstps	16(%eax)
   32   xclr1 = 3.1415
				fldl	.LC1@GOTOFF(%ebx)
				fstpl	XCLR1@GOTOFF(%ebx)
   33   xlra1(4) = xclr1
				fldl	XCLR1@GOTOFF(%ebx)
				movl	XLRA1@GOT(%ebx), %eax
				fstpl	32(%eax)
   34   xclr1 = xlra1(4)
				movl	XLRA1@GOT(%ebx), %eax
				fldl	32(%eax)
				fstpl	XCLR1@GOTOFF(%ebx)
   35   xina1(4) == xi1
				movl	XINA1@GOT(%ebx), %eax
				movl	XI1@GOT(%ebx), %edx
				movl	%edx, 16(%eax)
   36   xina1(4) = xi1
				movl	XINA1@GOT(%ebx), %eax
				movl	16(%eax), %eax
				movl	XI1@GOT(%ebx), %edx
				movl	(%edx), %edx
				movl	%edx, (%eax)
   37   xinan1 == xina1
				movl	XINAN1@GOT(%ebx), %eax
				movl	XINA1@GOT(%ebx), %edx
				movl	%edx, (%eax)
   38   xinan1(4) == xi1
				movl	XINAN1@GOT(%ebx), %eax
				movl	(%eax), %eax
				addl	$16, %eax
				movl	XI1@GOT(%ebx), %edx
				movl	%edx, (%eax)
   39   xinan1(4) == xin1
				movl	XINAN1@GOT(%ebx), %eax
				movl	(%eax), %eax
				leal	16(%eax), %edx
				movl	XIN1@GOT(%ebx), %eax
				movl	(%eax), %eax
				movl	%eax, (%edx)
   40
   41
   42   ia3(4) = xi1
				movl	XI1@GOT(%ebx), %eax
				movl	(%eax), %eax
				movl	%eax, -848(%ebp)
   43   ia4(4) = xi1
				movl	XI1@GOT(%ebx), %eax
				movl	(%eax), %eax
				movl	%eax, -808(%ebp)
   44   ia5(5,0,2) = xi1
				movl	XI1@GOT(%ebx), %eax
				movl	(%eax), %eax
				movl	%eax, -428(%ebp)
   45   xi1 = ia5(5,0,2)
				movl	-428(%ebp), %edx
				movl	XI1@GOT(%ebx), %eax
				movl	%edx, (%eax)
   46   in3a1(6,1,1) == xi1
				movl	XI1@GOT(%ebx), %eax
				movl	%eax, -156(%ebp)
   47   xi1 = in3a1(6,1,1)
				movl	-156(%ebp), %eax
				movl	(%eax), %edx
				movl	XI1@GOT(%ebx), %eax
				movl	%edx, (%eax)
				movl	$0, -864(%ebp)
		.LBB4:
		.LBB5:
				subl	$12, %esp
				pushl	-864(%ebp)
				call	exit@PLT
		.LBE5:
		.LBE4:
		.LFE189:
				.section	.rodata
				.align 4
		.LC0:
				.long	1067282596
				.align 8
		.LC1:
				.long	-1065151889
				.long	1074340298
				.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:
   48
   49 %endofprogram
   37 Statements compiled
