Mandelbrot Sans Arithmetic
The following C program plots the Mandelbrot Set.
#include <stdint.h>
#include <stdio.h>
#define i uint16_t
#define repeat(X) X X X X X X X X X X X X X X X X
#define NEG(X) add(~(X),1)
#define ABS(X) (X)>>15?NEG(X):(X)
#define FMUL(X,Y) (mul((X),(Y))>>6) // Fixed point multiply
// Sign-preserving multiplication
#define SMUL(X,Y) (X^Y)>>15?NEG(FMUL(ABS(X),ABS(Y))):FMUL(ABS(X),ABS(Y))
#define SUB(X,Y) ~add(~(X),(Y))
// expand mask from LSB
i mask(i n) {return n|=n<<1,n|=n<<2,n|=n<<4,n|n<<8;}
// Ripple carry adder
i add(i a,i b) {
i t;
repeat(t = a; a ^= b; (b = (t & b) << 1););
return a;
}
// Bit shift multiplication
i mul(i a, i b) {
i t,n; t=n=0;
repeat(t=add(t,(a<<n)&mask((b>>n)&1));n=add(n, 1);)
return t;
}
int main() {
i zr,zi,n,zrs,zis,tmp;
for (i y=NEG(64);y!=64;y=add(y, 2),putchar('\n')) {
for (i x=NEG(128);x!=64;x=add(x,1)) {
zr=zi=n=zrs=zis=0;
while (n!=64&add(zis,zrs)<4<<6) {
tmp=add(SUB(zrs=FMUL(zr,zr),zis=FMUL(zi,zi)),x);
zi=add(SMUL(zi,mul(zr,2)),y);
zr=tmp;n=add(n, 1);
}
putchar(add(n, 62));
}
}
}
Without (directly) using any arithmetic operations1, the above code plots the Mandelbrot Set to the terminal.
Notice that there’s no addition +
, multiplication *
, subtraction -
, or division /
in the code.
Additionally, the code is notably lacking floating point numbers as it uses only unsigned integers.
Primitive integer addition and multiplication are implemented with bitwise operations. Signed two’s compliment operations are implemented with macros on top of addition and multiplication. Fixed point is used to get fractional precision. The overlying Mandelbrot equation ( ) is still present, and there’s nothing funny going on there.
This implementation is an exercise in the seldom-taught topic of bit math. It’s not particularly impressive, an Intel 8080 implementation would likely look similar, but the prevalence of floating-point makes any kind of fixed-point math look exotic. The only clever part of the program I’d say is in the shading code:
putchar(n + 62)
The variable n
counts the number of iterations of the equation that have been applied—with a maximum of 64
.
This n
value has 62
added to it before being printed as an ASCII character.
Thus, the printed characters are of the range 62..=126
.
This creates the palette of following characters.
?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCDDDDDDDDEEFFGIJLOHHHMIKJ~EEDCCCCCCCCCCCECCBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@@@@@@@AAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCDDDDDDDEEEFFGGHHKPNLRLLHFFFEEDDCCCCCCCCCCCCCCCBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@@@@@AAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCEDDDDDDDDEFFFFGGHIJKNOKIHGFFFEEDDDDCCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@@@@AAAAAAAAAAAABBBBBBBBBBBCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCDEDCCCCCCCCCCCCCCCCCCDDDDDDDDDEEFFGGHHIKORT~NMNIGGIFFEEDDDDDDCCCCCCCCCCCCDBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@@@AAAAAAAAAAABBBBBBBBBBCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCDDICCCCCCCCCCCCCCCCCCCDDDDDDDDDEEEFGHOLJJJMb~~~~XMLIHHHNFEEDDDDDDDDCCCCCCCCCCDDBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@@AAAAAAAAAABBBBBBBBBCCDCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDEEEEFGRUQQXUS~~~~~~~~RYLLOMIGFEDDDDDDDDDECCCCCCCCCCCBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@AAAAAAAAABBBBBBBBCEDCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCDDDDDDEFEEEEEFFFGHIKN~~~~~~~~~~~~~~SWL~HFFEEDDDDDDDDDDDDCCCCCCCCCBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@AAAAAAABBBBBBBCCCDIEBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCDDDDDDEEEEEEEEEFFFGGHINO~~~~~~~~~~~~~~TLKHGGFFGEEEDDDDDDDDDDDCCCCCCCCBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAA
@@@@@@@@@@AAAAAAABBBBBBCCDCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCDDDDDEEEEEEEEEEFFFFFGGGIJRR~~~~~~~~~~~~~~~b~IHGGFFFEEEEEEEDDDDDDDDCCCCCCCBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAA
@@@@@@@@@AAAAAABBBBBCCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCDDDDDDEEFFFFGGFFFFFFFFGGIHIIJLM~~~~~~~~~~~~~~~MKIIHGGGGFFEEEEEEEEEEEEEDDDCCCCCBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAA
@@@@@@@@AAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCDDDDDDDDEIJWHHHJbLIHGGGGHIJ~JIJKKLMP{~~~~~~~~~~~~OLKKJIIHHNMHGFFFFFFFFFFGIHFEDDCCCCBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAA
@@@@@@@AAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCDEDDDDDDDDDEEEFGHJZbZ\NLLLIIIIc~r\PO\~Xtgc~~~~~~~~~e_[TuW~~S}SLMT]SJHGGGGFGGGGINJGEEDDCCCCBBBBBBBBBBBBBBBBBCAAAAAAAAAAAA
@@@@@@@AAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCDEEEDDDDDDDDDEEEEFFHJQ]_[~\RV~XLKKO\~~[~~~~~~~~~~~~~~~~~~~~~~~~~~mU~~~~NIHIITWQKIIKNLIGKEDDCCCCBBBBBBBBBBBBBBBBBCCAAAAAAAAAA
@@@@@@AAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCDDDDDDDDDDDDDDDEEEEEEFFGGHIKVn~~~~~kWTl~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~WdLL~Z`~dQVQmSLHFEDDDCCCCBBBBBBBBBBBBBBBBDDCAAAAAAAAA
@@@@@@AAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCDDDEEDDDDDDDDDDDDDEFEEEEEFFFGGHLY_~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~QS~~~~~~~~LT`FEDDDDCCCCBBBBBBBBBBBBBBBBJCCAAAAAAAA
@@@@@AAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCDDDDDDDDDDDDDDDDDDDDDDFEEEEEEFFHGHHIJKM~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ONHFEEDDDDCCCCCBBBBBBBBBBBBBBBB~CBAAAAAAA
@@@@@AABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEFGGH~KKLKNQWZ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~iVHGFEEEDDDFCCCCBBBBBBBBBBBBBBBBBCCBAAAAAA
@@@@AABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCDDDDDEDDDDDDDDDDDDDDDDDDEEEEEEEEFFFFGIQ~~T~VOV~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~PNJIIGFFEEFDDDCCCCCBBBBBBBBBBBBBBBBBCCBAAAAA
@@@@AABBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCDDENGFFEEEEEEEEEEEEEEEEEEEEEEEEFGFFFFGGGHMYU~~~c~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~XQYHGGGFFEDDDCCCCCCBBBBBBBBBBBBBBBBBCBAAAAA
@@@AABBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCDDDEEEGHLMGGFFFGFFFFFFFIGFFFFFFFFFFFFFHGGGHIKMNQ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~TNJIHHIOFEDDCCCCCCBBBBBBBBBBBBBBBBBBBBAAAA
@@@ABBBBBBBBBBBBBBBBBDDCCCCCCCCCCCCDEDDDDEEEEGI~~GGGHFFFFFGGGK\JIGGGFFFFFFFGGGGHHKYSR~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~S|P~KPLIFDDDCCCCCCBBBBBBBBBBBBBBBBBBBBAAA
@@AABBBBBBBBBBBBBCCCCCCCCCCCCCCCCDDDDDDDDEEEFIHN~JIIHIKIHHHIKQ~OOIIIJIHGGGGGHHHIJNSb~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[oNGEDDDCCCCCCBBBBBBBBBBBBBBBBBBBBAAA
@@ABBBBBBBBBBCCCCCCCCCCCCCCCCCCDDDDDDDDDEEEEFGGJJ~NW\XUN~IJKLQQ~~SLLXaKIHHHHHIIIL~T~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^TSKHGFEEDDCCCCCCCBBBBBBBBBBBBBBBBBBBBAA
@@BBBBBBBDCCCCCCCCCCCCCCCCCCDDDEDDDDDDDDEEFFFGGHIJKQZe~`QP~Pim~~~~~QS~~LRKJIJKJKMes~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~SJHGFFEFDDCCCCCCCBBBBBBBBBBBBBBBBBBBBBA
@@BBBBBCCCCCECCCCCCCCCCCCCDDEDDDDDDDDDDEEFFFFGHHH~K~~~~~~[_~~~~~~~~~~~~~dLKJKKKLP~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~RSKJNFEDDDCCCCCCCGBBBBBBBBBBBBBBBBBBBBA
@ABBBCCCCDGCCCCCCCCCCCCCCDDDDDDDDDDDDEEFFFFFGHIJJKLQV~~~~~~~~~~~~~~~~~~~~~~TONMPY~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\NGEEDDDCCCCCCCCBBBBBBBBBBBBBBBBBBBBA
@BBBCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDEEFGGGGGHHIXLL~Y~~~~~~~~~~~~~~~~~~~~~~~~~SUVV~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~OJHGFEDDDDCCCCCCCCCBBBBBBBBBBBBBBBBBBBB
@BBCCCCCCCCCCCCCCCCCCDDDDDDDDDEEEEEFISHIIHHHIJKMW~~~~~~~~~~~~~~~~~~~~~~~~~~~~~WW~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~OJFEEDDDDCCCCCCCCCBBBBBBBBBBBBBBBBBBBB
@BCCCCCCCCCCCCCCCCCDDDEEEEEEEEEEFFFGGKOJJLLUKMMRf~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~eKIGEEDDDDDCCCCCCCCCBBBBBBBBBBBBBBBBDCBB
@CCCCCCCCCCCCCCCCDEEEEEEEEEEEFFFFFGHHIJ]V~R~~~~V~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zGFEEEDDDDDCCCCCCCCCBBBBBBBBBBBBBBBBCBBB
@CDDDDDDDEEEEFGGFFFFFEEEEFFFFFFFFKIIJMO~S~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~NHGFFEEEDDDDDCCCCCCCCDBBBBBBBBBBBBBBBCCCBB
@DDDDEEEEEFFFFILQIHGGGHJTHGGHHHHJaOOR~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~MJHGFFFEEEDDDDGCCCCCCCCDBBBBBBBBBBBBBBBCCCBB
@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ZPLJIHGFFGEEFDDDDECCCCCCCCDBBBBBBBBBBBBBBBDCDBB
@DDDDEEEEEFFFFILQIHGGGHJTHGGHHHHJaOOR~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~MJHGFFFEEEDDDDGCCCCCCCCDBBBBBBBBBBBBBBBCCCBB
@CDDDDDDDEEEEFGGFFFFFEEEEFFFFFFFFKIIJMO~S~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~NHGFFEEEDDDDDCCCCCCCCDBBBBBBBBBBBBBBBCCCBB
@CCCCCCCCCCCCCCCCDEEEEEEEEEEEFFFFFGHHIJ]V~R~~~~V~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zGFEEEDDDDDCCCCCCCCCBBBBBBBBBBBBBBBBCBBB
@BCCCCCCCCCCCCCCCCCDDDEEEEEEEEEEFFFGGKOJJLLUKMMRf~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~eKIGEEDDDDDCCCCCCCCCBBBBBBBBBBBBBBBBDCBB
@BBCCCCCCCCCCCCCCCCCCDDDDDDDDDEEEEEFISHIIHHHIJKMW~~~~~~~~~~~~~~~~~~~~~~~~~~~~~WW~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~OJFEEDDDDCCCCCCCCCBBBBBBBBBBBBBBBBBBBB
@BBBCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDEEFGGGGGHHIXLL~Y~~~~~~~~~~~~~~~~~~~~~~~~~SUVV~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~OJHGFEDDDDCCCCCCCCCBBBBBBBBBBBBBBBBBBBB
@ABBBCCCCDGCCCCCCCCCCCCCCDDDDDDDDDDDDEEFFFFFGHIJJKLQV~~~~~~~~~~~~~~~~~~~~~~TONMPY~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\NGEEDDDCCCCCCCCBBBBBBBBBBBBBBBBBBBBA
@@BBBBBCCCCCECCCCCCCCCCCCCDDEDDDDDDDDDDEEFFFFGHHH~K~~~~~~[_~~~~~~~~~~~~~dLKJKKKLP~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~RSKJNFEDDDCCCCCCCGBBBBBBBBBBBBBBBBBBBBA
@@BBBBBBBDCCCCCCCCCCCCCCCCCCDDDEDDDDDDDDEEFFFGGHIJKQZe~`QP~Pim~~~~~QS~~LRKJIJKJKMes~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~SJHGFFEFDDCCCCCCCBBBBBBBBBBBBBBBBBBBBBA
@@ABBBBBBBBBBCCCCCCCCCCCCCCCCCCDDDDDDDDDEEEEFGGJJ~NW\XUN~IJKLQQ~~SLLXaKIHHHHHIIIL~T~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^TSKHGFEEDDCCCCCCCBBBBBBBBBBBBBBBBBBBBAA
@@AABBBBBBBBBBBBBCCCCCCCCCCCCCCCCDDDDDDDDEEEFIHN~JIIHIKIHHHIKQ~OOIIIJIHGGGGGHHHIJNSb~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[oNGEDDDCCCCCCBBBBBBBBBBBBBBBBBBBBAAA
@@@ABBBBBBBBBBBBBBBBBDDCCCCCCCCCCCCDEDDDDEEEEGI~~GGGHFFFFFGGGK\JIGGGFFFFFFFGGGGHHKYSR~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~S|P~KPLIFDDDCCCCCCBBBBBBBBBBBBBBBBBBBBAAA
@@@AABBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCDDDEEEGHLMGGFFFGFFFFFFFIGFFFFFFFFFFFFFHGGGHIKMNQ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~TNJIHHIOFEDDCCCCCCBBBBBBBBBBBBBBBBBBBBAAAA
@@@@AABBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCDDENGFFEEEEEEEEEEEEEEEEEEEEEEEEFGFFFFGGGHMYU~~~c~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~XQYHGGGFFEDDDCCCCCCBBBBBBBBBBBBBBBBBCBAAAAA
@@@@AABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCDDDDDEDDDDDDDDDDDDDDDDDDEEEEEEEEFFFFGIQ~~T~VOV~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~PNJIIGFFEEFDDDCCCCCBBBBBBBBBBBBBBBBBCCBAAAAA
@@@@@AABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEFGGH~KKLKNQWZ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~iVHGFEEEDDDFCCCCBBBBBBBBBBBBBBBBBCCBAAAAAA
@@@@@AAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCDDDDDDDDDDDDDDDDDDDDDDFEEEEEEFFHGHHIJKM~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ONHFEEDDDDCCCCCBBBBBBBBBBBBBBBB~CBAAAAAAA
@@@@@@AAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCDDDEEDDDDDDDDDDDDDEFEEEEEFFFGGHLY_~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~QS~~~~~~~~LT`FEDDDDCCCCBBBBBBBBBBBBBBBBJCCAAAAAAAA
@@@@@@AAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCDDDDDDDDDDDDDDDEEEEEEFFGGHIKVn~~~~~kWTl~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~WdLL~Z`~dQVQmSLHFEDDDCCCCBBBBBBBBBBBBBBBBDDCAAAAAAAAA
@@@@@@@AAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCDEEEDDDDDDDDDEEEEFFHJQ]_[~\RV~XLKKO\~~[~~~~~~~~~~~~~~~~~~~~~~~~~~mU~~~~NIHIITWQKIIKNLIGKEDDCCCCBBBBBBBBBBBBBBBBBCCAAAAAAAAAA
@@@@@@@AAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCDEDDDDDDDDDEEEFGHJZbZ\NLLLIIIIc~r\PO\~Xtgc~~~~~~~~~e_[TuW~~S}SLMT]SJHGGGGFGGGGINJGEEDDCCCCBBBBBBBBBBBBBBBBBCAAAAAAAAAAAA
@@@@@@@@AAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCDDDDDDDDEIJWHHHJbLIHGGGGHIJ~JIJKKLMP{~~~~~~~~~~~~OLKKJIIHHNMHGFFFFFFFFFFGIHFEDDCCCCBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAA
@@@@@@@@@AAAAAABBBBBCCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCDDDDDDEEFFFFGGFFFFFFFFGGIHIIJLM~~~~~~~~~~~~~~~MKIIHGGGGFFEEEEEEEEEEEEEDDDCCCCCBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAA
@@@@@@@@@@AAAAAAABBBBBBCCDCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCDDDDDEEEEEEEEEEFFFFFGGGIJRR~~~~~~~~~~~~~~~b~IHGGFFFEEEEEEEDDDDDDDDCCCCCCCBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAA
@@@@@@@@@@@AAAAAAABBBBBBBCCCDIEBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCDDDDDDEEEEEEEEEFFFGGHINO~~~~~~~~~~~~~~TLKHGGFFGEEEDDDDDDDDDDDCCCCCCCCBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAA
@@@@@@@@@@@AAAAAAAAABBBBBBBBCEDCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCDDDDDDEFEEEEEFFFGHIKN~~~~~~~~~~~~~~SWL~HFFEEDDDDDDDDDDDDCCCCCCCCCBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@@AAAAAAAAAABBBBBBBBBCCDCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDEEEEFGRUQQXUS~~~~~~~~RYLLOMIGFEDDDDDDDDDECCCCCCCCCCCBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@@@AAAAAAAAAAABBBBBBBBBBCCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCDDICCCCCCCCCCCCCCCCCCCDDDDDDDDDEEEFGHOLJJJMb~~~~XMLIHHHNFEEDDDDDDDDCCCCCCCCCCDDBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@@@@AAAAAAAAAAAABBBBBBBBBBBCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCDEDCCCCCCCCCCCCCCCCCCDDDDDDDDDEEFFGGHHIKORT~NMNIGGIFFEEDDDDDDCCCCCCCCCCCCDBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@@@@@AAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCEDDDDDDDDEFFFFGGHIJKNOKIHGFFFEEDDDDCCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAA
@@@@@@@@@@@@@@@@@AAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCDDDDDDDEEEFFGGHHKPNLRLLHFFFEEDDCCCCCCCCCCCCCCCBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-
I suppose the less than (
<
) computation does internally subtract the operands in theCMP
instruction, but that’s splitting hares. ↩︎