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