annotate lab4/test/repchar.p @ 0:bfdcc3820b32

Basis
author Mike Spivey <mike@cs.ox.ac.uk>
date Thu, 05 Oct 2017 08:04:15 +0100
parents
children
rev   line source
mike@0 1 (* Simple recursion *)
mike@0 2
mike@0 3 proc repchar(c: char; n: integer);
mike@0 4 var i: integer;
mike@0 5 begin
mike@0 6 if n > 0 then
mike@0 7 print_char(c);
mike@0 8 repchar(c, n-1)
mike@0 9 end
mike@0 10 end;
mike@0 11
mike@0 12 begin
mike@0 13 repchar('A', 3);
mike@0 14 repchar('B', 5);
mike@0 15 newline()
mike@0 16 end.
mike@0 17
mike@0 18 (*<<
mike@0 19 AAABBBBB
mike@0 20 >>*)
mike@0 21
mike@0 22 (*[[
mike@0 23 @ picoPascal compiler output
mike@0 24 .include "fixup.s"
mike@0 25 .global pmain
mike@0 26
mike@0 27 @ proc repchar(c: char; n: integer);
mike@0 28 .text
mike@0 29 _repchar:
mike@0 30 mov ip, sp
mike@0 31 stmfd sp!, {r0-r1}
mike@0 32 stmfd sp!, {r4-r10, fp, ip, lr}
mike@0 33 mov fp, sp
mike@0 34 @ if n > 0 then
mike@0 35 ldr r0, [fp, #44]
mike@0 36 cmp r0, #0
mike@0 37 ble .L1
mike@0 38 @ print_char(c);
mike@0 39 ldrb r0, [fp, #40]
mike@0 40 bl print_char
mike@0 41 @ repchar(c, n-1)
mike@0 42 ldr r0, [fp, #44]
mike@0 43 sub r1, r0, #1
mike@0 44 ldrb r0, [fp, #40]
mike@0 45 bl _repchar
mike@0 46 .L1:
mike@0 47 ldmfd fp, {r4-r10, fp, sp, pc}
mike@0 48 .ltorg
mike@0 49
mike@0 50 pmain:
mike@0 51 mov ip, sp
mike@0 52 stmfd sp!, {r4-r10, fp, ip, lr}
mike@0 53 mov fp, sp
mike@0 54 @ repchar('A', 3);
mike@0 55 mov r1, #3
mike@0 56 mov r0, #65
mike@0 57 bl _repchar
mike@0 58 @ repchar('B', 5);
mike@0 59 mov r1, #5
mike@0 60 mov r0, #66
mike@0 61 bl _repchar
mike@0 62 @ newline()
mike@0 63 bl newline
mike@0 64 ldmfd fp, {r4-r10, fp, sp, pc}
mike@0 65 .ltorg
mike@0 66
mike@0 67 @ End
mike@0 68 ]]*)