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 (abort "append-byte: out of space")
47
48
49 test-append-byte-single:
50
51
52
53
54 68/push _test-stream/imm32
55
56 e8/call clear-stream/disp32
57
58 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
59
60
61 68/push 0x41/imm32
62 68/push _test-stream/imm32
63
64 e8/call append-byte/disp32
65
66 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
67
68
69 68/push "F - test-append-byte-single"/imm32
70 68/push "A"/imm32
71 68/push _test-stream/imm32
72
73 e8/call check-stream-equal/disp32
74
75 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
76
77 c3/return
78
79 undo-append-byte:
80
81 55/push-ebp
82 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
83
84 50/push-eax
85
86 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 8/disp8 .
87
88 81 7/subop/compare 0/mod/indirect 0/rm32/eax . . . . . 0/imm32
89 7e/jump-if-<= $undo-append-byte:abort/disp8
90
91 ff 1/subop/decrement 0/mod/indirect 0/rm32/eax . . . . . .
92 $undo-append-byte:end:
93
94 58/pop-to-eax
95
96 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
97 5d/pop-to-ebp
98 c3/return
99
100 $undo-append-byte:abort:
101 (abort "undo-append-byte: empty stream")
102
103
104