Gray binary generation 7.2.1.1G
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 |