4thステップで作成したkzload.elfの実行形式ファイルをアセンブラのプログラムに逆変換(逆アセンブル)してアセンブリ言語をみてみることにします。
H8のアセンブリ言語の内容が知りたいのであるなら本に詳しく書いてあります。
ここではコメントを軽くします。(コメント箇所に★をつけました)
フレーム・ポインタ
kzload.elf: file format elf32-h8300
Disassembly of section .text:
00000100 <_start>:
100: 7a 07 00 ff mov.l #0xffff00,er7
104: ff 00
106: 5e 00 01 0c jsr @0x10c:24
0000010a <.L11>:
10a: 40 fe bra .-2 (0x10a)
0000010c <_main>:
10c: 01 00 6d f6 mov.l er6,@-er7
★@はC言語でいう*みたい
ER7はスタックポインタとして機能し、その指す先にER6の値を格納しています。
@-er7のようにあったマークを利よして記述すると、レジスタの値をアドレス値として、そのアドレスが指す先のメモリという意味になります。このようなメモリ参照をアドレス参照といいます。このようなメモリ参照はレジスタ間接と呼ばれ、メモリ参照の方法を一般にアドレッシング・モードといいます。
スタック操作は一命令で行われる必要があり、このように不可分な処理を「これ以上分けてはいけない」という意味で、一般にアトミックと呼びます。
110: 0f f6 mov.l er7,er6
★アドレスコピー
スタックポインタであるER7の値をER6にコピーしています。ER6はフレーム・ポインタと呼ばれる使われ方をしており、スタックフレームの先頭を指します。スタック上に獲得された自動変数は、フレームポインタであるER6を起点にしてアドレス計算することで、読み書きすることができます。
112: 1b 97 subs #4,er7
★アドレス・ポインタ移動
スタック・ポインタであるER7をさらに4バイト原産することで、4バイトの領域をスタック上に確保しています。4という即値を扱う場合、アセンブラでは「#」とつけて表現するようです。
114: 1b 97 subs #4,er7
116: 01 00 6d f4 mov.l er4,@-er7
11a: 01 00 6d f5 mov.l er5,@-er7
11e: 7a 02 00 ff mov.l #0xfffc34,er2
122: fc 34
124: 7a 32 00 ff sub.l #0xfffc20,er2
128: fc 20
12a: 7a 01 00 00 mov.l #0x7f0,er1
12e: 07 f0
130: 7a 00 00 ff mov.l #0xfffc20,er0
134: fc 20
136: 5e 00 02 c2 jsr @0x2c2:24
13a: 7a 02 00 ff mov.l #0xfffc4e,er2
13e: fc 4e
140: 7a 32 00 ff sub.l #0xfffc34,er2
144: fc 34
146: 19 11 sub.w r1,r1
148: 7a 00 00 ff mov.l #0xfffc34,er0
14c: fc 34
14e: 5e 00 02 a8 jsr @0x2a8:24
152: 79 00 00 01 mov.w #0x1,r0
156: 5e 00 04 f0 jsr @0x4f0:24
15a: 7a 00 00 00 mov.l #0x758,er0
15e: 07 58
00000160 <.L36>:
160: 5e 00 04 2e jsr @0x42e:24
164: 7a 00 00 00 mov.l #0x77d,er0
168: 07 7d
16a: 5e 00 04 2e jsr @0x42e:24
16e: 7a 00 00 ff mov.l #0xfffc34,er0
172: fc 34
174: 5e 00 04 52 jsr @0x452:24
178: 7a 01 00 00 mov.l #0x786,er1
17c: 07 86
17e: 7a 00 00 ff mov.l #0xfffc34,er0
182: fc 34
184: 5e 00 03 5c jsr @0x35c:24
188: 0d 00 mov.w r0,r0
18a: 46 60 bne .+96 (0x1ec)
18c: 7a 00 00 ff mov.l #0xffdf20,er0
190: df 20
192: 01 00 6b a0 mov.l er0,@0xfffc44:32
196: 00 ff fc 44
19a: 5e 00 06 0e jsr @0x60e:24
19e: 17 f0 exts.l er0
1a0: 01 00 6b a0 mov.l er0,@0xfffc24:32
1a4: 00 ff fc 24
1a8: 1a a2 sub.l er2,er2
1aa: 01 00 6f e2 mov.l er2,@(0xfffc:16,er6)
1ae: ff fc
000001b0 <.L33>:
1b0: 01 00 6f 62 mov.l @(0xfffc:16,er6),er2
1b4: ff fc
1b6: 7a 22 00 04 cmp.l #0x493df,er2
1ba: 93 df
1bc: 4e 10 bgt .+16 (0x1ce)
1be: 0f e2 mov.l er6,er2
1c0: 1b 92 subs #4,er2
1c2: 01 00 69 23 mov.l @er2,er3
1c6: 0b 03 adds #1,er3
★
スタック・ポインタを1バイト加算することで、er3の領域を開放しています。
1c8: 01 00 69 a3 mov.l er3,@er2
1cc: 40 e2 bra .-30 (0x1b0)
000001ce <.L26>:
1ce: 01 00 6b 22 mov.l @0xfffc24:32,er2
1d2: 00 ff fc 24
1d6: 4c 0a bge .+10 (0x1e2)
1d8: 7a 00 00 00 mov.l #0x78b,er0
1dc: 07 8b
1de: 58 00 ff 7e bra .-130 (0x160)
000001e2 <.L11>:
1e2: 7a 00 00 00 mov.l #0x7a3,er0
1e6: 07 a3
1e8: 58 00 ff 74 bra .-140 (0x160)
000001ec <.L5>:
1ec: 7a 01 00 00 mov.l #0x7bf,er1
1f0: 07 bf
1f2: 7a 00 00 ff mov.l #0xfffc34,er0
1f6: fc 34
1f8: 5e 00 03 5c jsr @0x35c:24
1fc: 0d 00 mov.w r0,r0
1fe: 58 60 00 9c bne .+156 (0x29e)
202: 7a 00 00 00 mov.l #0x7c4,er0
206: 07 c4
208: 5e 00 04 2e jsr @0x42e:24
20c: 19 11 sub.w r1,r1
20e: 01 00 6b 20 mov.l @0xfffc24:32,er0
212: 00 ff fc 24
216: 5e 00 04 8c jsr @0x48c:24
21a: 7a 00 00 00 mov.l #0x7bd,er0
21e: 07 bd
220: 5e 00 04 2e jsr @0x42e:24
224: 01 00 6b 22 mov.l @0xfffc44:32,er2
228: 00 ff fc 44
22c: 01 00 6f e2 mov.l er2,@(0xfff8:16,er6)
230: ff f8
232: 01 00 6b 24 mov.l @0xfffc24:32,er4
236: 00 ff fc 24
23a: 4c 0a bge .+10 (0x246)
23c: 7a 00 00 00 mov.l #0x7cb,er0
240: 07 cb
242: 58 00 ff 1a bra .-230 (0x160)
00000246 <.L15>:
246: 1a d5 sub.l er5,er5
00000248 <.L34>:
248: 1f c5 cmp.l er4,er5
24a: 4c 18 bge .+24 (0x264)
24c: 01 00 6f 62 mov.l @(0xfff8:16,er6),er2
250: ff f8
252: 0a d2 add.l er5,er2
254: 79 01 00 02 mov.w #0x2,r1
258: 1a 80 sub.l er0,er0
25a: 68 28 mov.b @er2,r0l
25c: 5e 00 04 8c jsr @0x48c:24
260: 0b 05 adds #1,er5
262: 40 e4 bra .-28 (0x248)
00000264 <.L28>:
264: 1a a2 sub.l er2,er2
266: 0c da mov.b r5l,r2l
268: ea 0f and.b #0xf,r2l
26a: 7a 22 00 00 cmp.l #0xf,er2
26e: 00 0f
270: 46 08 bne .+8 (0x27a)
272: 7a 00 00 00 mov.l #0x7bd,er0
276: 07 bd
278: 40 16 bra .+22 (0x290)
0000027a <.L21>:
27a: da 07 xor.b #0x7,r2l
27c: 0f a2 mov.l er2,er2
27e: 46 0a bne .+10 (0x28a)
280: 7a 00 00 00 mov.l #0x7c9,er0
284: 07 c9
286: 5e 00 04 2e jsr @0x42e:24
0000028a <.L23>:
28a: 7a 00 00 00 mov.l #0x7c9,er0
28e: 07 c9
00000290 <.L35>:
290: 5e 00 04 2e jsr @0x42e:24
294: 7a 00 00 00 mov.l #0x7bd,er0
298: 07 bd
29a: 58 00 fe c2 bra .-318 (0x160)
0000029e <.L14>:
29e: 7a 00 00 00 mov.l #0x7d5,er0
2a2: 07 d5
2a4: 58 00 fe b8 bra .-328 (0x160)
000002a8 <_memset>:
2a8: 01 00 6d f6 mov.l er6,@-er7
2ac: 0f f6 mov.l er7,er6
2ae: 0f 83 mov.l er0,er3
000002b0 <.L8>:
2b0: 0f a2 mov.l er2,er2
2b2: 4f 08 ble .+8 (0x2bc)
2b4: 68 b9 mov.b r1l,@er3
2b6: 0b 03 adds #1,er3
2b8: 1b 02 subs #1,er2
2ba: 40 f4 bra .-12 (0x2b0)
000002bc <.L7>:
2bc: 01 00 6d 76 mov.l @er7+,er6
2c0: 54 70 rts
000002c2 <_memcpy>:
2c2: 01 00 6d f6 mov.l er6,@-er7
2c6: 0f f6 mov.l er7,er6
2c8: 01 00 6d f4 mov.l er4,@-er7
2cc: 0f 84 mov.l er0,er4
2ce: 0f a3 mov.l er2,er3
000002d0 <.L16>:
2d0: 0f b3 mov.l er3,er3
2d2: 4f 0a ble .+10 (0x2de)
2d4: 6c 1a mov.b @er1+,r2l
2d6: 68 8a mov.b r2l,@er0
2d8: 0b 00 adds #1,er0
2da: 1b 03 subs #1,er3
2dc: 40 f2 bra .-14 (0x2d0)
000002de <.L15>:
2de: 0f c0 mov.l er4,er0
2e0: 01 00 6d 74 mov.l @er7+,er4
2e4: 01 00 6d 76 mov.l @er7+,er6
★スタック上に退避されていたER6の値をER6に読み込みと説明されているが、恐らくER7の値を読み込んでいるのではないのかなぁ。ロード後にスタック・ポインタであるER7は4バイト加算されます。
2e8: 54 70 rts
★
関数の呼び出し元に戻ります。実は「jsr」による関数呼び出しを行うと、現在実行中の命令の次のアドレスがスタック上に自動的に保存されてから関数にジャンプします。関数の終端では「rts」を実行すると、スタック上から戻り先アドレスを取得し、そこにジャンプすることで、呼び出し元に戻ります。
000002ea <_memcmp>:
2ea: 01 00 6d f6 mov.l er6,@-er7
2ee: 0f f6 mov.l er7,er6
2f0: 01 00 6d f4 mov.l er4,@-er7
2f4: 0f 84 mov.l er0,er4
000002f6 <.L27>:
2f6: 0f a2 mov.l er2,er2
2f8: 4f 1e ble .+30 (0x318)
2fa: 68 48 mov.b @er4,r0l
2fc: 68 1b mov.b @er1,r3l
2fe: 1c b8 cmp.b r3l,r0l
300: 47 0e beq .+14 (0x310)
302: 43 06 bls .+6 (0x30a)
304: 79 00 00 01 mov.w #0x1,r0
308: 40 10 bra .+16 (0x31a)
0000030a <.L22>:
30a: 79 00 ff ff mov.w #0xffff,r0
30e: 40 0a bra .+10 (0x31a)
00000310 <.L21>:
310: 0b 04 adds #1,er4
312: 0b 01 adds #1,er1
314: 1b 02 subs #1,er2
316: 40 de bra .-34 (0x2f6)
00000318 <.L26>:
318: 19 00 sub.w r0,r0
0000031a <.L17>:
31a: 01 00 6d 74 mov.l @er7+,er4
31e: 01 00 6d 76 mov.l @er7+,er6
322: 54 70 rts
00000324 <_strlen>:
324: 01 00 6d f6 mov.l er6,@-er7
328: 0f f6 mov.l er7,er6
32a: 19 33 sub.w r3,r3
0000032c <.L35>:
32c: 68 0a mov.b @er0,r2l
32e: 47 06 beq .+6 (0x336)
330: 0b 00 adds #1,er0
332: 0b 03 adds #1,er3
334: 40 f6 bra .-10 (0x32c)
00000336 <.L34>:
336: 0d 30 mov.w r3,r0
338: 01 00 6d 76 mov.l @er7+,er6
33c: 54 70 rts
0000033e <_strcpy>:
33e: 01 00 6d f6 mov.l er6,@-er7
342: 0f f6 mov.l er7,er6
344: 0f 83 mov.l er0,er3
00000346 <.L37>:
346: 68 1a mov.b @er1,r2l
348: 68 8a mov.b r2l,@er0
34a: 68 1a mov.b @er1,r2l
34c: 47 06 beq .+6 (0x354)
34e: 0b 00 adds #1,er0
350: 0b 01 adds #1,er1
352: 40 f2 bra .-14 (0x346)
00000354 <.L38>:
354: 0f b0 mov.l er3,er0
356: 01 00 6d 76 mov.l @er7+,er6
35a: 54 70 rts
0000035c <_strcmp>:
35c: 01 00 6d f6 mov.l er6,@-er7
360: 0f f6 mov.l er7,er6
00000362 <.L55>:
362: 68 0a mov.b @er0,r2l
364: 46 04 bne .+4 (0x36a)
366: 68 1a mov.b @er1,r2l
368: 47 1c beq .+28 (0x386)
0000036a <.L53>:
36a: 68 0b mov.b @er0,r3l
36c: 68 1a mov.b @er1,r2l
36e: 1c ab cmp.b r2l,r3l
370: 47 0e beq .+14 (0x380)
372: 43 06 bls .+6 (0x37a)
374: 79 00 00 01 mov.w #0x1,r0
378: 40 0e bra .+14 (0x388)
0000037a <.L46>:
37a: 79 00 ff ff mov.w #0xffff,r0
37e: 40 08 bra .+8 (0x388)
00000380 <.L45>:
380: 0b 00 adds #1,er0
382: 0b 01 adds #1,er1
384: 40 dc bra .-36 (0x362)
00000386 <.L50>:
386: 19 00 sub.w r0,r0
00000388 <.L41>:
388: 01 00 6d 76 mov.l @er7+,er6
38c: 54 70 rts
0000038e <_strncmp>:
38e: 01 00 6d f6 mov.l er6,@-er7
392: 0f f6 mov.l er7,er6
394: 01 00 6d f4 mov.l er4,@-er7
398: 0f 84 mov.l er0,er4
39a: 0d 20 mov.w r2,r0
39c: 40 1a bra .+26 (0x3b8)
0000039e <.L63>:
39e: 68 1a mov.b @er1,r2l
3a0: 1c ab cmp.b r2l,r3l
3a2: 47 0e beq .+14 (0x3b2)
3a4: 43 06 bls .+6 (0x3ac)
3a6: 79 00 00 01 mov.w #0x1,r0
3aa: 40 1a bra .+26 (0x3c6)
000003ac <.L61>:
3ac: 79 00 ff ff mov.w #0xffff,r0
3b0: 40 14 bra .+20 (0x3c6)
000003b2 <.L60>:
3b2: 0b 04 adds #1,er4
3b4: 0b 01 adds #1,er1
3b6: 1b 00 subs #1,er0
000003b8 <.L57>:
3b8: 68 4b mov.b @er4,r3l
3ba: 46 04 bne .+4 (0x3c0)
3bc: 68 1a mov.b @er1,r2l
3be: 47 04 beq .+4 (0x3c4)
000003c0 <.L59>:
3c0: 0d 00 mov.w r0,r0
3c2: 4e da bgt .-38 (0x39e)
000003c4 <.L58>:
3c4: 19 00 sub.w r0,r0
000003c6 <.L56>:
3c6: 01 00 6d 74 mov.l @er7+,er4
3ca: 01 00 6d 76 mov.l @er7+,er6
3ce: 54 70 rts
000003d0 <_putc>:
3d0: 01 00 6d f6 mov.l er6,@-er7
3d4: 0f f6 mov.l er7,er6
3d6: 01 00 6d f4 mov.l er4,@-er7
3da: 0c 8c mov.b r0l,r4l
3dc: a8 0a cmp.b #0xa,r0l
3de: 46 0a bne .+10 (0x3ea)
3e0: f9 0d mov.b #0xd,r1l
3e2: 79 00 00 01 mov.w #0x1,r0
3e6: 5e 00 05 4a jsr @0x54a:24
000003ea <.L65>:
3ea: 0c c9 mov.b r4l,r1l
3ec: 79 00 00 01 mov.w #0x1,r0
3f0: 5e 00 05 4a jsr @0x54a:24
3f4: 01 00 6d 74 mov.l @er7+,er4
3f8: 01 00 6d 76 mov.l @er7+,er6
3fc: 54 70 rts
000003fe <_getc>:
3fe: 01 00 6d f6 mov.l er6,@-er7
402: 0f f6 mov.l er7,er6
404: 01 00 6d f4 mov.l er4,@-er7
408: 79 00 00 01 mov.w #0x1,r0
40c: 5e 00 05 c4 jsr @0x5c4:24
410: a8 0d cmp.b #0xd,r0l
412: 47 04 beq .+4 (0x418)
414: 0c 8c mov.b r0l,r4l
416: 40 02 bra .+2 (0x41a)
00000418 <.L67>:
418: fc 0a mov.b #0xa,r4l
0000041a <.L68>:
41a: 0c c8 mov.b r4l,r0l
41c: 5e 00 03 d0 jsr @0x3d0:24
420: 0c c8 mov.b r4l,r0l
422: 17 50 extu.w r0
424: 01 00 6d 74 mov.l @er7+,er4
428: 01 00 6d 76 mov.l @er7+,er6
42c: 54 70 rts
0000042e <_puts>:
42e: 01 00 6d f6 mov.l er6,@-er7
432: 0f f6 mov.l er7,er6
434: 01 00 6d f4 mov.l er4,@-er7
438: 0f 84 mov.l er0,er4
0000043a <.L75>:
43a: 68 4a mov.b @er4,r2l
43c: 47 08 beq .+8 (0x446)
43e: 6c 48 mov.b @er4+,r0l
440: 5e 00 03 d0 jsr @0x3d0:24
444: 40 f4 bra .-12 (0x43a)
00000446 <.L74>:
446: 19 00 sub.w r0,r0
448: 01 00 6d 74 mov.l @er7+,er4
44c: 01 00 6d 76 mov.l @er7+,er6
450: 54 70 rts
00000452 <_gets>:
452: 01 00 6d f6 mov.l er6,@-er7
456: 0f f6 mov.l er7,er6
458: 01 00 6d f4 mov.l er4,@-er7
45c: 01 00 6d f5 mov.l er5,@-er7
460: 0f 85 mov.l er0,er5
462: 19 44 sub.w r4,r4
00000464 <.L77>:
464: 5e 00 03 fe jsr @0x3fe:24
468: a8 0a cmp.b #0xa,r0l
46a: 46 02 bne .+2 (0x46e)
46c: 18 88 sub.b r0l,r0l
0000046e <.L80>:
46e: 0d 42 mov.w r4,r2
470: 17 f2 exts.l er2
472: 0a d2 add.l er5,er2
474: 68 a8 mov.b r0l,@er2
476: 0b 04 adds #1,er4
478: 46 ea bne .-22 (0x464)
47a: 0d 40 mov.w r4,r0
47c: 1b 00 subs #1,er0
47e: 01 00 6d 75 mov.l @er7+,er5
482: 01 00 6d 74 mov.l @er7+,er4
486: 01 00 6d 76 mov.l @er7+,er6
48a: 54 70 rts
0000048c <_putxval>:
48c: 01 00 6d f6 mov.l er6,@-er7
490: 0f f6 mov.l er7,er6
492: 7a 17 ff ff add.l #0xfffffff4,er7
496: ff f4
498: 18 aa sub.b r2l,r2l
49a: 6e ea ff fc mov.b r2l,@(0xfffc:16,er6)
49e: 0f e3 mov.l er6,er3
4a0: 1b 93 subs #4,er3
4a2: 1b 03 subs #1,er3
4a4: 0f 80 mov.l er0,er0
4a6: 46 06 bne .+6 (0x4ae)
4a8: 0d 11 mov.w r1,r1
4aa: 46 02 bne .+2 (0x4ae)
4ac: 0b 01 adds #1,er1
000004ae <.L94>:
4ae: 1a a2 sub.l er2,er2
4b0: 0c 8a mov.b r0l,r2l
4b2: ea 0f and.b #0xf,r2l
4b4: 78 20 6a 2a mov.b @(0x7df:32,er2),r2l
4b8: 00 00 07 df
4bc: 68 ba mov.b r2l,@er3
4be: 1b 03 subs #1,er3
4c0: 0f 82 mov.l er0,er2
4c2: 11 32 shlr.l er2
4c4: 11 32 shlr.l er2
4c6: 11 32 shlr.l er2
4c8: 11 32 shlr.l er2
4ca: 0f a0 mov.l er2,er0
4cc: 0d 11 mov.w r1,r1
4ce: 47 02 beq .+2 (0x4d2)
4d0: 1b 01 subs #1,er1
000004d2 <.L83>:
4d2: 0f a2 mov.l er2,er2
4d4: 46 d8 bne .-40 (0x4ae)
4d6: 0d 11 mov.w r1,r1
4d8: 46 d4 bne .-44 (0x4ae)
4da: 0f b0 mov.l er3,er0
4dc: 0b 00 adds #1,er0
4de: 5e 00 04 2e jsr @0x42e:24
4e2: 19 00 sub.w r0,r0
4e4: 7a 17 00 00 add.l #0xc,er7
4e8: 00 0c
4ea: 01 00 6d 76 mov.l @er7+,er6
4ee: 54 70 rts
000004f0 <_serial_init>:
4f0: 01 00 6d f6 mov.l er6,@-er7
4f4: 0f f6 mov.l er7,er6
4f6: 17 f0 exts.l er0
4f8: 10 30 shll.l er0
4fa: 10 30 shll.l er0
4fc: 01 00 78 00 mov.l @(0xfffc28:32,er0),er3
500: 6b 23 00 ff
504: fc 28
506: 18 88 sub.b r0l,r0l
508: 6e b8 00 02 mov.b r0l,@(0x2:16,er3)
50c: 68 b8 mov.b r0l,@er3
50e: fa 40 mov.b #0x40,r2l
510: 6e ba 00 01 mov.b r2l,@(0x1:16,er3)
514: fa 30 mov.b #0x30,r2l
516: 6e ba 00 02 mov.b r2l,@(0x2:16,er3)
51a: 6e b8 00 04 mov.b r0l,@(0x4:16,er3)
51e: 19 00 sub.w r0,r0
520: 01 00 6d 76 mov.l @er7+,er6
524: 54 70 rts
00000526 <_serial_is_send_enable>:
526: 01 00 6d f6 mov.l er6,@-er7
52a: 0f f6 mov.l er7,er6
52c: 17 f0 exts.l er0
52e: 10 30 shll.l er0
530: 10 30 shll.l er0
532: 01 00 78 00 mov.l @(0xfffc28:32,er0),er2
536: 6b 22 00 ff
53a: fc 28
53c: 6e 28 00 04 mov.b @(0x4:16,er2),r0l
540: 79 60 00 80 and.w #0x80,r0
544: 01 00 6d 76 mov.l @er7+,er6
548: 54 70 rts
0000054a <_serial_send_byte>:
54a: 01 00 6d f6 mov.l er6,@-er7
54e: 0f f6 mov.l er7,er6
550: 1b 97 subs #4,er7
552: 01 00 6d f4 mov.l er4,@-er7
556: 01 00 6d f5 mov.l er5,@-er7
55a: 0d 05 mov.w r0,r5
55c: 6e e9 ff ff mov.b r1l,@(0xffff:16,er6)
560: 0d 02 mov.w r0,r2
562: 17 f2 exts.l er2
564: 10 32 shll.l er2
566: 10 32 shll.l er2
568: 01 00 78 20 mov.l @(0xfffc28:32,er2),er4
56c: 6b 24 00 ff
570: fc 28
00000572 <.L4>:
572: 0d 50 mov.w r5,r0
574: 5e 00 05 26 jsr @0x526:24
578: 0d 00 mov.w r0,r0
57a: 47 f6 beq .-10 (0x572)
57c: 6e 6a ff ff mov.b @(0xffff:16,er6),r2l
580: 6e ca 00 03 mov.b r2l,@(0x3:16,er4)
584: 6e 4a 00 04 mov.b @(0x4:16,er4),r2l
588: ea 7f and.b #0x7f,r2l
58a: 6e ca 00 04 mov.b r2l,@(0x4:16,er4)
58e: 19 00 sub.w r0,r0
590: 01 00 6d 75 mov.l @er7+,er5
594: 01 00 6d 74 mov.l @er7+,er4
598: 0b 97 adds #4,er7
59a: 01 00 6d 76 mov.l @er7+,er6
59e: 54 70 rts
000005a0 <_serial_is_recv_enable>:
5a0: 01 00 6d f6 mov.l er6,@-er7
5a4: 0f f6 mov.l er7,er6
5a6: 17 f0 exts.l er0
5a8: 10 30 shll.l er0
5aa: 10 30 shll.l er0
5ac: 01 00 78 00 mov.l @(0xfffc28:32,er0),er2
5b0: 6b 22 00 ff
5b4: fc 28
5b6: 6e 28 00 04 mov.b @(0x4:16,er2),r0l
5ba: 79 60 00 40 and.w #0x40,r0
5be: 01 00 6d 76 mov.l @er7+,er6
5c2: 54 70 rts
000005c4 <_serial_recv_byte>:
5c4: 01 00 6d f6 mov.l er6,@-er7
5c8: 0f f6 mov.l er7,er6
5ca: 01 00 6d f4 mov.l er4,@-er7
5ce: 01 00 6d f5 mov.l er5,@-er7
5d2: 0d 05 mov.w r0,r5
5d4: 0d 02 mov.w r0,r2
5d6: 17 f2 exts.l er2
5d8: 10 32 shll.l er2
5da: 10 32 shll.l er2
5dc: 01 00 78 20 mov.l @(0xfffc28:32,er2),er4
5e0: 6b 24 00 ff
5e4: fc 28
000005e6 <.L8>:
5e6: 0d 50 mov.w r5,r0
5e8: 5e 00 05 a0 jsr @0x5a0:24
5ec: 0d 00 mov.w r0,r0
5ee: 47 f6 beq .-10 (0x5e6)
5f0: 6e 48 00 05 mov.b @(0x5:16,er4),r0l
5f4: 6e 4a 00 04 mov.b @(0x4:16,er4),r2l
5f8: ea bf and.b #0xbf,r2l
5fa: 6e ca 00 04 mov.b r2l,@(0x4:16,er4)
5fe: 17 50 extu.w r0
600: 01 00 6d 75 mov.l @er7+,er5
604: 01 00 6d 74 mov.l @er7+,er4
608: 01 00 6d 76 mov.l @er7+,er6
60c: 54 70 rts
0000060e <_xmodem_recv>:
60e: 01 00 6d f6 mov.l er6,@-er7
612: 0f f6 mov.l er7,er6
614: 7a 17 ff ff add.l #0xfffffff0,er7
618: ff f0
61a: 01 00 6d f4 mov.l er4,@-er7
61e: 01 00 6d f5 mov.l er5,@-er7
622: 01 00 6f e0 mov.l er0,@(0xfffc:16,er6)
626: ff fc
628: 19 22 sub.w r2,r2
62a: 6f e2 ff fa mov.w r2,@(0xfffa:16,er6)
62e: 1a b3 sub.l er3,er3
630: 01 00 6f e3 mov.l er3,@(0xfff4:16,er6)
634: ff f4
636: 8a 01 add.b #0x1,r2l
638: 6e ea ff f3 mov.b r2l,@(0xfff3:16,er6)
0000063c <.L39>:
63c: 6f 63 ff fa mov.w @(0xfffa:16,er6),r3
640: 46 26 bne .+38 (0x668)
642: 1a c4 sub.l er4,er4
644: 40 16 bra .+22 (0x65c)
00000646 <.L8>:
646: 0b 04 adds #1,er4
648: 7a 24 00 1e cmp.l #0x1e847f,er4
64c: 84 7f
64e: 4f 0c ble .+12 (0x65c)
650: 1a c4 sub.l er4,er4
652: f9 15 mov.b #0x15,r1l
654: 79 00 00 01 mov.w #0x1,r0
658: 5e 00 05 4a jsr @0x54a:24
0000065c <.L40>:
65c: 79 00 00 01 mov.w #0x1,r0
660: 5e 00 05 a0 jsr @0x5a0:24
664: 0d 00 mov.w r0,r0
666: 47 de beq .-34 (0x646)
00000668 <.L4>:
668: 79 00 00 01 mov.w #0x1,r0
66c: 5e 00 05 c4 jsr @0x5c4:24
670: a8 04 cmp.b #0x4,r0l
672: 58 70 00 be beq .+190 (0x734)
676: a8 18 cmp.b #0x18,r0l
678: 58 70 00 b2 beq .+178 (0x72e)
67c: a8 01 cmp.b #0x1,r0l
67e: 58 60 00 a4 bne .+164 (0x726)
682: 6f 62 ff fa mov.w @(0xfffa:16,er6),r2
686: 0b 02 adds #1,er2
688: 6f e2 ff fa mov.w r2,@(0xfffa:16,er6)
68c: 01 00 6f 64 mov.l @(0xfffc:16,er6),er4
690: ff fc
692: 79 00 00 01 mov.w #0x1,r0
696: 5e 00 05 c4 jsr @0x5c4:24
69a: 6e 6b ff f3 mov.b @(0xfff3:16,er6),r3l
69e: 1c b8 cmp.b r3l,r0l
6a0: 46 76 bne .+118 (0x718)
6a2: 79 00 00 01 mov.w #0x1,r0
6a6: 5e 00 05 c4 jsr @0x5c4:24
6aa: 6e 6a ff f3 mov.b @(0xfff3:16,er6),r2l
6ae: 15 8a xor.b r0l,r2l
6b0: aa ff cmp.b #0xff,r2l
6b2: 46 64 bne .+100 (0x718)
6b4: 18 aa sub.b r2l,r2l
6b6: 6e ea ff f2 mov.b r2l,@(0xfff2:16,er6)
6ba: 79 05 00 7f mov.w #0x7f,r5
000006be <.L21>:
6be: 79 00 00 01 mov.w #0x1,r0
6c2: 5e 00 05 c4 jsr @0x5c4:24
6c6: 68 c8 mov.b r0l,@er4
6c8: 0b 04 adds #1,er4
6ca: 6e 6b ff f2 mov.b @(0xfff2:16,er6),r3l
6ce: 08 8b add.b r0l,r3l
6d0: 6e eb ff f2 mov.b r3l,@(0xfff2:16,er6)
6d4: 1b 05 subs #1,er5
6d6: 0d 55 mov.w r5,r5
6d8: 4c e4 bge .-28 (0x6be)
6da: 79 00 00 01 mov.w #0x1,r0
6de: 5e 00 05 c4 jsr @0x5c4:24
6e2: 6e 6a ff f2 mov.b @(0xfff2:16,er6),r2l
6e6: 1c 8a cmp.b r0l,r2l
6e8: 46 2e bne .+46 (0x718)
6ea: 6e 6b ff f3 mov.b @(0xfff3:16,er6),r3l
6ee: 8b 01 add.b #0x1,r3l
6f0: 6e eb ff f3 mov.b r3l,@(0xfff3:16,er6)
6f4: 1a a2 sub.l er2,er2
6f6: 8a 80 add.b #0x80,r2l
6f8: 01 00 6f 63 mov.l @(0xfff4:16,er6),er3
6fc: ff f4
6fe: 0a a3 add.l er2,er3
700: 01 00 6f e3 mov.l er3,@(0xfff4:16,er6)
704: ff f4
706: 01 00 6f 63 mov.l @(0xfffc:16,er6),er3
70a: ff fc
70c: 0a a3 add.l er2,er3
70e: 01 00 6f e3 mov.l er3,@(0xfffc:16,er6)
712: ff fc
714: f9 06 mov.b #0x6,r1l
716: 40 02 bra .+2 (0x71a)
00000718 <.L30>:
718: f9 15 mov.b #0x15,r1l
0000071a <.L37>:
71a: 79 00 00 01 mov.w #0x1,r0
71e: 5e 00 05 4a jsr @0x54a:24
722: 58 00 ff 16 bra .-234 (0x63c)
00000726 <.L14>:
726: 6f 62 ff fa mov.w @(0xfffa:16,er6),r2
72a: 58 70 ff 0e beq .-242 (0x63c)
0000072e <.L38>:
72e: 1a 80 sub.l er0,er0
730: 1b 00 subs #1,er0
732: 40 10 bra .+16 (0x744)
00000734 <.L27>:
734: f9 06 mov.b #0x6,r1l
736: 79 00 00 01 mov.w #0x1,r0
73a: 5e 00 05 4a jsr @0x54a:24
73e: 01 00 6f 60 mov.l @(0xfff4:16,er6),er0
742: ff f4
00000744 <.L1>:
744: 01 00 6d 75 mov.l @er7+,er5
748: 01 00 6d 74 mov.l @er7+,er4
74c: 7a 17 00 00 add.l #0x10,er7
750: 00 10
752: 01 00 6d 76 mov.l @er7+,er6
756: 54 70 rts
H8のアセンブリ言語の内容が知りたいのであるなら本に詳しく書いてあります。
ここではコメントを軽くします。(コメント箇所に★をつけました)
フレーム・ポインタ
kzload.elf: file format elf32-h8300
Disassembly of section .text:
00000100 <_start>:
100: 7a 07 00 ff mov.l #0xffff00,er7
104: ff 00
106: 5e 00 01 0c jsr @0x10c:24
0000010a <.L11>:
10a: 40 fe bra .-2 (0x10a)
0000010c <_main>:
10c: 01 00 6d f6 mov.l er6,@-er7
★@はC言語でいう*みたい
ER7はスタックポインタとして機能し、その指す先にER6の値を格納しています。
@-er7のようにあったマークを利よして記述すると、レジスタの値をアドレス値として、そのアドレスが指す先のメモリという意味になります。このようなメモリ参照をアドレス参照といいます。このようなメモリ参照はレジスタ間接と呼ばれ、メモリ参照の方法を一般にアドレッシング・モードといいます。
スタック操作は一命令で行われる必要があり、このように不可分な処理を「これ以上分けてはいけない」という意味で、一般にアトミックと呼びます。
110: 0f f6 mov.l er7,er6
★アドレスコピー
スタックポインタであるER7の値をER6にコピーしています。ER6はフレーム・ポインタと呼ばれる使われ方をしており、スタックフレームの先頭を指します。スタック上に獲得された自動変数は、フレームポインタであるER6を起点にしてアドレス計算することで、読み書きすることができます。
112: 1b 97 subs #4,er7
★アドレス・ポインタ移動
スタック・ポインタであるER7をさらに4バイト原産することで、4バイトの領域をスタック上に確保しています。4という即値を扱う場合、アセンブラでは「#」とつけて表現するようです。
114: 1b 97 subs #4,er7
116: 01 00 6d f4 mov.l er4,@-er7
11a: 01 00 6d f5 mov.l er5,@-er7
11e: 7a 02 00 ff mov.l #0xfffc34,er2
122: fc 34
124: 7a 32 00 ff sub.l #0xfffc20,er2
128: fc 20
12a: 7a 01 00 00 mov.l #0x7f0,er1
12e: 07 f0
130: 7a 00 00 ff mov.l #0xfffc20,er0
134: fc 20
136: 5e 00 02 c2 jsr @0x2c2:24
13a: 7a 02 00 ff mov.l #0xfffc4e,er2
13e: fc 4e
140: 7a 32 00 ff sub.l #0xfffc34,er2
144: fc 34
146: 19 11 sub.w r1,r1
148: 7a 00 00 ff mov.l #0xfffc34,er0
14c: fc 34
14e: 5e 00 02 a8 jsr @0x2a8:24
152: 79 00 00 01 mov.w #0x1,r0
156: 5e 00 04 f0 jsr @0x4f0:24
15a: 7a 00 00 00 mov.l #0x758,er0
15e: 07 58
00000160 <.L36>:
160: 5e 00 04 2e jsr @0x42e:24
164: 7a 00 00 00 mov.l #0x77d,er0
168: 07 7d
16a: 5e 00 04 2e jsr @0x42e:24
16e: 7a 00 00 ff mov.l #0xfffc34,er0
172: fc 34
174: 5e 00 04 52 jsr @0x452:24
178: 7a 01 00 00 mov.l #0x786,er1
17c: 07 86
17e: 7a 00 00 ff mov.l #0xfffc34,er0
182: fc 34
184: 5e 00 03 5c jsr @0x35c:24
188: 0d 00 mov.w r0,r0
18a: 46 60 bne .+96 (0x1ec)
18c: 7a 00 00 ff mov.l #0xffdf20,er0
190: df 20
192: 01 00 6b a0 mov.l er0,@0xfffc44:32
196: 00 ff fc 44
19a: 5e 00 06 0e jsr @0x60e:24
19e: 17 f0 exts.l er0
1a0: 01 00 6b a0 mov.l er0,@0xfffc24:32
1a4: 00 ff fc 24
1a8: 1a a2 sub.l er2,er2
1aa: 01 00 6f e2 mov.l er2,@(0xfffc:16,er6)
1ae: ff fc
000001b0 <.L33>:
1b0: 01 00 6f 62 mov.l @(0xfffc:16,er6),er2
1b4: ff fc
1b6: 7a 22 00 04 cmp.l #0x493df,er2
1ba: 93 df
1bc: 4e 10 bgt .+16 (0x1ce)
1be: 0f e2 mov.l er6,er2
1c0: 1b 92 subs #4,er2
1c2: 01 00 69 23 mov.l @er2,er3
1c6: 0b 03 adds #1,er3
★
スタック・ポインタを1バイト加算することで、er3の領域を開放しています。
1c8: 01 00 69 a3 mov.l er3,@er2
1cc: 40 e2 bra .-30 (0x1b0)
000001ce <.L26>:
1ce: 01 00 6b 22 mov.l @0xfffc24:32,er2
1d2: 00 ff fc 24
1d6: 4c 0a bge .+10 (0x1e2)
1d8: 7a 00 00 00 mov.l #0x78b,er0
1dc: 07 8b
1de: 58 00 ff 7e bra .-130 (0x160)
000001e2 <.L11>:
1e2: 7a 00 00 00 mov.l #0x7a3,er0
1e6: 07 a3
1e8: 58 00 ff 74 bra .-140 (0x160)
000001ec <.L5>:
1ec: 7a 01 00 00 mov.l #0x7bf,er1
1f0: 07 bf
1f2: 7a 00 00 ff mov.l #0xfffc34,er0
1f6: fc 34
1f8: 5e 00 03 5c jsr @0x35c:24
1fc: 0d 00 mov.w r0,r0
1fe: 58 60 00 9c bne .+156 (0x29e)
202: 7a 00 00 00 mov.l #0x7c4,er0
206: 07 c4
208: 5e 00 04 2e jsr @0x42e:24
20c: 19 11 sub.w r1,r1
20e: 01 00 6b 20 mov.l @0xfffc24:32,er0
212: 00 ff fc 24
216: 5e 00 04 8c jsr @0x48c:24
21a: 7a 00 00 00 mov.l #0x7bd,er0
21e: 07 bd
220: 5e 00 04 2e jsr @0x42e:24
224: 01 00 6b 22 mov.l @0xfffc44:32,er2
228: 00 ff fc 44
22c: 01 00 6f e2 mov.l er2,@(0xfff8:16,er6)
230: ff f8
232: 01 00 6b 24 mov.l @0xfffc24:32,er4
236: 00 ff fc 24
23a: 4c 0a bge .+10 (0x246)
23c: 7a 00 00 00 mov.l #0x7cb,er0
240: 07 cb
242: 58 00 ff 1a bra .-230 (0x160)
00000246 <.L15>:
246: 1a d5 sub.l er5,er5
00000248 <.L34>:
248: 1f c5 cmp.l er4,er5
24a: 4c 18 bge .+24 (0x264)
24c: 01 00 6f 62 mov.l @(0xfff8:16,er6),er2
250: ff f8
252: 0a d2 add.l er5,er2
254: 79 01 00 02 mov.w #0x2,r1
258: 1a 80 sub.l er0,er0
25a: 68 28 mov.b @er2,r0l
25c: 5e 00 04 8c jsr @0x48c:24
260: 0b 05 adds #1,er5
262: 40 e4 bra .-28 (0x248)
00000264 <.L28>:
264: 1a a2 sub.l er2,er2
266: 0c da mov.b r5l,r2l
268: ea 0f and.b #0xf,r2l
26a: 7a 22 00 00 cmp.l #0xf,er2
26e: 00 0f
270: 46 08 bne .+8 (0x27a)
272: 7a 00 00 00 mov.l #0x7bd,er0
276: 07 bd
278: 40 16 bra .+22 (0x290)
0000027a <.L21>:
27a: da 07 xor.b #0x7,r2l
27c: 0f a2 mov.l er2,er2
27e: 46 0a bne .+10 (0x28a)
280: 7a 00 00 00 mov.l #0x7c9,er0
284: 07 c9
286: 5e 00 04 2e jsr @0x42e:24
0000028a <.L23>:
28a: 7a 00 00 00 mov.l #0x7c9,er0
28e: 07 c9
00000290 <.L35>:
290: 5e 00 04 2e jsr @0x42e:24
294: 7a 00 00 00 mov.l #0x7bd,er0
298: 07 bd
29a: 58 00 fe c2 bra .-318 (0x160)
0000029e <.L14>:
29e: 7a 00 00 00 mov.l #0x7d5,er0
2a2: 07 d5
2a4: 58 00 fe b8 bra .-328 (0x160)
000002a8 <_memset>:
2a8: 01 00 6d f6 mov.l er6,@-er7
2ac: 0f f6 mov.l er7,er6
2ae: 0f 83 mov.l er0,er3
000002b0 <.L8>:
2b0: 0f a2 mov.l er2,er2
2b2: 4f 08 ble .+8 (0x2bc)
2b4: 68 b9 mov.b r1l,@er3
2b6: 0b 03 adds #1,er3
2b8: 1b 02 subs #1,er2
2ba: 40 f4 bra .-12 (0x2b0)
000002bc <.L7>:
2bc: 01 00 6d 76 mov.l @er7+,er6
2c0: 54 70 rts
000002c2 <_memcpy>:
2c2: 01 00 6d f6 mov.l er6,@-er7
2c6: 0f f6 mov.l er7,er6
2c8: 01 00 6d f4 mov.l er4,@-er7
2cc: 0f 84 mov.l er0,er4
2ce: 0f a3 mov.l er2,er3
000002d0 <.L16>:
2d0: 0f b3 mov.l er3,er3
2d2: 4f 0a ble .+10 (0x2de)
2d4: 6c 1a mov.b @er1+,r2l
2d6: 68 8a mov.b r2l,@er0
2d8: 0b 00 adds #1,er0
2da: 1b 03 subs #1,er3
2dc: 40 f2 bra .-14 (0x2d0)
000002de <.L15>:
2de: 0f c0 mov.l er4,er0
2e0: 01 00 6d 74 mov.l @er7+,er4
2e4: 01 00 6d 76 mov.l @er7+,er6
★スタック上に退避されていたER6の値をER6に読み込みと説明されているが、恐らくER7の値を読み込んでいるのではないのかなぁ。ロード後にスタック・ポインタであるER7は4バイト加算されます。
2e8: 54 70 rts
★
関数の呼び出し元に戻ります。実は「jsr」による関数呼び出しを行うと、現在実行中の命令の次のアドレスがスタック上に自動的に保存されてから関数にジャンプします。関数の終端では「rts」を実行すると、スタック上から戻り先アドレスを取得し、そこにジャンプすることで、呼び出し元に戻ります。
000002ea <_memcmp>:
2ea: 01 00 6d f6 mov.l er6,@-er7
2ee: 0f f6 mov.l er7,er6
2f0: 01 00 6d f4 mov.l er4,@-er7
2f4: 0f 84 mov.l er0,er4
000002f6 <.L27>:
2f6: 0f a2 mov.l er2,er2
2f8: 4f 1e ble .+30 (0x318)
2fa: 68 48 mov.b @er4,r0l
2fc: 68 1b mov.b @er1,r3l
2fe: 1c b8 cmp.b r3l,r0l
300: 47 0e beq .+14 (0x310)
302: 43 06 bls .+6 (0x30a)
304: 79 00 00 01 mov.w #0x1,r0
308: 40 10 bra .+16 (0x31a)
0000030a <.L22>:
30a: 79 00 ff ff mov.w #0xffff,r0
30e: 40 0a bra .+10 (0x31a)
00000310 <.L21>:
310: 0b 04 adds #1,er4
312: 0b 01 adds #1,er1
314: 1b 02 subs #1,er2
316: 40 de bra .-34 (0x2f6)
00000318 <.L26>:
318: 19 00 sub.w r0,r0
0000031a <.L17>:
31a: 01 00 6d 74 mov.l @er7+,er4
31e: 01 00 6d 76 mov.l @er7+,er6
322: 54 70 rts
00000324 <_strlen>:
324: 01 00 6d f6 mov.l er6,@-er7
328: 0f f6 mov.l er7,er6
32a: 19 33 sub.w r3,r3
0000032c <.L35>:
32c: 68 0a mov.b @er0,r2l
32e: 47 06 beq .+6 (0x336)
330: 0b 00 adds #1,er0
332: 0b 03 adds #1,er3
334: 40 f6 bra .-10 (0x32c)
00000336 <.L34>:
336: 0d 30 mov.w r3,r0
338: 01 00 6d 76 mov.l @er7+,er6
33c: 54 70 rts
0000033e <_strcpy>:
33e: 01 00 6d f6 mov.l er6,@-er7
342: 0f f6 mov.l er7,er6
344: 0f 83 mov.l er0,er3
00000346 <.L37>:
346: 68 1a mov.b @er1,r2l
348: 68 8a mov.b r2l,@er0
34a: 68 1a mov.b @er1,r2l
34c: 47 06 beq .+6 (0x354)
34e: 0b 00 adds #1,er0
350: 0b 01 adds #1,er1
352: 40 f2 bra .-14 (0x346)
00000354 <.L38>:
354: 0f b0 mov.l er3,er0
356: 01 00 6d 76 mov.l @er7+,er6
35a: 54 70 rts
0000035c <_strcmp>:
35c: 01 00 6d f6 mov.l er6,@-er7
360: 0f f6 mov.l er7,er6
00000362 <.L55>:
362: 68 0a mov.b @er0,r2l
364: 46 04 bne .+4 (0x36a)
366: 68 1a mov.b @er1,r2l
368: 47 1c beq .+28 (0x386)
0000036a <.L53>:
36a: 68 0b mov.b @er0,r3l
36c: 68 1a mov.b @er1,r2l
36e: 1c ab cmp.b r2l,r3l
370: 47 0e beq .+14 (0x380)
372: 43 06 bls .+6 (0x37a)
374: 79 00 00 01 mov.w #0x1,r0
378: 40 0e bra .+14 (0x388)
0000037a <.L46>:
37a: 79 00 ff ff mov.w #0xffff,r0
37e: 40 08 bra .+8 (0x388)
00000380 <.L45>:
380: 0b 00 adds #1,er0
382: 0b 01 adds #1,er1
384: 40 dc bra .-36 (0x362)
00000386 <.L50>:
386: 19 00 sub.w r0,r0
00000388 <.L41>:
388: 01 00 6d 76 mov.l @er7+,er6
38c: 54 70 rts
0000038e <_strncmp>:
38e: 01 00 6d f6 mov.l er6,@-er7
392: 0f f6 mov.l er7,er6
394: 01 00 6d f4 mov.l er4,@-er7
398: 0f 84 mov.l er0,er4
39a: 0d 20 mov.w r2,r0
39c: 40 1a bra .+26 (0x3b8)
0000039e <.L63>:
39e: 68 1a mov.b @er1,r2l
3a0: 1c ab cmp.b r2l,r3l
3a2: 47 0e beq .+14 (0x3b2)
3a4: 43 06 bls .+6 (0x3ac)
3a6: 79 00 00 01 mov.w #0x1,r0
3aa: 40 1a bra .+26 (0x3c6)
000003ac <.L61>:
3ac: 79 00 ff ff mov.w #0xffff,r0
3b0: 40 14 bra .+20 (0x3c6)
000003b2 <.L60>:
3b2: 0b 04 adds #1,er4
3b4: 0b 01 adds #1,er1
3b6: 1b 00 subs #1,er0
000003b8 <.L57>:
3b8: 68 4b mov.b @er4,r3l
3ba: 46 04 bne .+4 (0x3c0)
3bc: 68 1a mov.b @er1,r2l
3be: 47 04 beq .+4 (0x3c4)
000003c0 <.L59>:
3c0: 0d 00 mov.w r0,r0
3c2: 4e da bgt .-38 (0x39e)
000003c4 <.L58>:
3c4: 19 00 sub.w r0,r0
000003c6 <.L56>:
3c6: 01 00 6d 74 mov.l @er7+,er4
3ca: 01 00 6d 76 mov.l @er7+,er6
3ce: 54 70 rts
000003d0 <_putc>:
3d0: 01 00 6d f6 mov.l er6,@-er7
3d4: 0f f6 mov.l er7,er6
3d6: 01 00 6d f4 mov.l er4,@-er7
3da: 0c 8c mov.b r0l,r4l
3dc: a8 0a cmp.b #0xa,r0l
3de: 46 0a bne .+10 (0x3ea)
3e0: f9 0d mov.b #0xd,r1l
3e2: 79 00 00 01 mov.w #0x1,r0
3e6: 5e 00 05 4a jsr @0x54a:24
000003ea <.L65>:
3ea: 0c c9 mov.b r4l,r1l
3ec: 79 00 00 01 mov.w #0x1,r0
3f0: 5e 00 05 4a jsr @0x54a:24
3f4: 01 00 6d 74 mov.l @er7+,er4
3f8: 01 00 6d 76 mov.l @er7+,er6
3fc: 54 70 rts
000003fe <_getc>:
3fe: 01 00 6d f6 mov.l er6,@-er7
402: 0f f6 mov.l er7,er6
404: 01 00 6d f4 mov.l er4,@-er7
408: 79 00 00 01 mov.w #0x1,r0
40c: 5e 00 05 c4 jsr @0x5c4:24
410: a8 0d cmp.b #0xd,r0l
412: 47 04 beq .+4 (0x418)
414: 0c 8c mov.b r0l,r4l
416: 40 02 bra .+2 (0x41a)
00000418 <.L67>:
418: fc 0a mov.b #0xa,r4l
0000041a <.L68>:
41a: 0c c8 mov.b r4l,r0l
41c: 5e 00 03 d0 jsr @0x3d0:24
420: 0c c8 mov.b r4l,r0l
422: 17 50 extu.w r0
424: 01 00 6d 74 mov.l @er7+,er4
428: 01 00 6d 76 mov.l @er7+,er6
42c: 54 70 rts
0000042e <_puts>:
42e: 01 00 6d f6 mov.l er6,@-er7
432: 0f f6 mov.l er7,er6
434: 01 00 6d f4 mov.l er4,@-er7
438: 0f 84 mov.l er0,er4
0000043a <.L75>:
43a: 68 4a mov.b @er4,r2l
43c: 47 08 beq .+8 (0x446)
43e: 6c 48 mov.b @er4+,r0l
440: 5e 00 03 d0 jsr @0x3d0:24
444: 40 f4 bra .-12 (0x43a)
00000446 <.L74>:
446: 19 00 sub.w r0,r0
448: 01 00 6d 74 mov.l @er7+,er4
44c: 01 00 6d 76 mov.l @er7+,er6
450: 54 70 rts
00000452 <_gets>:
452: 01 00 6d f6 mov.l er6,@-er7
456: 0f f6 mov.l er7,er6
458: 01 00 6d f4 mov.l er4,@-er7
45c: 01 00 6d f5 mov.l er5,@-er7
460: 0f 85 mov.l er0,er5
462: 19 44 sub.w r4,r4
00000464 <.L77>:
464: 5e 00 03 fe jsr @0x3fe:24
468: a8 0a cmp.b #0xa,r0l
46a: 46 02 bne .+2 (0x46e)
46c: 18 88 sub.b r0l,r0l
0000046e <.L80>:
46e: 0d 42 mov.w r4,r2
470: 17 f2 exts.l er2
472: 0a d2 add.l er5,er2
474: 68 a8 mov.b r0l,@er2
476: 0b 04 adds #1,er4
478: 46 ea bne .-22 (0x464)
47a: 0d 40 mov.w r4,r0
47c: 1b 00 subs #1,er0
47e: 01 00 6d 75 mov.l @er7+,er5
482: 01 00 6d 74 mov.l @er7+,er4
486: 01 00 6d 76 mov.l @er7+,er6
48a: 54 70 rts
0000048c <_putxval>:
48c: 01 00 6d f6 mov.l er6,@-er7
490: 0f f6 mov.l er7,er6
492: 7a 17 ff ff add.l #0xfffffff4,er7
496: ff f4
498: 18 aa sub.b r2l,r2l
49a: 6e ea ff fc mov.b r2l,@(0xfffc:16,er6)
49e: 0f e3 mov.l er6,er3
4a0: 1b 93 subs #4,er3
4a2: 1b 03 subs #1,er3
4a4: 0f 80 mov.l er0,er0
4a6: 46 06 bne .+6 (0x4ae)
4a8: 0d 11 mov.w r1,r1
4aa: 46 02 bne .+2 (0x4ae)
4ac: 0b 01 adds #1,er1
000004ae <.L94>:
4ae: 1a a2 sub.l er2,er2
4b0: 0c 8a mov.b r0l,r2l
4b2: ea 0f and.b #0xf,r2l
4b4: 78 20 6a 2a mov.b @(0x7df:32,er2),r2l
4b8: 00 00 07 df
4bc: 68 ba mov.b r2l,@er3
4be: 1b 03 subs #1,er3
4c0: 0f 82 mov.l er0,er2
4c2: 11 32 shlr.l er2
4c4: 11 32 shlr.l er2
4c6: 11 32 shlr.l er2
4c8: 11 32 shlr.l er2
4ca: 0f a0 mov.l er2,er0
4cc: 0d 11 mov.w r1,r1
4ce: 47 02 beq .+2 (0x4d2)
4d0: 1b 01 subs #1,er1
000004d2 <.L83>:
4d2: 0f a2 mov.l er2,er2
4d4: 46 d8 bne .-40 (0x4ae)
4d6: 0d 11 mov.w r1,r1
4d8: 46 d4 bne .-44 (0x4ae)
4da: 0f b0 mov.l er3,er0
4dc: 0b 00 adds #1,er0
4de: 5e 00 04 2e jsr @0x42e:24
4e2: 19 00 sub.w r0,r0
4e4: 7a 17 00 00 add.l #0xc,er7
4e8: 00 0c
4ea: 01 00 6d 76 mov.l @er7+,er6
4ee: 54 70 rts
000004f0 <_serial_init>:
4f0: 01 00 6d f6 mov.l er6,@-er7
4f4: 0f f6 mov.l er7,er6
4f6: 17 f0 exts.l er0
4f8: 10 30 shll.l er0
4fa: 10 30 shll.l er0
4fc: 01 00 78 00 mov.l @(0xfffc28:32,er0),er3
500: 6b 23 00 ff
504: fc 28
506: 18 88 sub.b r0l,r0l
508: 6e b8 00 02 mov.b r0l,@(0x2:16,er3)
50c: 68 b8 mov.b r0l,@er3
50e: fa 40 mov.b #0x40,r2l
510: 6e ba 00 01 mov.b r2l,@(0x1:16,er3)
514: fa 30 mov.b #0x30,r2l
516: 6e ba 00 02 mov.b r2l,@(0x2:16,er3)
51a: 6e b8 00 04 mov.b r0l,@(0x4:16,er3)
51e: 19 00 sub.w r0,r0
520: 01 00 6d 76 mov.l @er7+,er6
524: 54 70 rts
00000526 <_serial_is_send_enable>:
526: 01 00 6d f6 mov.l er6,@-er7
52a: 0f f6 mov.l er7,er6
52c: 17 f0 exts.l er0
52e: 10 30 shll.l er0
530: 10 30 shll.l er0
532: 01 00 78 00 mov.l @(0xfffc28:32,er0),er2
536: 6b 22 00 ff
53a: fc 28
53c: 6e 28 00 04 mov.b @(0x4:16,er2),r0l
540: 79 60 00 80 and.w #0x80,r0
544: 01 00 6d 76 mov.l @er7+,er6
548: 54 70 rts
0000054a <_serial_send_byte>:
54a: 01 00 6d f6 mov.l er6,@-er7
54e: 0f f6 mov.l er7,er6
550: 1b 97 subs #4,er7
552: 01 00 6d f4 mov.l er4,@-er7
556: 01 00 6d f5 mov.l er5,@-er7
55a: 0d 05 mov.w r0,r5
55c: 6e e9 ff ff mov.b r1l,@(0xffff:16,er6)
560: 0d 02 mov.w r0,r2
562: 17 f2 exts.l er2
564: 10 32 shll.l er2
566: 10 32 shll.l er2
568: 01 00 78 20 mov.l @(0xfffc28:32,er2),er4
56c: 6b 24 00 ff
570: fc 28
00000572 <.L4>:
572: 0d 50 mov.w r5,r0
574: 5e 00 05 26 jsr @0x526:24
578: 0d 00 mov.w r0,r0
57a: 47 f6 beq .-10 (0x572)
57c: 6e 6a ff ff mov.b @(0xffff:16,er6),r2l
580: 6e ca 00 03 mov.b r2l,@(0x3:16,er4)
584: 6e 4a 00 04 mov.b @(0x4:16,er4),r2l
588: ea 7f and.b #0x7f,r2l
58a: 6e ca 00 04 mov.b r2l,@(0x4:16,er4)
58e: 19 00 sub.w r0,r0
590: 01 00 6d 75 mov.l @er7+,er5
594: 01 00 6d 74 mov.l @er7+,er4
598: 0b 97 adds #4,er7
59a: 01 00 6d 76 mov.l @er7+,er6
59e: 54 70 rts
000005a0 <_serial_is_recv_enable>:
5a0: 01 00 6d f6 mov.l er6,@-er7
5a4: 0f f6 mov.l er7,er6
5a6: 17 f0 exts.l er0
5a8: 10 30 shll.l er0
5aa: 10 30 shll.l er0
5ac: 01 00 78 00 mov.l @(0xfffc28:32,er0),er2
5b0: 6b 22 00 ff
5b4: fc 28
5b6: 6e 28 00 04 mov.b @(0x4:16,er2),r0l
5ba: 79 60 00 40 and.w #0x40,r0
5be: 01 00 6d 76 mov.l @er7+,er6
5c2: 54 70 rts
000005c4 <_serial_recv_byte>:
5c4: 01 00 6d f6 mov.l er6,@-er7
5c8: 0f f6 mov.l er7,er6
5ca: 01 00 6d f4 mov.l er4,@-er7
5ce: 01 00 6d f5 mov.l er5,@-er7
5d2: 0d 05 mov.w r0,r5
5d4: 0d 02 mov.w r0,r2
5d6: 17 f2 exts.l er2
5d8: 10 32 shll.l er2
5da: 10 32 shll.l er2
5dc: 01 00 78 20 mov.l @(0xfffc28:32,er2),er4
5e0: 6b 24 00 ff
5e4: fc 28
000005e6 <.L8>:
5e6: 0d 50 mov.w r5,r0
5e8: 5e 00 05 a0 jsr @0x5a0:24
5ec: 0d 00 mov.w r0,r0
5ee: 47 f6 beq .-10 (0x5e6)
5f0: 6e 48 00 05 mov.b @(0x5:16,er4),r0l
5f4: 6e 4a 00 04 mov.b @(0x4:16,er4),r2l
5f8: ea bf and.b #0xbf,r2l
5fa: 6e ca 00 04 mov.b r2l,@(0x4:16,er4)
5fe: 17 50 extu.w r0
600: 01 00 6d 75 mov.l @er7+,er5
604: 01 00 6d 74 mov.l @er7+,er4
608: 01 00 6d 76 mov.l @er7+,er6
60c: 54 70 rts
0000060e <_xmodem_recv>:
60e: 01 00 6d f6 mov.l er6,@-er7
612: 0f f6 mov.l er7,er6
614: 7a 17 ff ff add.l #0xfffffff0,er7
618: ff f0
61a: 01 00 6d f4 mov.l er4,@-er7
61e: 01 00 6d f5 mov.l er5,@-er7
622: 01 00 6f e0 mov.l er0,@(0xfffc:16,er6)
626: ff fc
628: 19 22 sub.w r2,r2
62a: 6f e2 ff fa mov.w r2,@(0xfffa:16,er6)
62e: 1a b3 sub.l er3,er3
630: 01 00 6f e3 mov.l er3,@(0xfff4:16,er6)
634: ff f4
636: 8a 01 add.b #0x1,r2l
638: 6e ea ff f3 mov.b r2l,@(0xfff3:16,er6)
0000063c <.L39>:
63c: 6f 63 ff fa mov.w @(0xfffa:16,er6),r3
640: 46 26 bne .+38 (0x668)
642: 1a c4 sub.l er4,er4
644: 40 16 bra .+22 (0x65c)
00000646 <.L8>:
646: 0b 04 adds #1,er4
648: 7a 24 00 1e cmp.l #0x1e847f,er4
64c: 84 7f
64e: 4f 0c ble .+12 (0x65c)
650: 1a c4 sub.l er4,er4
652: f9 15 mov.b #0x15,r1l
654: 79 00 00 01 mov.w #0x1,r0
658: 5e 00 05 4a jsr @0x54a:24
0000065c <.L40>:
65c: 79 00 00 01 mov.w #0x1,r0
660: 5e 00 05 a0 jsr @0x5a0:24
664: 0d 00 mov.w r0,r0
666: 47 de beq .-34 (0x646)
00000668 <.L4>:
668: 79 00 00 01 mov.w #0x1,r0
66c: 5e 00 05 c4 jsr @0x5c4:24
670: a8 04 cmp.b #0x4,r0l
672: 58 70 00 be beq .+190 (0x734)
676: a8 18 cmp.b #0x18,r0l
678: 58 70 00 b2 beq .+178 (0x72e)
67c: a8 01 cmp.b #0x1,r0l
67e: 58 60 00 a4 bne .+164 (0x726)
682: 6f 62 ff fa mov.w @(0xfffa:16,er6),r2
686: 0b 02 adds #1,er2
688: 6f e2 ff fa mov.w r2,@(0xfffa:16,er6)
68c: 01 00 6f 64 mov.l @(0xfffc:16,er6),er4
690: ff fc
692: 79 00 00 01 mov.w #0x1,r0
696: 5e 00 05 c4 jsr @0x5c4:24
69a: 6e 6b ff f3 mov.b @(0xfff3:16,er6),r3l
69e: 1c b8 cmp.b r3l,r0l
6a0: 46 76 bne .+118 (0x718)
6a2: 79 00 00 01 mov.w #0x1,r0
6a6: 5e 00 05 c4 jsr @0x5c4:24
6aa: 6e 6a ff f3 mov.b @(0xfff3:16,er6),r2l
6ae: 15 8a xor.b r0l,r2l
6b0: aa ff cmp.b #0xff,r2l
6b2: 46 64 bne .+100 (0x718)
6b4: 18 aa sub.b r2l,r2l
6b6: 6e ea ff f2 mov.b r2l,@(0xfff2:16,er6)
6ba: 79 05 00 7f mov.w #0x7f,r5
000006be <.L21>:
6be: 79 00 00 01 mov.w #0x1,r0
6c2: 5e 00 05 c4 jsr @0x5c4:24
6c6: 68 c8 mov.b r0l,@er4
6c8: 0b 04 adds #1,er4
6ca: 6e 6b ff f2 mov.b @(0xfff2:16,er6),r3l
6ce: 08 8b add.b r0l,r3l
6d0: 6e eb ff f2 mov.b r3l,@(0xfff2:16,er6)
6d4: 1b 05 subs #1,er5
6d6: 0d 55 mov.w r5,r5
6d8: 4c e4 bge .-28 (0x6be)
6da: 79 00 00 01 mov.w #0x1,r0
6de: 5e 00 05 c4 jsr @0x5c4:24
6e2: 6e 6a ff f2 mov.b @(0xfff2:16,er6),r2l
6e6: 1c 8a cmp.b r0l,r2l
6e8: 46 2e bne .+46 (0x718)
6ea: 6e 6b ff f3 mov.b @(0xfff3:16,er6),r3l
6ee: 8b 01 add.b #0x1,r3l
6f0: 6e eb ff f3 mov.b r3l,@(0xfff3:16,er6)
6f4: 1a a2 sub.l er2,er2
6f6: 8a 80 add.b #0x80,r2l
6f8: 01 00 6f 63 mov.l @(0xfff4:16,er6),er3
6fc: ff f4
6fe: 0a a3 add.l er2,er3
700: 01 00 6f e3 mov.l er3,@(0xfff4:16,er6)
704: ff f4
706: 01 00 6f 63 mov.l @(0xfffc:16,er6),er3
70a: ff fc
70c: 0a a3 add.l er2,er3
70e: 01 00 6f e3 mov.l er3,@(0xfffc:16,er6)
712: ff fc
714: f9 06 mov.b #0x6,r1l
716: 40 02 bra .+2 (0x71a)
00000718 <.L30>:
718: f9 15 mov.b #0x15,r1l
0000071a <.L37>:
71a: 79 00 00 01 mov.w #0x1,r0
71e: 5e 00 05 4a jsr @0x54a:24
722: 58 00 ff 16 bra .-234 (0x63c)
00000726 <.L14>:
726: 6f 62 ff fa mov.w @(0xfffa:16,er6),r2
72a: 58 70 ff 0e beq .-242 (0x63c)
0000072e <.L38>:
72e: 1a 80 sub.l er0,er0
730: 1b 00 subs #1,er0
732: 40 10 bra .+16 (0x744)
00000734 <.L27>:
734: f9 06 mov.b #0x6,r1l
736: 79 00 00 01 mov.w #0x1,r0
73a: 5e 00 05 4a jsr @0x54a:24
73e: 01 00 6f 60 mov.l @(0xfff4:16,er6),er0
742: ff f4
00000744 <.L1>:
744: 01 00 6d 75 mov.l @er7+,er5
748: 01 00 6d 74 mov.l @er7+,er4
74c: 7a 17 00 00 add.l #0x10,er7
750: 00 10
752: 01 00 6d 76 mov.l @er7+,er6
756: 54 70 rts