178 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			178 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
|   mes 2,2,2              ; wordsize 2, pointersize 2
 | |
|  .1
 | |
|   rom 't.p\000'          ; the name of the source file
 | |
|   hol 552,-32768,0       ; externals and buf occupy 552 bytes
 | |
|   exp $sum               ; sum can be called from other modules
 | |
|   pro $sum,2             ; procedure sum; 2 bytes local storage
 | |
|   lin 8                  ; code from source line 8
 | |
|   ldl 0                  ; load two locals ( a and b )
 | |
|   adi 2                  ; add them
 | |
|   ret 2                  ; return the result
 | |
|   end 2                  ; end of procedure ( still two bytes local storage )
 | |
|  .2
 | |
|   rom 1,99,2             ; descriptor of array a[]
 | |
|   exp $test              ; the compiler exports all level 0 procedures
 | |
|   pro $test,226          ; procedure test, 226 bytes local storage
 | |
|  .3
 | |
|   rom 4.8F8              ; assemble Floating point 4.8 (8 bytes) in
 | |
|  .4                              ; global storage
 | |
|   rom 0.5F8              ; same for 0.5
 | |
|   mes 3,-226,2,2         ; compiler temporary not referenced indirect
 | |
|   mes 3,-24,2,0          ; the same is true for i, j, b and c in test
 | |
|   mes 3,-22,2,0
 | |
|   mes 3,-4,2,0
 | |
|   mes 3,-2,2,0
 | |
|   mes 3,-20,8,0          ; and for x and y
 | |
|   mes 3,-12,8,0
 | |
|   lin 20                 ; maintain source line number
 | |
|   loc 1
 | |
|   stl -4                 ; j := 1
 | |
|   lni                    ; was lin 21 prior to optimization
 | |
|   lol -4
 | |
|   loc 3
 | |
|   mli 2
 | |
|   loc 6
 | |
|   adi 2
 | |
|   stl -2                 ; i := 3 * j + 6
 | |
|   lni                    ; was lin 22 prior to optimization
 | |
|   lae .3
 | |
|   loi 8
 | |
|   lal -12
 | |
|   sti 8                  ; x := 4.8
 | |
|   lni                    ; was lin 23 prior to optimization
 | |
|   lal -12
 | |
|   loi 8
 | |
|   lae .4
 | |
|   loi 8
 | |
|   dvf 8
 | |
|   lal -20
 | |
|   sti 8                  ; y := x / 0.5
 | |
|   lni                    ; was lin 24 prior to optimization
 | |
|   loc 1
 | |
|   stl -22                ; b := true
 | |
|   lni                    ; was lin 25 prior to optimization
 | |
|   loc 122
 | |
|   stl -24                ; c := 'z'
 | |
|   lni                    ; was lin 26 prior to optimization
 | |
|   loc 1
 | |
|   stl -2                 ; for i:= 1
 | |
|  2
 | |
|   lol -2
 | |
|   dup 2
 | |
|   mli 2                  ; i*i
 | |
|   lal -224
 | |
|   lol -2
 | |
|   lae .2
 | |
|   sar 2                  ; a[i] :=
 | |
|   lol -2
 | |
|   loc 100
 | |
|   beq *3                 ; to 100 do
 | |
|   inl -2                 ; increment i and loop
 | |
|   bra *2
 | |
|  3
 | |
|   lin 27
 | |
|   lol -4
 | |
|   loc 27
 | |
|   adi 2                  ; j + 27
 | |
|   sil 0                  ; r.r1 :=
 | |
|   lni                    ; was lin 28 prior to optimization
 | |
|   lol -22                ; b
 | |
|   lol 0
 | |
|   stf 10                 ; r.r3 :=
 | |
|   lni                    ; was lin 29 prior to optimization
 | |
|   lal -20
 | |
|   loi 16
 | |
|   adf 8                  ; x + y
 | |
|   lol 0
 | |
|   adp 2
 | |
|   sti 8                  ; r.r2 :=
 | |
|   lni                    ; was lin 23 prior to optimization
 | |
|   lal -224
 | |
|   lol -4
 | |
|   lae .2
 | |
|   lar 2                  ; a[j]
 | |
|   lil 0                  ; r.r1
 | |
|   cal $sum               ; call now
 | |
|   asp 4                  ; remove parameters from stack
 | |
|   lfr 2                  ; get function result
 | |
|   stl -2                 ; i :=
 | |
|  4
 | |
|   lin 31
 | |
|   lol -2
 | |
|   zle *5                 ; while i > 0 do
 | |
|   lol -4
 | |
|   lil 0
 | |
|   adi 2
 | |
|   stl -4                 ; j := j + r.r1
 | |
|   del -2                 ; i := i - 1
 | |
|   bra *4                 ; loop
 | |
|  5
 | |
|   lin 32
 | |
|   lol 0
 | |
|   stl -226               ; make copy of address of r
 | |
|   lol -22
 | |
|   lol -226
 | |
|   stf 10                 ; r3 := b
 | |
|   lal -20
 | |
|   loi 16
 | |
|   adf 8
 | |
|   lol -226
 | |
|   adp 2
 | |
|   sti 8                  ; r2 := x + y
 | |
|   loc 0
 | |
|   sil -226               ; r1 := 0
 | |
|   lin 34                 ; note the abscence of the unnecesary jump
 | |
|   lae 22                 ; address of output structure
 | |
|   lol -4
 | |
|   cal $_wri              ; write integer with default width
 | |
|   asp 4                  ; pop parameters
 | |
|   lae 22
 | |
|   lol -2
 | |
|   loc 6
 | |
|   cal $_wsi              ; write integer width 6
 | |
|   asp 6
 | |
|   lae 22
 | |
|   lal -12
 | |
|   loi 8
 | |
|   loc 9
 | |
|   loc 3
 | |
|   cal $_wrf              ; write fixed format real, width 9, precision 3
 | |
|   asp 14
 | |
|   lae 22
 | |
|   lol -22
 | |
|   cal $_wrb              ; write boolean, default width
 | |
|   asp 4
 | |
|   lae 22
 | |
|   cal $_wln              ; writeln
 | |
|   asp 2
 | |
|   ret 0                  ; return, no result
 | |
|   end 226
 | |
|   exp $_main
 | |
|   pro $_main,0           ; main program
 | |
|  .6
 | |
|   con 2,-1,22            ; description of external files
 | |
|  .5
 | |
|   rom 15.96F8
 | |
|   fil .1                 ; maintain source file name
 | |
|   lae .6                 ; description of external files
 | |
|   lae 0                  ; base of hol area to relocate buffer addresses
 | |
|   cal $_ini              ; initialize files, etc...
 | |
|   asp 4
 | |
|   lin 37
 | |
|   lae .5
 | |
|   loi 8
 | |
|   lae 2
 | |
|   sti 8                  ; x := 15.9
 | |
|   lni                    ; was lin 38 prior to optimization
 | |
|   loc 99
 | |
|   ste 0                  ; mi := 99
 | |
|   lni                    ; was lin 39 prior to optimization
 | |
|   lae 10                 ; address of r
 | |
|   cal $test
 | |
|   asp 2
 | |
|   loc 0                  ; normal exit
 | |
|   cal $_hlt              ; cleanup and finish
 | |
|   asp 2
 | |
|   end 0
 | |
|   mes 4,40               ; length of source file is 40 lines
 | |
|   mes 5                  ; reals were used
 |