https://github.com/akkartik/mu/blob/main/115write-byte.subx
1
2
3
4
5
6 == code
7
8
9
10
11
12 append-byte:
13
14 55/push-ebp
15 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
16
17 50/push-eax
18 51/push-ecx
19 57/push-edi
20
21 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 7/r32/edi 8/disp8 .
22
23 8b/copy 0/mod/indirect 7/rm32/edi . . . 1/r32/ecx . .
24
25 3b/compare 1/mod/*+disp8 7/rm32/edi . . . 1/r32/ecx 8/disp8 .
26 7d/jump-if->= $append-byte:abort/disp8
27 $append-byte:to-stream:
28
29
30 31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . .
31 8a/copy-byte 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/AL 0xc/disp8 .
32 88/copy-byte 1/mod/*+disp8 4/rm32/sib 7/base/edi 1/index/ecx . 0/r32/AL 0xc/disp8 .
33
34 ff 0/subop/increment 0/mod/indirect 7/rm32/edi . . . . . .
35 $append-byte:end:
36
37 5f/pop-to-edi
38 59/pop-to-ecx
39 58/pop-to-eax
40
41 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
42 5d/pop-to-ebp
43 c3/return
44
45 $append-byte:abort:
46 (draw-text-wrapping-right-then-down-from-cursor-over-full-screen 0 "append-byte: out of space\n" 3 0)
47 {
48 eb/jump loop/disp8
49 }
50
51
52 test-append-byte-single:
53
54
55
56
57 68/push _test-stream/imm32
58
59 e8/call clear-stream/disp32
60
61 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
62
63
64 68/push 0x41/imm32
65 68/push _test-stream/imm32
66
67 e8/call append-byte/disp32
68
69 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
70
71
72 68/push "F - test-append-byte-single"/imm32
73 68/push "A"/imm32
74 68/push _test-stream/imm32
75
76 e8/call check-stream-equal/disp32
77
78 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
79
80 c3/return
81
82