         Edinburgh IMP77 Compiler - Version 8.4
    1 %begin
		.Ltext0:
				.globl	main
		main:
		.LFB185:
		.LVL0:
				subq	$1304, %rsp
				movq	%fs:40, %rax
				movq	%rax, 1288(%rsp)
				xorl	%eax, %eax
    2
				call	_imp_initialise@PLT
		.LVL1:
    3   ! %prim     %byte %integer  %map  %spec   charno( %string(255) s,%integer n )
    4
    5   %byteintegermap my charno(%string(255) s, %integer n)
    6     %result == BYTEINTEGER(ADDR(s)+n)
    7   %end
    8
    9   %string(255) string = "00"
   10
   11   my charno(string,1) = '1'   ;! <-- does not affect string
   12   charno(string, 2) = '2'     ;! <-- *does* modify string even though the prim
				leaq	256(%rsp), %rsi
				movq	%rsp, %rdi
				movl	$255, %edx
				call	_imp_strncpy@PLT
		.LVL2:
				movb	$50, 2(%rsp)
		.LBB33:
		.LBB34:
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				pushq	760(%rsp)
				call	_imp_printstring@PLT
		.LVL3:
		.LBE34:
		.LBE33:
		.LBB35:
		.LBB36:
				addq	$256, %rsp
				call	_imp_newline@PLT
		.LVL4:
		.LBE36:
		.LBE35:
		.LBB37:
		.LBB38:
				movl	$0, %edi
				call	exit@PLT
		.LVL5:
		.LBE38:
		.LBE37:
		.LFE185:
		.Letext0:
   13                                !     declaration is the same as my local one.
   14
   15   printstring(string); newline  ;! This outputs: 02
				movb	$49, 1025(%rsp)
   16
   17 %endofprogram
   10 Statements compiled
