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 |