Gray binary generation. Uses algorithm from TAOCP 7.2.1.1 Algorithm G.

Program G. r0 \(\equiv a_j\); r9 \(\equiv j\); r8 \(\equiv n\).

01 EA000001   B start  
02 00000000 .digits EQUD &00000000  
03 00000000   EQUD &00000000  
04 E92D4000 .start STMFD R13!,{R14} G1. Initialize.
05 E24F7014   ADR R7,digits Address of digits array
06 E3A08006   MOV R8,#6 Number of digits \(n \gets 6\)
07 E3A0B000   MOV R11,#0 Parity bit
08 E3A09000   MOV R9,#0 \(j \gets 0\)
09 EB00000F .h2 BL visit G2. Visit.
10 E27BB001   RSBS R11,R11,#1 G3. Change parity. \(a_{\infty} \gets 1 - a_{\infty}\)
11 E3A09000   MOV R9,#0 G4. Choose \(j\).
12 1A000004   BNE h5 Parity is 1
13 E2899001 .h3 ADD R9,R9,#1 Find minimum \(j\)
14 E2490001   SUB R0,R9,#1  
15 E7D71000   LDRB R1,[R7,R0]  
16 E3510001   CMP R1,#1  
17 1AFFFFFA   BNE h3  
18 E1590008 .h5 CMP R9,R8 G5. Complement coordinate \(j\).
19 0A000003   BEQ exit  
20 E7D71009   LDRB R1,[R7,R9]  
21 E2611001   RSB R1,R1,#1  
22 E7C71009   STRB R1,[R7,R9]  
23 EAFFFFF0   B h2  
24 E8BD4000 .exit LDMFD R13!,{R14}  
25 E1A0F00E   MOV PC,R14  
26 E3A01000 .visit MOV R1,#0  
27 E7D70001 .h7 LDRB R0,[R7,R1]  
28 E2800030   ADD R0,R0,#48  
29 EF000000   SWI "OS_WriteC"  
30 E2811001   ADD R1,R1,#1  
31 E1510008   CMP R1,R8  
32 DAFFFFF9   BLE h7  
33 EF000003   SWI "OS_NewLine"  
34 E1A0F00E   MOV PC,R14