about summary refs log tree commit diff stats
path: root/xombreroicon64.png
blob: 59365148b0ec152f14618feefcdb42921721eb10 (plain)
ofshex dumpascii
0000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00 40 00 00 00 40 08 02 00 00 00 25 0b e6 .PNG........IHDR...@...@.....%..
0020 89 00 00 00 01 73 52 47 42 00 ae ce 1c e9 00 00 00 09 70 48 59 73 00 00 0b 13 00 00 0b 13 01 00 .....sRGB.........pHYs..........
0040 9a 9c 18 00 00 00 07 74 49 4d 45 07 db 01 03 12 00 30 a2 83 87 a0 00 00 11 bf 49 44 41 54 68 de .......tIME......0........IDATh.
0060 ed 5a 59 b0 a5 55 75 5e 6b ed e1 ff cf 78 c7 9e e8 6e 40 26 05 01 19 14 4b b1 00 4b 2b 89 03 4e .ZY..Uu^k....x...n@&....K..K+..N
0080 28 22 6a 90 d2 88 06 13 4d 95 65 ca d2 17 1f 32 3c 99 aa 54 e9 43 12 13 ad 24 18 ad 44 53 a5 96 ("j.....M.e....2<..T.C...$..DS..
00a0 28 1a 14 07 08 e0 00 28 2a d0 4d 0f f7 f6 70 ef ed 7b ef 99 fe ff df c3 5a 2b 0f b7 41 83 0a 34 (......(*.M...p..{......Z+..A..4
00c0 a3 56 b1 5f ce 79 3a e7 fb f6 fa d6 5e 23 aa 2a fc 3e 1f 82 df f3 f3 0c 81 67 08 3c 43 e0 19 02 .V._.y:.....^#.*.>.......g.<C...
00e0 8f f3 88 88 b0 80 02 00 3c 86 37 dd 3e 2d a0 55 15 11 01 e0 96 1b ee 3c b2 67 62 c4 b5 e7 f0 dc ........<.7.>-.U.......<.gb.....
0100 97 9e de 9b 6b 1f eb 4f e1 53 1c c8 36 a0 87 3a df fc b5 bb 46 07 1b 48 68 48 01 83 85 32 5b 7b ....k..O.S..6..:....F..HhH...2[{
0120 c2 b9 9b 9e 7b c1 09 a0 0a 88 bf 73 04 36 50 85 2a fd e4 96 5d f7 dd 79 a0 53 b4 35 25 a3 06 94 ....{......s.6P.*...]..y.S.5%...
0140 d4 18 02 26 05 b1 b4 e5 8c e9 f3 2e 39 ed 41 13 fd 4e 10 d8 40 93 42 fa f9 ed 8b 3f b9 ed 17 2d ...&........9.A..N..@.B....?...-
0160 df ed 90 a3 7e a7 5a 1d 19 16 11 56 54 44 34 e0 00 05 ac 9b da 5e be f8 b5 67 3d 4a 0e 4f 2e 81 ....~.Z....VTD4......^...g=J.O..
0180 0d 10 c2 b2 eb ce bd 77 dd b8 1b 39 5b 6b b0 df d5 a8 86 0d 67 41 05 45 46 11 24 52 55 6b ad 08 .......w...9[k......gA.EF.$RUk..
01a0 1b 5b 6e 3d a3 3c fb 92 e7 22 2a 00 3e 6d 04 36 d0 ef ba 63 ef dd df bc 17 d9 f1 d6 32 2e 1c ce .[n=.<..."*.>m.6...c........2...
01c0 07 57 5d 7f ca 6f 9a ef 96 ed 6a d2 08 90 02 1b 51 35 0f 22 02 a3 6c fd 74 b9 15 2e ba ec 9c 47 .W]..o....j.....Q5."..l.t......G
01e0 b4 c3 93 48 e0 fe 9f ee ff f1 77 76 d3 98 b5 8d 5a 35 65 23 30 37 bd 76 f7 ae fa f0 ea a6 67 9f ...H......wv....Z5e#07.v......g.
0200 a4 db e6 90 11 a3 08 00 a1 2a fd f2 69 52 51 83 60 5d bb dc e2 2e 79 d3 f3 1e 9e c3 93 42 60 cf .........*..iRQ.`]....y......B`.
0220 5d fb ee bc 75 77 5a cb 12 9b e6 d0 42 f7 f8 93 bd 2d 96 7e fa f3 d9 33 9e 9d 62 a8 76 2d 40 88 ]...uwZ.....B....-.~...3..b.v-@.
0240 33 17 3e cf 90 95 41 a3 a0 19 15 01 09 41 44 81 c0 16 2d d4 a4 4d 22 ef 3b db 5a 17 bf f1 dc 5f 3.>...A......AD...-..M".;.Z...._
0260 72 03 c5 ff 2f 2a 7a a2 d4 b2 f1 e5 c0 ee a5 2f 7d fa c6 1f 7d f9 2e 6e 2c 5a c7 59 aa 95 e5 e1 r.../*z......../}...}..n,Z.Y....
0280 be fd b5 32 f4 db c4 4c ad c2 f4 ba 4d dd f0 81 e5 90 22 78 03 80 08 08 20 20 9a 9b 60 0a 17 a0 ...2...L....M....."x........`...
02a0 8e c2 2c a0 21 8d 16 c7 df fe ec 0f 8f fe cb af a1 7f 02 08 3c 08 7d 69 ef ea e7 3f 79 fd f7 be ..,.!...............<.}i...?y...
02c0 f8 a3 66 df 6a 6a 9a 9c b3 17 44 e3 8b 72 aa ba f7 17 12 e2 ec 89 3b aa c1 9a 82 fa 7e c7 f7 3b ..f.jj....D..r........;.....~..;
02e0 a3 bd 07 8c b0 3a 8c 98 41 44 95 04 08 40 25 26 6b ac 6b 95 0c 22 aa 90 b5 3a 3c b9 e1 d3 b7 e7 .....:..AD...@%&k.k.."...:<.....
0300 c4 f8 9b 1c 9a 1e 27 74 44 5c 39 b4 f6 b9 bf ff f2 4d ff f1 5d 93 8c b5 34 3c b4 30 3c b4 a8 22 ......'tD\9......M..]...4<.0<.."
0320 a3 41 05 89 64 e7 b6 5a 72 3a b2 92 89 0e ed da 4d 83 09 b4 8b d6 e6 f9 7a 30 ca cb 03 a9 83 f3 .A..d..Zr:......M.......z0......
0340 ae e8 b4 d0 50 16 31 c6 a5 26 71 e0 54 05 55 10 11 81 1c 93 ea ea f8 fa 7f ba 95 33 3f 91 04 10 ....P.1..&q.T.U............3?...
0360 f1 f0 fe a5 ff fe c7 af 7e e3 5f bf 8f b5 0e 16 0f e6 66 a4 62 4c b6 d5 e1 81 2a fb 8e 09 a3 a5 ........~._.......f.bL....*.....
0380 fe d4 fc 8e f3 5f 38 ba f7 1e c8 ba fd d9 cf 5a d9 b3 8f 09 2d e8 04 72 46 e0 cc 39 a4 18 1a 57 ....._8........Z....-..rF..9...W
03a0 5a 63 10 91 2c 58 18 47 1e 47 cc 0a 8a 92 95 73 35 f1 a4 55 f3 d5 7f f8 0e 47 79 88 d3 d2 63 bb Zc..,X.G.G.....s5..U.....Gy...c.
03c0 f8 7d bb 16 af ff f4 0d 5f bf ee bb f5 72 b0 65 a9 29 c6 d5 23 71 79 12 59 a8 3b 85 93 91 a9 1a .}......_....r.e.)..#qy.Y.;.....
03e0 53 f8 c1 ee 5d 30 6e 6c b7 57 ad 1c 49 cb 6b d4 9d 47 4b 10 02 4d 4d 9d f4 c2 17 b8 a2 8d a2 19 S...]0nl.W..I.k..GK..MM.........
0400 15 a2 e4 aa 51 87 6a 40 94 81 88 10 91 88 45 94 41 44 8d c5 72 d3 34 57 f9 eb 9f ba 65 b2 3e f9 ....Q.j@......E.AD..r.4W....e.>.
0420 55 0e 74 ac d0 07 ab 83 af ff fb b7 6e bc ee bb 2b f7 1e 41 71 08 96 57 c7 3c 01 8b b4 be 6f 2f U.t.........n...+..Aq..W.<....o/
0440 28 bb 6e 07 ac 1d 1f 58 aa 73 6e 95 dd d1 d2 c1 ec ac 99 9d a9 17 16 43 08 9d 4d 9b 48 49 2c b1 (.n....X.sn............C..M.HI,.
0460 48 6d a5 e8 b6 f2 fd 8b d5 fa 8a b0 14 ce 89 0a a8 6e fc d1 c6 87 28 58 b0 ba 1e c6 4b 6b 1a 81 Hm...............n....(X....Kk..
0480 c7 f5 b7 3f 7b 57 35 68 1e 0b 81 6a 54 7f eb 8b df fb fc 27 be b2 74 ff 3a 34 79 6d ff 9e 38 5e ...?{W5h...jT......'..t.:4ym..8^
04a0 17 30 93 c3 83 a6 c9 ce b7 26 87 0f 52 4a d8 6e d9 99 99 e5 7b ee cb 29 75 b6 1f 37 5c 5a 31 19 .0.......&..RJ.n....{..)u..7\Z1.
04c0 ba e7 9c b1 b6 77 8f ae ad 9a 5e 97 80 9a 1c 4c b7 9c df 34 77 cf 8f ef 58 df bf 30 f8 d9 2e 61 .....w....^....L...4w...X..0...a
04e0 96 90 14 40 91 40 54 44 44 44 55 45 45 80 90 41 03 33 68 ce 24 93 70 e3 bf dd 5a 8f 9b 47 4b 40 ...@.@TDDDUEE..A.3h.$.p...Z..GK@
0500 55 43 13 bf ff b5 9b ff eb ef be b0 e7 b6 05 97 da ad 76 a7 c1 64 72 13 57 57 12 a7 f6 ec d4 d4 UC................v..dr.WW......
0520 b6 39 2e db 85 2d 26 4b 2b 42 26 b4 0a aa 2a 98 0c e3 54 6f fe fc 33 59 b5 3f 3b ef 4c b1 74 fb .9...-&K+B&...*...To..3Y.?;.L.t.
0540 0f 33 08 89 a2 f0 fe bb ee d9 7b eb 1d d3 65 97 e6 67 fc 49 db 41 51 23 cb 06 62 51 7d d0 0e 08 .3........{...e..g.I.AQ#..bQ}...
0560 8c 9a 50 18 04 15 05 59 72 96 3a 7e e5 33 37 73 16 00 7d 04 02 39 f0 57 af bb e1 ba bf fd cf fb ..P....Yr.:~.37s..}..9.W........
0580 6e da 9b 1b a3 9a 72 1a ad 2d af 48 76 50 b4 9a e5 55 51 8e 36 a7 d0 30 15 a6 d5 9a 1c 3e 1c 39 n.....r..-.HvP...UQ.6..0.....>.9
05a0 f7 36 cd bb 56 39 d9 bf 58 a0 c2 7a 15 50 34 00 9c 74 5c 33 5c 4b ab eb 99 c0 91 f5 ed d2 00 46 .6..V9..X..z.P4..t\3\K.........F
05c0 03 73 27 9c d0 9b db 84 8a 29 a7 02 c9 14 de 2a 20 20 20 8a 2a 2a 80 2a 28 02 20 6c 38 84 32 24 .s'......).....*....**.*(..l8.2$
05e0 e7 a3 fc e0 fa bb 01 d0 fe b6 1c 86 93 5c ff b9 af 1f dc b5 24 35 10 98 80 81 d0 92 00 82 05 55 .............\......$5.........U
0600 cb 10 5b c5 78 61 61 5a 19 d0 8e 16 97 d5 15 d0 f1 a3 a5 c3 33 ca be d7 ab 77 1c 37 3c b8 1c 26 ..[.xaaZ............3....w.7<..&
0620 f5 64 e1 c0 29 6f 7c 15 30 4e 6d 9d af 7b ed 7a df 22 9e d1 f1 c1 48 61 71 7d d8 3b 79 07 01 a5 .d..)o|.0Nm..{.z."....Haq}.;y...
0640 2c cc 4d a6 a6 65 fb 6c 08 85 11 2d 20 2a 28 28 03 18 00 44 55 45 04 40 01 00 ca 46 fd be 7b 0f ,.M..e.l...-.*((...DUE.@...F..{.
0660 5c 00 67 da df 94 3c ea 4d d7 7f fb 67 37 df 6b a3 07 51 63 80 41 5c a7 93 ea 06 14 40 79 23 00 \.g...<.M...g7.k..Qc.A\.....@y#.
0680 18 ef 81 28 8f 87 be 37 1b 45 8c 01 db 9b e2 fd 87 78 30 c4 7e bf bd e3 b8 6e 7f 6e 74 64 89 c6 ...(...7.E.......x0.~....n.ntd..
06a0 c3 d1 e2 82 9f 3f ae 3d 35 d3 de b2 2d ae 0f 7a 08 c4 da 9d ee 0f 77 ef c7 c9 c8 b4 09 c8 d4 0b .....?.=5...-..z......w.........
06c0 8b 98 ea e6 c4 1d a5 ef db 56 2b a6 00 8a a8 0a 00 a4 a0 20 0f 04 31 44 32 68 1d 5a 93 82 70 7a .........V+...........1D2h.Z..pz
06e0 40 42 1b 82 cb 29 df f1 bf 77 7c e2 a3 9f bc ef 7f ee a7 09 65 0d 19 9b 26 35 9c 39 0f 9b a3 5e @B...)...w|.........e...&5.9...^
0700 b5 21 50 04 20 ef 4a 1f 06 03 41 ec ce f6 88 c8 94 dd a2 55 ae ad 1d 81 9c fb bd a9 d0 76 66 f3 .!P...J...A........U.........vf.
0720 2c cd cf 0d 16 96 30 b3 26 70 5b b6 c5 d4 c0 60 a8 64 ac 75 66 ba 17 0e ae 08 88 f5 34 b1 32 3c ,.....0.&p[....`.d.uf.......4.2<
0740 bc d4 6a f9 04 22 16 44 37 12 53 01 55 40 7e 00 3c a1 21 b4 16 0c e6 1c 62 9a 10 21 3d 78 f1 a3 ..j..".D7.S.U@~.<.!.....b..!=x..
0760 b5 f1 3f 7f ec 53 37 7f fe 56 13 7c 2d 4d d4 c4 09 94 0d 80 07 b2 8c 11 40 55 e5 68 5e 25 a0 80 ..?..S7..V.|-M..........@U.h^%..
0780 be 2c e3 68 a8 aa c6 1b cd 49 c9 48 e1 3c a1 82 36 92 25 04 13 52 b1 7d 1b 4c 6a 95 14 38 68 bb .,.h.....I.H.<..6.%..R.}.Lj..8h.
07a0 d5 9d 9b 5e db bb 18 81 29 32 f6 db 69 df 92 56 21 8d 9a 6d a7 9e 96 27 cd f8 d0 0a 88 a0 28 ab ...^....)2..i..V!..m...'......(.
07c0 a8 88 2a e0 03 2e 80 44 c6 1a e3 1c 93 c4 58 87 6a 7d e7 ce 4d 68 80 36 62 ea 0f 6e fa d1 bf fc ..*....D......X.j}..Mh.6b..n....
07e0 cd 67 d2 18 9b 9c 38 25 64 50 15 55 66 15 40 11 49 60 ac b0 b0 02 a3 aa 2a b2 30 a8 7a df 0c 27 .g....8%dP.Uf.@.I`......*.0.z..'
0800 46 22 18 6a 6f 9a b2 d6 10 42 38 b4 24 88 92 33 7a 34 ce bb 76 3b a9 68 d5 80 d7 4e bf d5 4c 9a F".jo....B8.$..3z4..v;.h...N..L.
0820 fa c0 22 41 c8 31 cd 6c d9 9a 54 c6 7b f7 82 c1 30 18 ed bc e8 25 dd ee bc c9 20 47 a5 2f a4 ba .."A.1.l..T.{...0....%.....G./..
0840 41 c2 18 a2 c2 a1 b3 1c 23 87 10 27 e3 8a 07 17 5c 7a de d1 67 74 e5 d0 f2 37 be f0 0d 09 94 72 A.......#..'....\z..gt...7.....r
0860 80 c4 a2 90 2c 88 25 05 10 54 41 40 6b 54 95 90 10 15 41 45 58 11 58 d5 f5 fa 73 27 9e 98 58 eb ....,.%..TA@kT....AEX.X...s'..X.
0880 10 a1 0a e5 74 9f 66 fa f5 78 68 72 02 d6 76 6f 8a 9d 13 ef 0b 4b 6b 7b ef e7 88 88 ae dc 3c c7 ....t.f..xhr..vo.....Kk{......<.
08a0 b9 d1 23 eb 09 51 b3 ba ad 53 e3 83 87 38 26 0b 56 8d 4b 96 b8 20 24 d4 cc 20 22 a0 c6 59 29 ac ..#..Q...S...8&.V.K...$..."..Y).
08c0 29 1c ab c4 d8 34 61 1c c2 20 98 d1 f9 2f 3f bf 3b dd 3d 4a 60 cf 3d bb 4d ad 92 58 35 ab 66 96 )....4a....../?.;.=J`.=.M..X5.f.
08e0 e4 4b 57 94 5e 24 81 08 73 ce 22 39 27 c9 59 b2 a0 28 a8 08 47 ad 03 fa d2 4d 4d 43 92 8d c2 a2 .KW.^$..s."9'.Y..(..G....MMC....
0900 e6 dc 9b 99 e5 aa 86 18 80 c5 18 e3 bc 37 e4 11 a9 5a 38 00 c3 2a 37 a9 dc bc c5 94 6e f5 9e 5d .............7...Z8..*7.....n..]
0920 08 aa 99 bb c7 6f e7 18 c3 d2 e1 20 99 09 8d 73 56 71 bc ba 46 80 00 88 44 64 8c 25 13 9b c0 a9 .....o.........sVq..F...Dd.%....
0940 0e d5 90 73 a8 f3 e8 bc 97 9c 75 f6 85 67 6f f8 2d 01 40 e1 7d aa 07 21 4e 32 4b 56 41 d5 34 9c ...s......u..go.-.@.}..!N2KVA.4.
0960 34 c3 11 88 6a 16 50 51 66 dc f0 5d 11 40 15 11 4e 75 3d 59 73 ed 32 18 30 99 e3 c2 81 08 11 11 4...j.PQf..].@..Nu=Ys.2.0.......
0980 ca e9 19 56 5e 3e 70 48 45 72 8a 39 d4 06 ac 9b 99 43 c9 30 19 92 66 df 9e c2 ee 74 b3 ba 62 63 ...V^>pHEr.9.....C.0..f....t..bc
09a0 95 94 db 33 9b 61 aa 3b b8 f7 17 8e d8 19 ac eb aa 9e 8c 81 d9 20 80 45 e3 1d ab a4 49 95 53 a8 ...3.a.;...............E....I.S.
09c0 c3 98 31 c6 a2 ba e4 cd 17 9d f3 b2 f3 1e 2c 71 48 55 77 9c 7a 42 c8 63 d1 2c 39 6b ce cc cc 99 ..1...........,qHUw.zB.c.,9k....
09e0 39 6d e8 5f 55 18 44 10 14 51 19 85 45 44 52 e0 10 eb 9a 4a af 0e 62 1e ed bf fd fb 19 82 f5 0e 9m._U.D..Q..EDR....J..b.........
0a00 c1 d8 76 67 b4 6f 37 1b c4 c8 ae 5d 82 45 db 6a 51 bb 3d 38 bc 84 28 ac 5a 6e dd ea 32 e4 f1 c0 ..vg.o7....].E.jQ.=8..(.Zn..2...
0a20 7a 02 4f fd ed c7 41 16 59 1d 8e 56 d7 ea aa 6e b7 3b 40 84 de 5a ef 33 e7 9c 62 d4 2a e4 31 72 z.O...A.Y..V...n.;@..Z.3..b.*.1r
0a40 96 96 5c f1 67 6f 3e f5 cc 53 37 fc f6 68 2a 81 88 33 73 b3 27 9d 7f 9a 4c 86 1b 39 88 aa b0 08 ..\.go>..S7..h*..3s.'...L..9....
0a60 28 b0 a4 04 9c 95 a3 24 e6 24 0f e8 52 54 72 55 eb 70 02 4d f2 e8 d5 92 b7 84 eb a1 59 58 59 d9 (......$.$..RTrU.p.M........YXY.
0a80 73 c0 b5 3b 34 19 e7 14 58 d9 d9 52 44 c0 18 37 33 3d 18 ac 71 88 90 63 7f eb e6 78 fc d6 a2 37 s..;4...X..RD..73=..q..c...x...7
0aa0 9d ea 2c 59 dd d4 ec f4 69 a7 57 4d d0 ac 8e cc 78 3c 31 65 a9 c6 34 a9 0a 3c 6a f2 10 72 02 19 ..,Y....i.WM....x<1e..4..<j..r..
0ac0 97 3b fd 3b 3e f4 d6 76 bf f5 90 fa f8 68 1c 78 eb fb af 21 a9 72 8e 64 90 39 2b 33 73 b2 85 c5 .;.;>..v.....h.x...!.r.d.9+3s...
0ae0 82 b0 74 b6 c0 9c b2 82 a0 00 a9 2a 80 f7 0e 52 0a ab eb f5 91 a1 c5 56 b1 6d c7 81 dd 0b 71 6d ..t........*...R.......V.m....qm
0b00 0c d6 d8 fe 14 29 b8 a6 8e c4 28 4a c6 65 00 e3 5a 2e c7 b0 b2 96 0c 1b 85 cd e7 9c 13 5c 61 0b .....)....(J.e..Z............\a.
0b20 87 59 d5 38 b7 79 4b 31 3b 57 76 3a ad a2 55 76 da 64 31 c5 86 63 ca 31 00 e6 06 27 af 78 e7 ab .Y.8.yK1;Wv:..Uv.d1..c.1...'.x..
0b40 de fc ee 37 21 e2 af 57 f7 47 09 90 31 a7 5e fc bc 38 3e 92 53 03 2a ca 02 04 55 33 c9 31 95 ad ...7!..W.G..1.^..8>.S.*...U3.1..
0b60 16 19 50 e6 c4 49 51 73 ce c6 18 f0 1e 1c 49 6a 8c 88 30 f4 9f 75 ca ec ce 1d d4 f5 50 78 72 2d ..P..IQs......Ij..0..u......Pxr-
0b80 2e ed 70 ff 82 65 49 92 6d 69 9c 73 b6 d5 65 d5 e1 fd f7 43 8e a0 60 59 ac b7 21 54 83 d5 65 54 ..p..eI.mi.s..e....C..`Y..!T..eT
0ba0 56 02 70 16 bd 45 6f 93 34 4d 1c 89 d6 49 ea 48 b1 bb ad 7b d5 87 ff 78 cb 49 db 7f 5b f3 81 1e V.p..Eo.4M...I.H...{...x.I..[...
0bc0 2c af 2e bf f6 5d 96 02 87 5a 98 99 b3 21 74 ce 22 4b 18 37 dc 34 1a b3 29 1d 59 12 4e cc ac 00 ,....]...Z...!t."K.7.4..).Y.N...
0be0 c6 52 13 2a 31 1a 81 5b dd 9e 1a 52 8b 16 c0 1a 47 53 9d 23 8b 8b 86 95 85 89 a0 0e 8d 9f 99 39 .R.*1..[...R....GS.#...........9
0c00 e5 c2 0b 52 3d 9c dc b7 b7 8e 81 91 c7 cb cb 71 75 64 91 8c b5 68 ad 71 9e 09 82 86 9c 13 5a 08 ...R=..........qud...h.q......Z.
0c20 10 2b 18 3d ff 0f cf 79 d3 35 af f7 a5 ff 55 d1 3f 5c 49 f9 9c 4b 9e 5f 8f 87 59 23 40 4e c3 46 .+.=...y.5....U.?\I..K._..Y#@N.F
0c40 12 01 48 1e 0c e2 a1 09 b4 28 e5 90 52 2d 39 2b 4b 66 01 83 d5 da 9a 21 40 49 80 90 14 50 01 14 ..H......(..R-9+Kf.....!@I...P..
0c60 c5 62 31 bb d9 03 34 9c 91 a3 26 e9 f7 a7 6c 41 a9 e8 cd 9c 7e 7a 9a d4 e3 fb f7 8d f6 1e 84 24 .b1...4...&...lA....~z.........$
0c80 b6 28 c8 7b f4 de 58 c3 39 a7 14 62 ae d8 e6 58 4f 04 aa 3f f9 f0 d5 e7 bf f8 dc 87 81 fe 1b da .(.{..X.9..b...XO..?............
0ca0 eb 57 bc ef dd b7 7d f5 ed be 29 d1 f5 05 58 46 03 83 04 4a 60 40 89 80 b3 0a 49 ca 88 8e 80 5c .W....}...)...XF...J`@....I....\
0cc0 59 0e f7 2d a8 2a 74 7d 4c 11 eb 26 79 82 c2 4c cd cc f5 e6 ca e5 d5 09 d7 8d f4 ac 55 11 55 e3 Y..-.*t}L..&y..L............U.U.
0ce0 1c 18 d2 b9 b9 7e 6f 06 19 94 c0 38 8f be b0 ce 01 6a 4a 01 64 12 08 db fd 4e 35 3a 32 7b 5c e7 .....~o....8.....jJ.d....N5:2{\.
0d00 f2 6b af 7e 94 0d ab 87 d6 03 2f 7f cb ab 43 33 e0 54 2b 30 10 64 03 99 d4 78 af 29 00 0b 87 a4 .k.~....../...C3.T+0.d...x.)....
0d20 8a a0 82 82 ea 5d 81 18 aa 91 8a 02 66 8b 32 5a 5a ea 77 3b 9c 62 62 10 63 d2 ea 1a 21 69 d7 67 .....]......f.2ZZ.w;.bb.c...!i.g
0d40 12 60 99 2c 1f 81 86 11 ad 7a 07 45 41 ad 92 0a c3 12 42 9c 44 68 c6 94 0b af 83 f5 fd af 7b d7 .`.,.....z.EA.....B.Dh........{.
0d60 ab 2f bf f6 ca 47 df 9d a6 87 a4 d3 7f 70 c5 65 47 86 4b 1c 86 59 33 08 20 0b 70 ce c8 22 a2 9c ./...G.......p.eG.K..Y3...p.."..
0d80 73 cc 28 20 c2 20 9a ad 71 de 8c d7 d6 a8 8a 50 a9 ed b9 b0 ba 9c 46 93 cc 2c 6a 3a 9b e6 26 eb s.(.....q......P......F..,j:..&.
0da0 6b 91 b3 84 80 29 8f 57 56 d3 a8 32 aa 88 8a de da 76 a9 a4 1c 9b 94 9b 0c b5 60 ed 4a d3 3f be k....).WV..2.....v........`.J.?.
0dc0 f7 ee 8f 5e b3 f5 f8 6d 8f 28 9b df 4a 00 11 8d b5 6f 78 ef d5 2a 95 c4 3a 0b 8b 30 b0 6a ca 24 ...^...m.(..J....ox..*..:..0.j.$
0de0 12 33 c3 46 30 16 cd 90 3c 38 2c 7c 33 39 92 62 82 0c be b0 4c 12 eb ca 2a ab 6a bb df cf cc 38 .3.F0...<8,|39.b....L...*.j....8
0e00 99 4c 0e ad 8c 96 d6 54 b4 28 4b 53 38 6c 95 ce 97 12 9b d4 8c 63 aa 02 54 51 43 1d ea 17 bd e2 .L.....T.(KS8l.......c..TQC.....
0e20 dc cb de f1 7a 5f 16 8f 77 42 b3 51 8c 7e e4 6d d7 e0 3a 98 b2 6f ad 57 51 b2 c6 b5 9c eb f4 9a ....z_..wB.Q.~.m..:..o.WQ.......
0e40 d5 b1 01 0b d6 10 a2 20 a7 95 83 d5 70 7d c7 d9 17 24 40 47 6a 9a 68 5b 3d 46 40 5f d8 24 eb fb ............p}...$@Gj.h[=F@_.$..
0e60 17 b3 35 65 ab ed 8b 16 15 85 f1 c6 b9 82 49 73 6c 54 84 29 2a 08 28 4d 6d ef 5e 7e cd 65 be 55 ..5e..........IslT.)*.(Mm.^~.e.U
0e80 3c 7a d9 3c 9c 0f 20 22 11 7d f0 e3 7f a5 f5 58 d2 44 99 55 44 45 38 25 5f 94 31 45 01 16 c9 28 <z.<...".}.....X.D.UDE8%_.1E...(
0ea0 9c 15 a8 6c 61 13 53 33 76 6d 43 2d 97 9c 0d b0 91 72 e8 fa fa 3a b5 5a dd fe b4 2f 0b 2a 9c 29 ...la.S3vmC-.....r...:.Z.../.*.)
0ec0 2c 95 3e a4 50 c7 71 96 2a 6b 0d a8 19 e3 ce 73 b6 bd ed 03 57 ba 87 7d 28 8f 79 c8 a7 aa 73 5b ,.>.P.q.*k.....s....W..}(.y...s[
0ee0 37 6f 3d e7 e4 83 77 ef 23 72 88 4e b2 82 d0 ea e1 65 03 aa 92 c8 3a 21 04 56 34 ce 7a bb b6 b8 7o=...w.#r.N.....e....:!.V4.z...
0f00 67 b6 f3 1c 42 02 8b 08 12 eb 58 57 eb ed a2 34 9e 32 88 f3 05 16 86 35 a7 49 23 90 33 b0 73 98 g...B.....XW...4.2.....5.I#.3.s.
0f20 34 46 0e 57 bd ff aa 2d 3b b7 3c b6 8b 7f 54 ed f5 0f 5d f2 46 6a 4f 15 ae 2f 00 08 64 db 2d 64 4F.W...-;.<...T...].FjO../..d.-d
0f40 06 44 b0 d6 f8 a2 74 ad 6a b8 2a eb cb d5 70 38 7b ca 69 85 2f 33 98 a6 0a 06 6c 59 b6 9c 75 ea .D....t.j.*...p8{.i./3....lY..u.
0f60 d0 96 2d 00 60 16 40 96 1c c1 02 ab 64 88 cf 3a eb c4 57 5d 79 69 f9 58 65 f3 68 c7 ac e7 bd f2 ..-.`.@.....d..:..W]yi.Xe.h.....
0f80 a2 db 6e f8 be a3 92 ac 01 b4 9c 02 91 21 20 4d 39 67 1e 42 63 ad 33 53 f3 6d eb d7 17 0f 5a 57 ..n..........!.M9g.Bc.3S.m....ZW
0fa0 9a a2 ed 5a 5d df 2e c1 20 38 43 d6 66 66 15 56 cd 64 25 61 42 a1 5a eb d7 5d fd 9a 33 ce 7d ee ...Z]....8C.ff.V.d%aB.Z..]..3.}.
0fc0 83 8a 7d 9c ed f1 47 18 70 7c e0 a2 4b 5b dd 79 6b db 48 a5 6b 17 22 8a 02 84 06 44 d1 12 93 41 ..}...G.p|..K[.yk.H.k."....D...A
0fe0 44 03 6c 15 55 40 c9 7a 57 a0 75 c6 7b b5 88 22 04 10 21 30 e7 a2 53 54 a1 ea cc b5 af fc d3 b7 D.l.U@.zW.u.{.."..!0..ST........
1000 cf 6d 9e 7b 02 87 29 8f 30 e8 7e c9 eb ff e8 96 af dc 48 e4 09 72 0a 5a f8 32 a6 84 76 63 f4 86 .m.{..).0.~.......H..r.Z.2..vc..
1020 46 98 80 10 0c 5b 04 42 4b 16 0c a1 21 d6 ac 99 11 24 a4 08 46 d1 43 95 c2 19 cf 3f f3 35 57 bd F....[.BK...!....$..F.C....?.5W.
1040 e1 09 1f 08 3d 82 05 26 c3 c1 07 2e 79 ed fc e6 93 c8 16 a2 68 ad 37 d6 e2 06 4c 42 25 20 22 04 ....=..&....y.......h.7...LB%.".
1060 42 43 40 c6 90 07 24 20 45 60 04 89 90 d4 28 59 03 2d bc f6 a3 7f de 9b ee 3f 19 93 b8 47 b0 40 BC@...$.E`....(Y.-.......?...G.@
1080 a7 3f f5 d2 b7 be ee 27 5f b9 05 c8 20 ba 8d ce a5 31 08 80 aa 84 a0 a0 80 64 14 08 15 38 47 35 .?.....'_........1.......d...8G5
10a0 80 02 82 51 30 21 d9 90 f2 0b 2e be e0 15 97 5f 6a ad 7d fc fe fa 58 2c a0 aa 93 e1 f0 7d 2f 7b ...Q0!........._j.}...X,.....}/{
10c0 e5 fc fc b3 5a e5 b4 08 91 b1 06 0d 12 10 5a 22 04 24 40 52 04 8b 08 a8 0c 12 49 08 b4 dd 2e 7b ....Z.........Z".$@R......I....{
10e0 3b e7 de f8 ce 2b e6 b7 ce 3f 49 d0 1f 55 77 1a 11 bb 53 53 6f f9 8b 6b a0 1a a7 58 8b 04 e0 ac ;....+...?I..Uw...SSo..k...X....
1100 c2 2a aa 2a cc 92 99 55 19 94 33 87 98 aa c4 55 91 82 42 3a e5 c2 b3 de f3 91 f7 cd 6d 9d 7b 42 .*.*...U..3....U..B:........m.{B
1120 9e 9a c7 35 27 56 55 61 f9 e0 a5 97 d9 54 38 db 31 b6 50 b4 68 cc 46 a7 0f 89 70 a3 f3 85 2a 46 ...5'VUa.....T8.1.P.h.F...p...*F
1140 19 a5 3b 37 fd ea b7 5f 76 f6 8b ce 7b 52 2f fe 98 e7 c4 93 f5 f5 bf 7c e5 15 9d f6 8c a7 76 b4 ..;7..._v...{R/........|......v.
1160 06 91 10 8d 01 35 44 ac 0c 16 44 d5 14 78 e6 45 17 bc f9 da ab 9f 1a e8 c7 b0 2f a4 aa 9d e9 e9 .....5D...D..x.E........../.....
1180 f9 b3 4f 1e fc f0 de d0 0a 86 5b 0e 1c 5a db 18 11 04 54 68 83 af b4 f9 e0 5f 7f 6c c7 c9 27 3c ..O.......[..Z....Th....._.l..'<
11a0 95 e8 8f c1 02 1b dd f9 f7 5c fc 32 db 88 b5 5d f5 1d 30 e8 c9 01 41 50 3e fd 45 e7 5d fd a1 6b .........\.2...]..0...AP>.E.]..k
11c0 cb 76 eb 29 46 7f cc ab 06 b7 7f ef a6 8f 5f f3 be 5e 7f d6 bb 8e 35 3e 44 dd 76 d6 a9 6f 7a ef .v.)F........._..^....5>D.v..oz.
11e0 55 cf 39 fb cc a7 6b 63 ed 98 77 25 be f1 a5 2f 7e f3 b3 9f b3 e4 67 b6 1f 7f f1 eb 2e 3d ff 45 U.9...kc..w%.../~.....g......=.E
1200 2f 7c ea 6f fd 09 5b f6 78 7a a1 3f 3d 3b 73 4f 75 20 7b 86 c0 93 7e fe 0f 84 66 12 f3 c3 d2 59 /|.o..[.xz.?=;sOu.{...~...f....Y
1220 9a 00 00 00 00 49 45 4e 44 ae 42 60 82 .....IEND.B`.
p8 . # push *(ebp+16) 51/push-ecx/num ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 . # push *(ebp+8) # . . call e8/call get-num/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32 # add to esp # render 'num' into the following template on 'out': # bb/copy-to-ebx _num_ # b8/copy-to-eax 1/imm32/exit # cd/syscall 0x80/imm8 # # . write(out, "bb/copy-to-ebx ") # . . push args 68/push "bb/copy-to-ebx "/imm32 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 . # push *(ebp+12) # . . call e8/call write/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp # . write-stream(out, num) # . . push args 51/push-ecx/num ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 . # push *(ebp+12) # . . call e8/call write-stream/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp # . write(out, Newline) # . . push args 68/push Newline/imm32 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 . # push *(ebp+12) # . . call e8/call write/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp # . write(out, "b8/copy-to-eax 1/imm32/exit\n") # . . push args 68/push "b8/copy-to-eax 1/imm32/exit\n"/imm32 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 . # push *(ebp+12) # . . call e8/call write/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp # . write(out, "cd/syscall 0x80/imm8\n") # . . push args 68/push "cd/syscall 0x80/imm8\n"/imm32 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 . # push *(ebp+12) # . . call e8/call write/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp $compile:end: # . restore registers 59/pop-to-ecx 58/pop-to-eax # . epilogue 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . . # copy ebp to esp 5d/pop-to-ebp c3/return # Read a single digit into 'out'. Abort if there are none, or if there is no # space in 'out'. # Input comes from the global variable 'Look' (first byte) and the argument # 'in' (rest). We leave the next byte from 'in' into 'Look' on exit. get-num: # in: (addr buffered-file), out: (addr stream byte), err: fd or (addr stream byte), ed: (addr exit-descriptor) # pseudocode: # if (!digit?(Look)) expected(ed, err, "integer") # if out->write >= out->size # write(err, "Error: too many digits in number\n") # stop(ed, 1) # out->data[out->write] = LSB(Look) # ++out->write # Look = get-char(in) # # registers: # in: esi # out: edi # out->write: ecx (cached copy; need to keep in sync) # out->size: edx # temporaries: eax, ebx # We can't allocate Look to a register because it gets written implicitly in # get-char in each iteration of the loop. (Thereby demonstrating that it's # not the right interface for us. But we'll keep it just to follow Crenshaw.) # # . prologue 55/push-ebp 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp # - if (digit?(Look)) expected(ed, err, "integer") # . eax = digit?(Look) # . . push args ff 6/subop/push 0/mod/indirect 5/rm32/.disp32 . . . Look/disp32 . # push *Look # . . call e8/call digit?/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp # . if (eax == false) 3d/compare-eax-and 0/imm32/false 75/jump-if-!= $get-num:main/disp8 # . expected(ed, err, "integer") # . . push args 68/push "integer"/imm32 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x10/disp8 . # push *(ebp+16) ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x14/disp8 . # push *(ebp+20) # . . call e8/call expected/disp32 # never returns # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp $get-num:main: # - otherwise read a digit # . save registers 50/push-eax 51/push-ecx 52/push-edx 53/push-ebx 56/push-esi 57/push-edi # read necessary variables to registers # esi = in 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 . # copy *(ebp+8) to esi # edi = out 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 7/r32/edi 0xc/disp8 . # copy *(ebp+12) to edi # ecx = out->write 8b/copy 0/mod/indirect 7/rm32/edi . . . 1/r32/ecx . . # copy *edi to ecx # edx = out->size 8b/copy 1/mod/*+disp8 7/rm32/edi . . . 2/r32/edx 8/disp8 . # copy *(edi+8) to edx $get-num:loop: # if (out->write >= out->size) error 39/compare 3/mod/direct 2/rm32/edx . . . 1/r32/ecx . . # compare edx with ecx 7d/jump-if-< $get-num:stage2/disp8 # . error(ed, err, msg) # TODO: show full number # . . push args 68/push "get-num: too many digits in number"/imm32 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x10/disp8 . # push *(ebp+16) ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x14/disp8 . # push *(ebp+20) # . . call e8/call error/disp32 # never returns # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp $get-num:stage2: # out->data[out->write] = LSB(Look) 8d/copy-address 1/mod/*+disp8 4/rm32/sib 7/base/edi 1/index/ecx . 3/r32/ebx 0xc/disp8 . # copy edi+ecx+12 to ebx 8b/copy 0/mod/indirect 5/rm32/.disp32 . . 0/r32/eax Look/disp32 . # copy *Look to eax 88/copy-byte 0/mod/indirect 3/rm32/ebx . . . 0/r32/AL . . # copy byte at AL to *ebx # ++out->write 41/increment-ecx # Look = get-char(in) # . . push args 56/push-esi # . . call e8/call get-char/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp $get-num:loop-end: # persist necessary variables from registers 89/copy 0/mod/indirect 7/rm32/edi . . . 1/r32/ecx . . # copy ecx to *edi $get-num:end: # . restore registers 5f/pop-to-edi 5e/pop-to-esi 5b/pop-to-ebx 5a/pop-to-edx 59/pop-to-ecx 58/pop-to-eax # . epilogue 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . . # copy ebp to esp 5d/pop-to-ebp c3/return test-get-num-reads-single-digit: # - check that get-num returns first character if it's a digit # This test uses exit-descriptors. Use ebp for setting up local variables. 55/push-ebp 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp # clear all streams # . clear-stream(_test-stream) # . . push args 68/push _test-stream/imm32 # . . call e8/call clear-stream/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp # . clear-stream($_test-buffered-file->buffer) # . . push args 68/push $_test-buffered-file->buffer/imm32 # . . call e8/call clear-stream/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp # . clear-stream(_test-output-stream) # . . push args 68/push _test-output-stream/imm32 # . . call e8/call clear-stream/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp # . clear-stream(_test-error-stream) # . . push args 68/push _test-error-stream/imm32 # . . call e8/call clear-stream/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp # initialize 'in' # . write(_test-stream, "3") # . . push args 68/push "3"/imm32 68/push _test-stream/imm32 # . . call e8/call write/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp # initialize exit-descriptor 'ed' for the call to 'get-num' below # . var ed/eax: exit-descriptor 81 5/subop/subtract 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # subtract from esp 89/copy 3/mod/direct 0/rm32/eax . . . 4/r32/esp . . # copy esp to eax # . tailor-exit-descriptor(ed, 16) # . . push args 68/push 0x10/imm32/nbytes-of-args-for-get-num 50/push-eax/ed # . . call e8/call tailor-exit-descriptor/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp # prime the pump # . get-char(_test-buffered-file) # . . push args 68/push _test-buffered-file/imm32 # . . call e8/call get-char/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp # get-num(in, out, err, ed) # . . push args 50/push-eax/ed 68/push _test-error-stream/imm32 68/push _test-output-stream/imm32 68/push _test-buffered-file/imm32 # . . call e8/call get-num/disp32 # registers except esp may be clobbered at this point # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32 # add to esp # check-ints-equal(*_test-output-stream->data, '3', msg) # . . push args 68/push "F - test-get-num-reads-single-digit"/imm32 68/push 0x33/imm32 b8/copy-to-eax _test-output-stream/imm32 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 0xc/disp8 . # push *(eax+12) # . . call e8/call check-ints-equal/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp # . reclaim locals 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp 5d/pop-to-ebp c3/return test-get-num-aborts-on-non-digit-in-Look: # - check that get-num returns first character if it's a digit # This test uses exit-descriptors. Use ebp for setting up local variables. 55/push-ebp 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp # clear all streams # . clear-stream(_test-stream) # . . push args 68/push _test-stream/imm32 # . . call e8/call clear-stream/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp # . clear-stream($_test-buffered-file->buffer) # . . push args 68/push $_test-buffered-file->buffer/imm32 # . . call e8/call clear-stream/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp # . clear-stream(_test-output-stream) # . . push args 68/push _test-output-stream/imm32 # . . call e8/call clear-stream/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp # . clear-stream(_test-error-stream) # . . push args 68/push _test-error-stream/imm32 # . . call e8/call clear-stream/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp # initialize 'in' # . write(_test-stream, "3") # . . push args 68/push "3"/imm32 68/push _test-stream/imm32 # . . call e8/call write/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp # initialize exit-descriptor 'ed' for the call to 'get-num' below # . var ed/eax: exit-descriptor 81 5/subop/subtract 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # subtract from esp 89/copy 3/mod/direct 0/rm32/eax . . . 4/r32/esp . . # copy esp to eax # . tailor-exit-descriptor(ed, 16) # . . push args 68/push 0x10/imm32/nbytes-of-args-for-get-num 50/push-eax/ed # . . call e8/call tailor-exit-descriptor/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp # *don't* prime the pump # get-num(in, out, err, ed) # . . push args 50/push-eax/ed 68/push _test-error-stream/imm32 68/push _test-output-stream/imm32 68/push _test-buffered-file/imm32 # . . call e8/call get-num/disp32 # registers except esp may be clobbered at this point # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32 # add to esp # check that get-num tried to call exit(1) # . check-ints-equal(ed->value, 2, msg) # i.e. stop was called with value 1 # . . push args 68/push "F - test-get-num-aborts-on-non-digit-in-Look"/imm32 68/push 2/imm32 # . . push ed->value ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 . # push *(eax+4) # . . call e8/call check-ints-equal/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp # . reclaim locals 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp 5d/pop-to-ebp c3/return ## helpers # write(f, "Error: "+s+" expected\n") then stop(ed, 1) expected: # ed: (addr exit-descriptor), f: fd or (addr stream byte), s: (addr array byte) # . prologue 55/push-ebp 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp # write(f, "Error: ") # . . push args 68/push "Error: "/imm32 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 . # push *(ebp+12) # . . call e8/call write/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp # write(f, s) # . . push args ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x10/disp8 . # push *(ebp+16) ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 . # push *(ebp+12) # . . call e8/call write/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp # write(f, " expected\n") # . . push args 68/push " expected\n"/imm32 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 . # push *(ebp+12) # . . call e8/call write/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp # stop(ed, 1) # . . push args 68/push 1/imm32 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 . # push *(ebp+8) # . . call e8/call stop/disp32 # should never get past this point $expected:dead-end: # . epilogue 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . . # copy ebp to esp 5d/pop-to-ebp c3/return # read a byte from 'f', and save it in 'Look' get-char: # f: (addr buffered-file) # . prologue 55/push-ebp 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp # . save registers 50/push-eax # eax = read-byte-buffered(f) # . . push args ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 . # push *(ebp+8) # . . call e8/call read-byte-buffered/disp32 # . . discard args 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp # save eax to Look 89/copy 0/mod/indirect 5/rm32/.disp32 . . 0/r32/eax Look/disp32 . # copy eax to *Look $get-char:end: # . restore registers 58/pop-to-eax # . epilogue 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . . # copy ebp to esp 5d/pop-to-ebp c3/return digit?: # c: int -> eax: boolean # . prologue 55/push-ebp 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp # eax = false b8/copy-to-eax 0/imm32 # if (c < '0') return false 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 0x30/imm32 # compare *(ebp+8) 7c/jump-if-< $digit?:end/disp8 # if (c > '9') return false 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 0x39/imm32 # compare *(ebp+8) 7f/jump-if-> $digit?:end/disp8 # otherwise return true b8/copy-to-eax 1/imm32 $digit?:end: # . epilogue 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . . # copy ebp to esp 5d/pop-to-ebp c3/return == data Look: # (char with some extra padding) 0/imm32 # . . vim:nowrap:textwidth=0