MicroCorruption/18-Chernobyl/mc-disasm.asm

1185 lines
40 KiB
NASM

0010 <__trap_interrupt>
0010: 3041 ret
4400 <__init_stack>
4400: 3140 0044 mov #0x4400, sp
4404 <__low_level_init>
4404: 1542 5c01 mov &0x015c, r5
4408: 75f3 and.b #-0x1, r5
440a: 35d0 085a bis #0x5a08, r5
440e <__do_copy_data>
440e: 3f40 0600 mov #0x6, r15
4412: 0f93 tst r15
4414: 0724 jz $+0x10 <__do_clear_bss+0x0>
4416: 8245 5c01 mov r5, &0x015c
441a: 2f83 decd r15
441c: 9f4f 9e4d 0024 mov 0x4d9e(r15), 0x2400(r15)
4422: f923 jnz $-0xc <__do_copy_data+0x8>
4424 <__do_clear_bss>
4424: 3f40 0000 clr r15
4428: 0f93 tst r15
442a: 0624 jz $+0xe <main+0x0>
442c: 8245 5c01 mov r5, &0x015c
4430: 1f83 dec r15
4432: cf43 0624 mov.b #0x0, 0x2406(r15)
4436: fa23 jnz $-0xa <__do_clear_bss+0x8>
4438 <main>
4438: 3182 sub #0x8, sp
443a: b012 664b call #0x4b66 <run>
443e <__stop_progExec__>
443e: 32d0 f000 bis #0xf0, sr
4442: fd3f jmp $-0x4 <__stop_progExec__+0x0>
4444 <__ctors_end>
4444: 3040 9c4d br #0x4d9c <_unexpected_>
4448 <printf>
4448: 0b12 push r11
444a: 0a12 push r10
444c: 0912 push r9
444e: 0812 push r8
4450: 0712 push r7
4452: 0612 push r6
4454: 0412 push r4
4456: 0441 mov sp, r4
4458: 3450 0e00 add #0xe, r4
445c: 2183 decd sp
445e: 1b44 0200 mov 0x2(r4), r11
4462: 8441 f0ff mov sp, -0x10(r4)
4466: 0f4b mov r11, r15
4468: 0e43 clr r14
446a: 0b3c jmp $+0x18 <printf+0x3a>
446c: 1f53 inc r15
446e: 7d90 2500 cmp.b #0x25, r13
4472: 0720 jnz $+0x10 <printf+0x3a>
4474: 6d9f cmp.b @r15, r13
4476: 0320 jnz $+0x8 <printf+0x36>
4478: 1f53 inc r15
447a: 0d43 clr r13
447c: 013c jmp $+0x4 <printf+0x38>
447e: 1d43 mov #0x1, r13
4480: 0e5d add r13, r14
4482: 6d4f mov.b @r15, r13
4484: 4d93 tst.b r13
4486: f223 jnz $-0x1a <printf+0x24>
4488: 0f4e mov r14, r15
448a: 0f5f add r15, r15
448c: 2f53 incd r15
448e: 018f sub r15, sp
4490: 0941 mov sp, r9
4492: 0c44 mov r4, r12
4494: 2c52 add #0x4, r12
4496: 0f41 mov sp, r15
4498: 0d43 clr r13
449a: 053c jmp $+0xc <printf+0x5e>
449c: af4c 0000 mov @r12, 0x0(r15)
44a0: 1d53 inc r13
44a2: 2f53 incd r15
44a4: 2c53 incd r12
44a6: 0d9e cmp r14, r13
44a8: f93b jl $-0xc <printf+0x54>
44aa: 0a43 clr r10
44ac: 3640 0900 mov #0x9, r6
44b0: 4c3c jmp $+0x9a <printf+0x102>
44b2: 084b mov r11, r8
44b4: 1853 inc r8
44b6: 7f90 2500 cmp.b #0x25, r15
44ba: 0624 jz $+0xe <printf+0x80>
44bc: 1a53 inc r10
44be: 0b48 mov r8, r11
44c0: 8f11 sxt r15
44c2: b012 044d call #0x4d04 <putchar>
44c6: 413c jmp $+0x84 <printf+0x102>
44c8: 6e48 mov.b @r8, r14
44ca: 4e9f cmp.b r15, r14
44cc: 0620 jnz $+0xe <printf+0x92>
44ce: 1a53 inc r10
44d0: 3f40 2500 mov #0x25, r15
44d4: b012 044d call #0x4d04 <putchar>
44d8: 353c jmp $+0x6c <printf+0xfc>
44da: 7e90 7300 cmp.b #0x73, r14
44de: 0b20 jnz $+0x18 <printf+0xae>
44e0: 2b49 mov @r9, r11
44e2: 053c jmp $+0xc <printf+0xa6>
44e4: 1a53 inc r10
44e6: 1b53 inc r11
44e8: 8f11 sxt r15
44ea: b012 044d call #0x4d04 <putchar>
44ee: 6f4b mov.b @r11, r15
44f0: 4f93 tst.b r15
44f2: f823 jnz $-0xe <printf+0x9c>
44f4: 273c jmp $+0x50 <printf+0xfc>
44f6: 7e90 7800 cmp.b #0x78, r14
44fa: 1e20 jnz $+0x3e <printf+0xf0>
44fc: 2b49 mov @r9, r11
44fe: 2742 mov #0x4, r7
4500: 163c jmp $+0x2e <printf+0xe6>
4502: 0f4b mov r11, r15
4504: 8f10 swpb r15
4506: 3ff0 ff00 and #0xff, r15
450a: 12c3 clrc
450c: 0f10 rrc r15
450e: 0f11 rra r15
4510: 0f11 rra r15
4512: 0f11 rra r15
4514: 069f cmp r15, r6
4516: 0338 jl $+0x8 <printf+0xd6>
4518: 3f50 3000 add #0x30, r15
451c: 023c jmp $+0x6 <printf+0xda>
451e: 3f50 5700 add #0x57, r15
4522: b012 044d call #0x4d04 <putchar>
4526: 0b5b add r11, r11
4528: 0b5b add r11, r11
452a: 0b5b add r11, r11
452c: 0b5b add r11, r11
452e: 3753 add #-0x1, r7
4530: 3793 cmp #-0x1, r7
4532: e723 jnz $-0x30 <printf+0xba>
4534: 2a52 add #0x4, r10
4536: 063c jmp $+0xe <printf+0xfc>
4538: 7e90 6e00 cmp.b #0x6e, r14
453c: 0320 jnz $+0x8 <printf+0xfc>
453e: 2f49 mov @r9, r15
4540: 8f4a 0000 mov r10, 0x0(r15)
4544: 2953 incd r9
4546: 0b48 mov r8, r11
4548: 1b53 inc r11
454a: 6f4b mov.b @r11, r15
454c: 4f93 tst.b r15
454e: b123 jnz $-0x9c <printf+0x6a>
4550: 1144 f0ff mov -0x10(r4), sp
4554: 2153 incd sp
4556: 3441 pop r4
4558: 3641 pop r6
455a: 3741 pop r7
455c: 3841 pop r8
455e: 3941 pop r9
4560: 3a41 pop r10
4562: 3b41 pop r11
4564: 3041 ret
; Strings here:
; '\n\n'
4566: 0a0a push r10
; '@%x [alloc] [p %x] [n %x] [s %x]'
4568: 0040 br pc
456a: 2578 subc @r8, r5
456c: 205b add @r11, pc
456e: 616c addc.b @r12, sp
4570: 6c6f addc.b @r15, r12
4572: 635d add.b @r13, 4
4574: 205b add @r11, pc
4576: 7020 jnz $+0xe2 <walk+0x9e>
4578: 2578 subc @r8, r5
457a: 5d20 jnz $+0xbc <walk+0x7c>
457c: 5b6e 2025 addc.b 0x2520(r14), r11
4580: 785d add.b @r13+, r8
4582: 205b add @r11, pc
4584: 7320 jnz $+0xe8 <walk+0xb2>
4586: 2578 subc @r8, r5
4588: 5d0a 0020 push.b 0x2000(r13)
; ' {%x} [ ' ; 458b
458a: 0020 jnz $+0x2 <printf+0x144>
458c: 7b25 jz $+0x2f8 <add_to_table+0x52>
458e: 787d subc.b @r13+, r8
4590: 205b add @r11, pc
4592: 2000 rrc @pc
; '%x '
4594: 2578 subc @r8, r5
4596: 2000 rrc @pc
; '@%x [freed] [p %x] [n %x] [s %x]'
4598: 4025 jz $+0x282 <hash+0xc>
459a: 7820 jnz $+0xf2 <malloc+0x14>
459c: 5b66 7265 addc.b 0x6572(r6), r11
45a0: 6564 addc.b @r4, r5
45a2: 5d20 jnz $+0xbc <walk+0xa4>
45a4: 5b70 2025 subc.b 0x2520(pc), r11
45a8: 785d add.b @r13+, r8
45aa: 205b add @r11, pc
45ac: 6e20 jnz $+0xde <malloc+0x12>
45ae: 2578 subc @r8, r5
45b0: 5d20 jnz $+0xbc <walk+0xb2>
45b2: 5b73 subc.b #0x1, r11
45b4: 2025 jz $+0x242 <create_hash_table+0x7e>
45b6: 785d add.b @r13+, r8
45b8: 0a00 rrc r10
45ba <walk>
45ba: 0b12 push r11
45bc: 0a12 push r10
45be: 0912 push r9
45c0: 0b4f mov r15, r11
; "\n\n"
45c2: 3f40 6645 mov #0x4566, r15
45c6: b012 504d call #0x4d50 <puts>
45ca: 1f4b 0400 mov 0x4(r11), r15
45ce: 0e4f mov r15, r14
45d0: 1ef3 and #0x1, r14
45d2: 12c3 clrc
45d4: 0f10 rrc r15
45d6: 0e93 tst r14
45d8: 2e24 jz $+0x5e <walk+0x7c>
45da: 0f12 push r15
45dc: 1b12 0200 push 0x2(r11)
45e0: 2b12 push @r11
45e2: 0b12 push r11
; "%x [alloc] [p %x] [n %x] [s %x]"
45e4: 3012 6945 push #0x4569
; printf "r11 [alloc] [p @r11] [n @(r11+2)] [s r15]"
45e8: b012 4844 call #0x4448 <printf>
45ec: 3150 0a00 add #0xa, sp
45f0: 0a4b mov r11, r10
45f2: 3a50 0600 add #0x6, r10
45f6: 0a12 push r10
45f8: 3012 8b45 push #0x458b
; printf " {r10} [ "
45fc: b012 4844 call #0x4448 <printf>
4600: 2152 add #0x4, sp
4602: 0943 clr r9
4604: 083c jmp $+0x12 <walk+0x5c>
4606: 2a12 push @r10
4608: 3012 9445 push #0x4594
460c: b012 4844 call #0x4448 <printf>
4610: 2152 add #0x4, sp
4612: 1953 inc r9
4614: 2a53 incd r10
4616: 1f4b 0400 mov 0x4(r11), r15
461a: 12c3 clrc
461c: 0f10 rrc r15
461e: 0f11 rra r15
4620: 099f cmp r15, r9
4622: f12b jnc $-0x1c <walk+0x4c>
4624: 3f40 5d00 mov #0x5d, r15
4628: b012 044d call #0x4d04 <putchar>
462c: 3f40 0a00 mov #0xa, r15
4630: b012 044d call #0x4d04 <putchar>
4634: 0b3c jmp $+0x18 <walk+0x92>
4636: 0f12 push r15
4638: 1b12 0200 push 0x2(r11)
463c: 2b12 push @r11
463e: 0b12 push r11
4640: 3012 9845 push #0x4598
4644: b012 4844 call #0x4448 <printf>
4648: 3150 0a00 add #0xa, sp
464c: 1b4b 0200 mov 0x2(r11), r11
4650: 1b92 0024 cmp &0x2400, r11
4654: ba23 jnz $-0x8a <walk+0x10>
4656: 3941 pop r9
4658: 3a41 pop r10
465a: 3b41 pop r11
465c: 3041 ret
; String here:
; 'Heap exhausted; aborting.'
465e: 4865 addc.b r5, r8
4660: 6170 subc.b @pc, sp
4662: 2065 addc @r5, pc
4664: 7861 addc.b @sp+, r8
4666: 7573 subc.b #-0x1, r5
4668: 7465 addc.b @r5+, r4
466a: 643b jl $-0x136 <printf+0xec>
466c: 2061 addc @sp, pc
466e: 626f addc.b @r15, sr
4670: 7274 subc.b @r4+, sr
4672: 696e addc.b @r14, r9
4674: 672e jc $-0x330 <__none__+0x4344>
4676: 0000 rrc pc
4678 <malloc>
4678: 0b12 push r11
467a: c293 0424 tst.b &0x2404 ; if initialized:
467e: 0f24 jz $+0x20 <malloc+0x26> ; skip, else
4680: 1e42 0024 mov &0x2400, r14 ; initialize
4684: 8e4e 0000 mov r14, 0x0(r14)
4688: 8e4e 0200 mov r14, 0x2(r14)
468c: 1d42 0224 mov &0x2402, r13
4690: 3d50 faff add #0xfffa, r13
4694: 0d5d add r13, r13
4696: 8e4d 0400 mov r13, 0x4(r14)
469a: c243 0424 mov.b #0x0, &0x2404
; malloc+0x26:
469e: 1b42 0024 mov &0x2400, r11
46a2: 0e4b mov r11, r14
; malloc+0x2c
46a4: 1d4e 0400 mov 0x4(r14), r13
46a8: 1db3 bit #0x1, r13 ; if not-empty
46aa: 2820 jnz $+0x52 <malloc+0x84> ; skip, else
; check whether there's enough space in this freeblock to satisfy rq
46ac: 0c4d mov r13, r12
46ae: 12c3 clrc
46b0: 0c10 rrc r12
46b2: 0c9f cmp r15, r12
46b4: 2338 jl $+0x48 <malloc+0x84>
; Ensure the requested size plus header size is lt available space
46b6: 0b4f mov r15, r11
46b8: 3b50 0600 add #0x6, r11
46bc: 0c9b cmp r11, r12
46be: 042c jc $+0xa <malloc+0x50>
; Success! Allocate the memory
46c0: 1dd3 bis #0x1, r13
46c2: 8e4d 0400 mov r13, 0x4(r14)
46c6: 163c jmp $+0x2e <malloc+0x7c>
; malloc+0x50
46c8: 0d4f mov r15, r13
46ca: 0d5d add r13, r13
46cc: 1dd3 bis #0x1, r13
46ce: 8e4d 0400 mov r13, 0x4(r14)
46d2: 0d4e mov r14, r13
46d4: 3d50 0600 add #0x6, r13
46d8: 0d5f add r15, r13
46da: 8d4e 0000 mov r14, 0x0(r13)
46de: 9d4e 0200 0200 mov 0x2(r14), 0x2(r13)
46e4: 0c8f sub r15, r12
46e6: 3c50 faff add #0xfffa, r12
46ea: 0c5c add r12, r12
46ec: 8d4c 0400 mov r12, 0x4(r13)
46f0: 8e4d 0200 mov r13, 0x2(r14)
; malloc+0x7c
; Return the address of the new block
46f4: 0f4e mov r14, r15
46f6: 3f50 0600 add #0x6, r15
46fa: 0e3c jmp $+0x1e <malloc+0xa0> ; goto pop r11, ret
; malloc+0x84
; ensure r14->next - r14 is positive
46fc: 0d4e mov r14, r13
46fe: 1e4e 0200 mov 0x2(r14), r14
4702: 0e9d cmp r13, r14
4704: 0228 jnc $+0x6 <malloc+0x92>
; if r14 - 5000 == 0
4706: 0e9b cmp r11, r14
4708: cd23 jnz $-0x64 <malloc+0x2c> ; try next block
; puts("Heap exhausted. Aborting")
470a: 3f40 5e46 mov #0x465e, r15
470e: b012 504d call #0x4d50 <puts>
4712: 3040 3e44 br #0x443e <__stop_progExec__>
4716: 0f43 clr r15
4718: 3b41 pop r11
471a: 3041 ret
471c <free>
471c: 0b12 push r11
; Turn datablock pointer into metadata pointer
471e: 3f50 faff add #0xfffa, r15
; move this->size into r15
4722: 1d4f 0400 mov 0x4(r15), r13
; clear the usedbit
4726: 3df0 feff and #0xfffe, r13
; move the result into this->size
472a: 8f4d 0400 mov r13, 0x4(r15)
; move this->prev into r14
472e: 2e4f mov @r15, r14
; move this->prev->size into r12
4730: 1c4e 0400 mov 0x4(r14), r12
; if this->prev->size & 1
4734: 1cb3 bit #0x1, r12
; ... != 0, skip down
4736: 0d20 jnz $+0x1c <free+0x36>
; update prev->size
4738: 3c50 0600 add #0x6, r12
473c: 0c5d add r13, r12
473e: 8e4c 0400 mov r12, 0x4(r14)
; update prev->next
4742: 9e4f 0200 0200 mov 0x2(r15), 0x2(r14)
4748: 1d4f 0200 mov 0x2(r15), r13
474c: 8d4e 0000 mov r14, 0x0(r13)
4750: 2f4f mov @r15, r15
4752: 1e4f 0200 mov 0x2(r15), r14
4756: 1d4e 0400 mov 0x4(r14), r13
475a: 1db3 bit #0x1, r13
475c: 0b20 jnz $+0x18 <free+0x58>
475e: 1d5f 0400 add 0x4(r15), r13
4762: 3d50 0600 add #0x6, r13
4766: 8f4d 0400 mov r13, 0x4(r15)
476a: 9f4e 0200 0200 mov 0x2(r14), 0x2(r15)
4770: 8e4f 0000 mov r15, 0x0(r14)
4774: 3b41 pop r11
4776: 3041 ret
4778 <create_hash_table>
4778: 0b12 push r11
477a: 0a12 push r10
477c: 0912 push r9
477e: 0812 push r8
4780: 0712 push r7
4782: 0612 push r6
4784: 074f mov r15, r7
4786: 094e mov r14, r9
4788: 3f40 0a00 mov #0xa, r15
478c: b012 7846 call #0x4678 <malloc>
4790: 0a4f mov r15, r10
4792: 8f43 0000 clr 0x0(r15)
4796: 8f47 0200 mov r7, 0x2(r15)
479a: 8f49 0400 mov r9, 0x4(r15)
479e: 2b43 mov #0x2, r11
47a0: 0f47 mov r7, r15
47a2: 0f93 tst r15
47a4: 0324 jz $+0x8 <create_hash_table+0x34>
47a6: 0b5b add r11, r11
47a8: 1f83 dec r15
47aa: fd23 jnz $-0x4 <create_hash_table+0x2e>
47ac: 0f4b mov r11, r15
47ae: b012 7846 call #0x4678 <malloc>
47b2: 8a4f 0600 mov r15, 0x6(r10)
47b6: 0f4b mov r11, r15
47b8: b012 7846 call #0x4678 <malloc>
47bc: 8a4f 0800 mov r15, 0x8(r10)
47c0: 1843 mov #0x1, r8
47c2: 0793 tst r7
47c4: 0324 jz $+0x8 <create_hash_table+0x54>
47c6: 0858 add r8, r8
47c8: 1783 dec r7
47ca: fd23 jnz $-0x4 <create_hash_table+0x4e>
47cc: 0b49 mov r9, r11
; r11 <<= 3
47ce: 0b5b add r11, r11
47d0: 0b5b add r11, r11
47d2: 0b5b add r11, r11
47d4: 0b59 add r9, r11
47d6: 0b5b add r11, r11 ; rla r11
47d8: 0943 clr r9
47da: 0f3c jmp $+0x20 <create_hash_table+0x82>
47dc: 0749 mov r9, r7
47de: 0757 add r7, r7
47e0: 164a 0600 mov 0x6(r10), r6
47e4: 0657 add r7, r6
47e6: 0f4b mov r11, r15
47e8: b012 7846 call #0x4678 <malloc>
47ec: 864f 0000 mov r15, 0x0(r6)
47f0: 175a 0800 add 0x8(r10), r7
47f4: 8743 0000 clr 0x0(r7)
47f8: 1953 inc r9
47fa: 0998 cmp r8, r9
47fc: ef3b jl $-0x20 <create_hash_table+0x64>
47fe: 0f4a mov r10, r15
4800: 3641 pop r6
4802: 3741 pop r7
4804: 3841 pop r8
4806: 3941 pop r9
4808: 3a41 pop r10
480a: 3b41 pop r11
480c: 3041 ret
480e <hash>
480e: 0e4f mov r15, r14
; r15 = 0;
4810: 0f43 clr r15
4812: 0b3c jmp $+0x18 <hash+0x1c> ; to 482a
hash_loop:
; r13 = *addr;
4814: 6d4e mov.b @r14, r13
4816: 8d11 sxt r13
; r13 += r15;
4818: 0d5f add r15, r13
; r15 = r13;
481a: 0f4d mov r13, r15
; r15 <<= 5;
481c: 0f5f add r15, r15 ; alias: rla r15
481e: 0f5f add r15, r15
4820: 0f5f add r15, r15
4822: 0f5f add r15, r15
4824: 0f5f add r15, r15
; r15 -= r13;
4826: 0f8d sub r13, r15
; r14++;
4828: 1e53 inc r14
hash_loop_start:
; while (*addr) {...}
482a: ce93 0000 tst.b 0x0(r14)
482e: f223 jnz $-0x1a <hash+0x6> ; to 4814
; return r15
4830: 3041 ret
4832 <add_to_table>
4832: 0b12 push r11
4834: 0a12 push r10
4836: 0912 push r9
4838: 0b4f mov r15, r11
483a: 0a4e mov r14, r10
483c: 094d mov r13, r9
483e: 1e4f 0200 mov 0x2(r15), r14
4842: 1c4f 0400 mov 0x4(r15), r12
4846: 0f4e mov r14, r15
; r12 << r15
4848: 0f93 tst r15
484a: 0324 jz $+0x8 <add_to_table+0x20>
484c: 0c5c add r12, r12 ; RLA r12
484e: 1f83 dec r15
4850: fd23 jnz $-0x4 <add_to_table+0x1a>
; if (r12 < 0):
4852: 0c93 tst r12
4854: 0234 jge $+0x6 <add_to_table+0x28>
; r12 = (r12 + 3) >> 1
4856: 3c50 0300 add #0x3, r12
485a: 0c11 rra r12
; r12 >>= 1
485c: 0c11 rra r12
; if (r11[0] < r12):
485e: 2c9b cmp @r11, r12
4860: 0434 jge $+0xa <add_to_table+0x38>
; rehash(r14, r11)
4862: 1e53 inc r14
4864: 0f4b mov r11, r15
4866: b012 d448 call #0x48d4 <rehash>
; *r11++
486a: 9b53 0000 inc 0x0(r11)
; r15 = hash (r10)
486e: 0f4a mov r10, r15
4870: b012 0e48 call #0x480e <hash>
; r12 = (1 << r11[2]) - 1
4874: 1c43 mov #0x1, r12
4876: 1e4b 0200 mov 0x2(r11), r14
487a: 0e93 tst r14
487c: 0324 jz $+0x8 <add_to_table+0x52>
487e: 0c5c add r12, r12
4880: 1e83 dec r14
4882: fd23 jnz $-0x4 <add_to_table+0x4c>
4884: 3c53 add #-0x1, r12
4886: 0cff and r15, r12
4888: 0c5c add r12, r12
488a: 1f4b 0800 mov 0x8(r11), r15
488e: 0f5c add r12, r15
4890: 2e4f mov @r15, r14
4892: 1b4b 0600 mov 0x6(r11), r11
4896: 0b5c add r12, r11
4898: 0c4e mov r14, r12
489a: 0c5c add r12, r12
489c: 0c5c add r12, r12
489e: 0c5c add r12, r12
48a0: 0c5e add r14, r12
48a2: 0c5c add r12, r12
48a4: 2c5b add @r11, r12
48a6: 1e53 inc r14
48a8: 8f4e 0000 mov r14, 0x0(r15)
48ac: 0f43 clr r15
48ae: 093c jmp $+0x14 <add_to_table+0x90> ; A
; *C
48b0: 0b4c mov r12, r11
48b2: 0b5f add r15, r11
48b4: cb4e 0000 mov.b r14, 0x0(r11)
48b8: 1f53 inc r15
48ba: 3f90 0f00 cmp #0xf, r15
48be: 0424 jz $+0xa <add_to_table+0x96> ; B
48c0: 1a53 inc r10
; *A
48c2: 6e4a mov.b @r10, r14
48c4: 4e93 tst.b r14
48c6: f423 jnz $-0x16 <add_to_table+0x7e> ; C
; *B
48c8: 8c49 1000 mov r9, 0x10(r12)
48cc: 3941 pop r9
48ce: 3a41 pop r10
48d0: 3b41 pop r11
48d2: 3041 ret
48d4 <rehash>
48d4: 0b12 push r11
48d6: 0a12 push r10
48d8: 0912 push r9
48da: 0812 push r8
48dc: 0712 push r7
48de: 0612 push r6
48e0: 0512 push r5
48e2: 0412 push r4
48e4: 2183 decd sp
48e6: 0b4f mov r15, r11
48e8: 164f 0200 mov 0x2(r15), r6
48ec: 154f 0600 mov 0x6(r15), r5
48f0: 144f 0800 mov 0x8(r15), r4
48f4: 8f4e 0200 mov r14, 0x2(r15)
48f8: 8f43 0000 clr 0x0(r15)
48fc: 2a43 mov #0x2, r10
48fe: 0e93 tst r14
4900: 0324 jz $+0x8 <rehash+0x34>
4902: 0a5a add r10, r10
4904: 1e83 dec r14
4906: fd23 jnz $-0x4 <rehash+0x2e>
4908: 0f4a mov r10, r15
490a: b012 7846 call #0x4678 <malloc>
490e: 8b4f 0600 mov r15, 0x6(r11)
4912: 0f4a mov r10, r15
4914: b012 7846 call #0x4678 <malloc>
4918: 8b4f 0800 mov r15, 0x8(r11)
491c: 0a43 clr r10
491e: 1843 mov #0x1, r8
4920: 173c jmp $+0x30 <rehash+0x7c>
4922: 094a mov r10, r9
4924: 0959 add r9, r9
4926: 174b 0600 mov 0x6(r11), r7
492a: 0759 add r9, r7
492c: 1f4b 0400 mov 0x4(r11), r15
4930: 0e4f mov r15, r14
4932: 0e5e add r14, r14
4934: 0e5e add r14, r14
4936: 0e5e add r14, r14
4938: 0e5f add r15, r14
493a: 0f4e mov r14, r15
493c: 0f5f add r15, r15
493e: b012 7846 call #0x4678 <malloc>
4942: 874f 0000 mov r15, 0x0(r7)
4946: 195b 0800 add 0x8(r11), r9
494a: 8943 0000 clr 0x0(r9)
494e: 1a53 inc r10
4950: 1d4b 0200 mov 0x2(r11), r13
4954: 0e48 mov r8, r14
4956: 0d93 tst r13
4958: 0324 jz $+0x8 <rehash+0x8c>
495a: 0e5e add r14, r14
495c: 1d83 dec r13
495e: fd23 jnz $-0x4 <rehash+0x86>
4960: 0a9e cmp r14, r10
4962: df3b jl $-0x40 <rehash+0x4e>
4964: 0f46 mov r6, r15
4966: 1e43 mov #0x1, r14
4968: 0f93 tst r15
496a: 0324 jz $+0x8 <rehash+0x9e>
496c: 0e5e add r14, r14
496e: 1f83 dec r15
4970: fd23 jnz $-0x4 <rehash+0x98>
4972: 814e 0000 mov r14, 0x0(sp)
4976: 0a45 mov r5, r10
4978: 0944 mov r4, r9
497a: 0743 clr r7
497c: 153c jmp $+0x2c <rehash+0xd4>
497e: 2e4a mov @r10, r14
4980: 0e58 add r8, r14
4982: 1d4e 1000 mov 0x10(r14), r13
4986: 0f4b mov r11, r15
4988: b012 3248 call #0x4832 <add_to_table>
498c: 1653 inc r6
498e: 3850 1200 add #0x12, r8
4992: 023c jmp $+0x6 <rehash+0xc4>
4994: 0843 clr r8
4996: 0648 mov r8, r6
4998: 2699 cmp @r9, r6
499a: f13b jl $-0x1c <rehash+0xaa>
499c: 2f4a mov @r10, r15
499e: b012 1c47 call #0x471c <free>
49a2: 1753 inc r7
49a4: 2a53 incd r10
49a6: 2953 incd r9
49a8: 2791 cmp @sp, r7
49aa: f43b jl $-0x16 <rehash+0xc0>
49ac: 0f44 mov r4, r15
49ae: b012 1c47 call #0x471c <free>
49b2: 0f45 mov r5, r15
49b4: b012 1c47 call #0x471c <free>
49b8: 2153 incd sp
49ba: 3441 pop r4
49bc: 3541 pop r5
49be: 3641 pop r6
49c0: 3741 pop r7
49c2: 3841 pop r8
49c4: 3941 pop r9
49c6: 3a41 pop r10
49c8: 3b41 pop r11
49ca: 3041 ret
49cc <get_from_table>
49cc: 0b12 push r11
49ce: 0a12 push r10
49d0: 0912 push r9
49d2: 0812 push r8
49d4: 0712 push r7
49d6: 0612 push r6
49d8: 0a4f mov r15, r10
49da: 064e mov r14, r6
49dc: 0f4e mov r14, r15
49de: b012 0e48 call #0x480e <hash>
49e2: 1b43 mov #0x1, r11
49e4: 1d4a 0200 mov 0x2(r10), r13
49e8: 0d93 tst r13
49ea: 0324 jz $+0x8 <get_from_table+0x26>
49ec: 0b5b add r11, r11
49ee: 1d83 dec r13
49f0: fd23 jnz $-0x4 <get_from_table+0x20>
49f2: 3b53 add #-0x1, r11
49f4: 0bff and r15, r11
49f6: 0b5b add r11, r11
49f8: 1d4a 0600 mov 0x6(r10), r13
49fc: 0d5b add r11, r13
49fe: 294d mov @r13, r9
4a00: 0843 clr r8
4a02: 0d3c jmp $+0x1c <get_from_table+0x52>
4a04: 0749 mov r9, r7
4a06: 0e49 mov r9, r14
4a08: 0f46 mov r6, r15
4a0a: b012 7c4d call #0x4d7c <strcmp>
4a0e: 3950 1200 add #0x12, r9
4a12: 0f93 tst r15
4a14: 0320 jnz $+0x8 <get_from_table+0x50>
4a16: 1f47 1000 mov 0x10(r7), r15
4a1a: 073c jmp $+0x10 <get_from_table+0x5e>
4a1c: 1853 inc r8
4a1e: 1f4a 0800 mov 0x8(r10), r15
4a22: 0f5b add r11, r15
4a24: 289f cmp @r15, r8
4a26: ee3b jl $-0x22 <get_from_table+0x38>
4a28: 3f43 mov #-0x1, r15
4a2a: 3641 pop r6
4a2c: 3741 pop r7
4a2e: 3841 pop r8
4a30: 3941 pop r9
4a32: 3a41 pop r10
4a34: 3b41 pop r11
4a36: 3041 ret
; String(s) here:
; Welcome to the lock controller.
4a38: 5765 6c63 addc.b 0x636c(r5), r7
4a3c: 6f6d addc.b @r13, r15
4a3e: 6520 jnz $+0xcc <get_from_table+0x13e>
4a40: 746f addc.b @r15+, r4
4a42: 2074 subc @r4, pc
4a44: 6865 addc.b @r5, r8
4a46: 206c addc @r12, pc
4a48: 6f63 addc.b #0x2, r15
4a4a: 6b20 jnz $+0xd8 <get_from_table+0x156>
4a4c: 636f addc.b @r15, 4
4a4e: 6e74 subc.b @r4, r14
4a50: 726f addc.b @r15+, sr
4a52: 6c6c addc.b @r12, r12
4a54: 6572 subc.b #0x4, r5
4a56: 2e00 rrc @r14
; "You can open the door by entering 'access [your name] [pin]'"
4a58: 596f 7520 addc.b 0x2075(r15), r9
4a5c: 6361 addc.b @sp, 4
4a5e: 6e20 jnz $+0xde <get_from_table+0x170>
4a60: 6f70 subc.b @pc, r15
4a62: 656e addc.b @r14, r5
4a64: 2074 subc @r4, pc
4a66: 6865 addc.b @r5, r8
4a68: 2064 addc @r4, pc
4a6a: 6f6f addc.b @r15, r15
4a6c: 7220 jnz $+0xe6 <get_from_table+0x186>
4a6e: 6279 subc.b @r9, sr
4a70: 2065 addc @r5, pc
4a72: 6e74 subc.b @r4, r14
4a74: 6572 subc.b #0x4, r5
4a76: 696e addc.b @r14, r9
4a78: 6720 jnz $+0xd0 <get_from_table+0x17c>
4a7a: 2761 addc @sp, r7
4a7c: 6363 addc.b #0x2, 4
4a7e: 6573 subc.b #0x2, r5
4a80: 7320 jnz $+0xe8 <run+0x2>
4a82: 5b79 6f75 subc.b 0x756f(r9), r11
4a86: 7220 jnz $+0xe6 <run+0x6>
4a88: 6e61 addc.b @sp, r14
4a8a: 6d65 addc.b @r5, r13
4a8c: 5d20 jnz $+0xbc <get_from_table+0x17c>
4a8e: 5b70 696e subc.b 0x6e69(pc), r11
4a92: 5d27 jz $-0x144 <rehash+0x7a>
4a94: 0000 rrc pc
; No such box.
4a96: 4e6f addc.b r15, r14
4a98: 2073 subc #0x2, pc
4a9a: 7563 addc.b #-0x1, r5
4a9c: 6820 jnz $+0xd2 <run+0x8>
4a9e: 626f addc.b @r15, sr
4aa0: 782e jc $-0x30e <create_hash_table+0x1a>
; Access granted.
4aa2: 0041 br sp
4aa4: 6363 addc.b #0x2, 4
4aa6: 6573 subc.b #0x2, r5
4aa8: 7320 jnz $+0xe8 <run+0x2a>
4aaa: 6772 subc.b #0x4, r7
4aac: 616e addc.b @r14, sp
4aae: 7465 addc.b @r5+, r4
4ab0: 642e jc $-0x336 <create_hash_table+0x2>
; Access granted; but account not activated.
4ab2: 0041 br sp
4ab4: 6363 addc.b #0x2, 4
4ab6: 6573 subc.b #0x2, r5
4ab8: 7320 jnz $+0xe8 <run+0x3a>
4aba: 6772 subc.b #0x4, r7
4abc: 616e addc.b @r14, sp
4abe: 7465 addc.b @r5+, r4
4ac0: 643b jl $-0x136 <rehash+0xb6>
4ac2: 2062 addc #0x4, pc
4ac4: 7574 subc.b @r4+, r5
4ac6: 2061 addc @sp, pc
4ac8: 6363 addc.b #0x2, 4
4aca: 6f75 subc.b @r5, r15
4acc: 6e74 subc.b @r4, r14
4ace: 206e addc @r14, pc
4ad0: 6f74 subc.b @r4, r15
4ad2: 2061 addc @sp, pc
4ad4: 6374 subc.b @r4, 4
4ad6: 6976 subc.b @r6, r9
4ad8: 6174 subc.b @r4, sp
4ada: 6564 addc.b @r4, r5
4adc: 2e00 rrc @r14
; Aceess denied
4ade: 4163 adc.b sp
4ae0: 6565 addc.b @r5, r5
4ae2: 7373 subc.b #-0x1, 4
4ae4: 2064 addc @r4, pc
4ae6: 656e addc.b @r14, r5
4ae8: 6965 addc.b @r5, r9
4aea: 6400 rrc.b @r4
; Can not have a pin with high bit set.
4aec: 4361 addc.b sp, 4
4aee: 6e20 jnz $+0xde <run+0x66>
4af0: 6e6f addc.b @r15, r14
4af2: 7420 jnz $+0xea <run+0x76>
4af4: 6861 addc.b @sp, r8
4af6: 7665 addc.b @r5+, r6
4af8: 2061 addc @sp, pc
4afa: 2070 subc @pc, pc
4afc: 696e addc.b @r14, r9
4afe: 2077 subc @r7, pc
4b00: 6974 subc.b @r4, r9
4b02: 6820 jnz $+0xd2 <run+0x6e>
4b04: 6869 addc.b @r9, r8
4b06: 6768 addc.b @r8, r7
4b08: 2062 addc #0x4, pc
4b0a: 6974 subc.b @r4, r9
4b0c: 2073 subc #0x2, pc
4b0e: 6574 subc.b @r4, r5
4b10: 2e00 rrc @r14
; User already has an account.
4b12: 5573 subc.b #0x1, r5
4b14: 6572 subc.b #0x4, r5
4b16: 2061 addc @sp, pc
4b18: 6c72 subc.b #0x4, r12
4b1a: 6561 addc.b @sp, r5
4b1c: 6479 subc.b @r9, r4
4b1e: 2068 addc @r8, pc
4b20: 6173 subc.b #0x2, sp
4b22: 2061 addc @sp, pc
4b24: 6e20 jnz $+0xde <run+0x9c>
4b26: 6163 addc.b #0x2, sp
4b28: 636f addc.b @r15, 4
4b2a: 756e addc.b @r14+, r5
4b2c: 742e jc $-0x316 <hash+0x8>
; Adding user account %s with pin %x.
4b2e: 0041 br sp
4b30: 6464 addc.b @r4, r4
4b32: 696e addc.b @r14, r9
4b34: 6720 jnz $+0xd0 <run+0x9e>
4b36: 7573 subc.b #-0x1, r5
4b38: 6572 subc.b #0x4, r5
4b3a: 2061 addc @sp, pc
4b3c: 6363 addc.b #0x2, 4
4b3e: 6f75 subc.b @r5, r15
4b40: 6e74 subc.b @r4, r14
4b42: 2025 jz $+0x242 <strcmp+0x8>
4b44: 7320 jnz $+0xe8 <run+0xc6>
4b46: 7769 addc.b @r9+, r7
4b48: 7468 addc.b @r8+, r4
4b4a: 2070 subc @pc, pc
4b4c: 696e addc.b @r14, r9
4b4e: 2025 jz $+0x242 <strcmp+0x14>
4b50: 782e jc $-0x30e <add_to_table+0x10>
4b52: 0a00 rrc r10
; Invalid command.
4b54: 496e addc.b r14, r9
4b56: 7661 addc.b @sp+, r6
4b58: 6c69 addc.b @r9, r12
4b5a: 6420 jnz $+0xca <run+0xbe>
4b5c: 636f addc.b @r15, 4
4b5e: 6d6d addc.b @r13, r13
4b60: 616e addc.b @r14, sp
4b62: 642e jc $-0x336 <hash+0x1e>
4b64: 0000 rrc pc
4b66 <run>
4b66: 0b12 push r11
4b68: 0a12 push r10
4b6a: 0912 push r9
4b6c: 0812 push r8
4b6e: 0712 push r7
; allocate 0x600 buffer on stack. Woah!
4b70: 3150 00fa add #0xfa00, sp
; r8 = create_hash_table (0x3, 0x5)
4b74: 3e40 0500 mov #0x5, r14
4b78: 3f40 0300 mov #0x3, r15
4b7c: b012 7847 call #0x4778 <create_hash_table>
4b80: 084f mov r15, r8 ; save result
; print out some shit
4b82: 3f40 384a mov #0x4a38, r15
4b86: b012 504d call #0x4d50 <puts>
4b8a: 3f40 584a mov #0x4a58, r15
4b8e: b012 504d call #0x4d50 <puts>
4b92: 3f40 954a mov #0x4a95, r15
4b96: b012 504d call #0x4d50 <puts>
; zero out the stack buffer allocated above
4b9a: 0e43 clr r14
4b9c: 3740 ff05 mov #0x5ff, r7
4ba0: 053c jmp $+0xc <run+0x46>
; run+0x3c
4ba2: 0f41 mov sp, r15
4ba4: 0f5e add r14, r15
4ba6: cf43 0000 mov.b #0x0, 0x0(r15)
4baa: 1e53 inc r14
; run+0x46:
4bac: 079e cmp r14, r7
4bae: f937 jge $-0xc <run+0x3c>
; get 0x550 characters -> stack buffer
4bb0: 3e40 5005 mov #0x550, r14
4bb4: 0f41 mov sp, r15
4bb6: b012 404d call #0x4d40 <getsn>
; run+0x54:
4bba: 0b41 mov sp, r11
4bbc: 923c jmp $+0x126 <run+0x17c>
; check for 'a'
__access_check:
4bbe: 7f90 6100 cmp.b #0x61, r15
4bc2: 3a20 jnz $+0x76 <run+0xd2> ; __access%20_check
4bc4: 0e4b mov r11, r14
4bc6: 3e50 0700 add #0x7, r14
4bca: 0b4e mov r14, r11
4bcc: 073c jmp $+0x10 <run+0x76>
; run+0x68:
; check for ' '
4bce: 7f90 2000 cmp.b #0x20, r15
4bd2: 0320 jnz $+0x8 <run+0x74>
4bd4: cb43 0000 mov.b #0x0, 0x0(r11)
4bd8: 043c jmp $+0xa <run+0x7c>
4bda: 1b53 inc r11
; run+0x76:
4bdc: 6f4b mov.b @r11, r15
4bde: 4f93 tst.b r15
4be0: f623 jnz $-0x12 <run+0x68>
; run+0x7c:
4be2: 1b53 inc r11
4be4: 0a43 clr r10
4be6: 0b3c jmp $+0x18 <run+0x98>
; run+0x82:
; r13 =
4be8: 0d4a mov r10, r13
4bea: 0d5d add r13, r13
4bec: 0d5d add r13, r13
4bee: 0d5a add r10, r13
4bf0: 0d5d add r13, r13
4bf2: 6a4b mov.b @r11, r10
4bf4: 8a11 sxt r10
4bf6: 3a50 d0ff add #0xffd0, r10
4bfa: 0a5d add r13, r10
4bfc: 1b53 inc r11
; run+0x98:
4bfe: 6f4b mov.b @r11, r15
4c00: 4f93 tst.b r15
4c02: 0324 jz $+0x8 <run+0xa4>
; check for ';'
4c04: 7f90 3b00 cmp.b #0x3b, r15
4c08: ef23 jnz $-0x20 <run+0x82>
; run+0xa4:
4c0a: 0f48 mov r8, r15
4c0c: b012 cc49 call #0x49cc <get_from_table>
4c10: 3f93 cmp #-0x1, r15
4c12: 0320 jnz $+0x8 <run+0xb4>
; No such box.
4c14: 3f40 964a mov #0x4a96, r15
4c18: 413c jmp $+0x84 <run+0x136>
4c1a: 0aef xor r15, r10
4c1c: 3af0 ff7f and #0x7fff, r10
4c20: 0820 jnz $+0x12 <run+0xcc>
4c22: 0f9a cmp r10, r15
4c24: 0334 jge $+0x8 <run+0xc6>
; Access granted
4c26: 3f40 a34a mov #0x4aa3, r15
4c2a: 383c jmp $+0x72 <run+0x136>
; Access granted, but account not activated.
4c2c: 3f40 b34a mov #0x4ab3, r15
4c30: 353c jmp $+0x6c <run+0x136>
; Aceess denied [sic]
4c32: 3f40 de4a mov #0x4ade, r15
4c36: 323c jmp $+0x66 <run+0x136>
; run+0xd2:
; check for 'n'
__n_check:
4c38: 7f90 6e00 cmp.b #0x6e, r15
4c3c: 4020 jnz $+0x82 <run+0x158>
4c3e: 094b mov r11, r9
4c40: 2952 add #0x4, r9
4c42: 0b49 mov r9, r11
4c44: 073c jmp $+0x10 <run+0xee>
; run+0xe0
; check for ' '
4c46: 7f90 2000 cmp.b #0x20, r15
4c4a: 0320 jnz $+0x8 <run+0xec>
4c4c: cb43 0000 mov.b #0x0, 0x0(r11) ; if next char is space, skip it
4c50: 043c jmp $+0xa <run+0xf4>
; run+0xec
4c52: 1b53 inc r11
; run+0xee
4c54: 6f4b mov.b @r11, r15
4c56: 4f93 tst.b r15
4c58: f623 jnz $-0x12 <run+0xe0>
4c5a: 1b53 inc r11
4c5c: 0a43 clr r10
4c5e: 0b3c jmp $+0x18 <run+0x110>
_to_decimal: ; convert the ascii in r10 to decimal?
4c60: 0c4a mov r10, r12
4c62: 0c5c add r12, r12 ; x2
4c64: 0c5c add r12, r12 ; x4
4c66: 0c5a add r10, r12 ; x5
4c68: 0c5c add r12, r12 ; xA
4c6a: 6a4b mov.b @r11, r10
4c6c: 8a11 sxt r10
; Subtract 0x30
4c6e: 3a50 d0ff add #0xffd0, r10
4c72: 0a5c add r12, r10
4c74: 1b53 inc r11
; run+0x110
4c76: 6f4b mov.b @r11, r15
4c78: 4f93 tst.b r15
4c7a: 0324 jz $+0x8 <run+0x11c>
; check for ';'
4c7c: 7f90 3b00 cmp.b #0x3b, r15
4c80: ef23 jnz $-0x20 <run+0xfa>
4c82: 0a93 tst r10
4c84: 0334 jge $+0x8 <run+0x126>
; Can not have pin with high bit set
4c86: 3f40 ec4a mov #0x4aec, r15
4c8a: 083c jmp $+0x12 <run+0x136>
4c8c: 0e49 mov r9, r14
4c8e: 0f48 mov r8, r15
4c90: b012 cc49 call #0x49cc <get_from_table>
4c94: 3f93 cmp #-0x1, r15
4c96: 0524 jz $+0xc <run+0x13c>
; User already has an account
4c98: 3f40 124b mov #0x4b12, r15
4c9c: b012 504d call #0x4d50 <puts>
4ca0: 1c3c jmp $+0x3a <run+0x174>
add_user_account:
4ca2: 0a12 push r10
4ca4: 0912 push r9
4ca6: 3012 2f4b push #0x4b2f
4caa: b012 4844 call #0x4448 <printf>
4cae: 3150 0600 add #0x6, sp
4cb2: 0d4a mov r10, r13
4cb4: 0e49 mov r9, r14
4cb6: 0f48 mov r8, r15
4cb8: b012 3248 call #0x4832 <add_to_table>
4cbc: 0e3c jmp $+0x1e <run+0x174> ; NOT strings
; end of the function:
4cbe: 3f40 544b mov #0x4b54, r15
4cc2: b012 504d call #0x4d50 <puts>
failure_case:
4cc6: 1f43 mov #0x1, r15
4cc8: 3150 0006 add #0x600, sp
run_end:
4ccc: 3741 pop r7
4cce: 3841 pop r8
4cd0: 3941 pop r9
4cd2: 3a41 pop r10
4cd4: 3b41 pop r11
4cd6: 3041 ret
; loop_end
4cd8: 1b53 inc r11
; check for ';'
4cda: fb90 3b00 0000 cmp.b #0x3b, 0x0(r11)
4ce0: fb27 jz $-0x8 <run+0x172>
; end of the loop
; run+0x17c:
4ce2: 6f4b mov.b @r11, r15
4ce4: 4f93 tst.b r15
4ce6: 6b23 jnz $-0x128 <run+0x58> ; 4bbe
; cleanup
4ce8: 0e43 clr r14
4cea: 603f jmp $-0x13e <run+0x46>
4cec <INT>
4cec: 1e41 0200 mov 0x2(sp), r14
4cf0: 0212 push sr
4cf2: 0f4e mov r14, r15
4cf4: 8f10 swpb r15
4cf6: 024f mov r15, sr
4cf8: 32d0 0080 bis #0x8000, sr
4cfc: b012 1000 call #0x10
4d00: 3241 pop sr
4d02: 3041 ret
4d04 <putchar>
4d04: 2183 decd sp
4d06: 0f12 push r15
4d08: 0312 push #0x0
4d0a: 814f 0400 mov r15, 0x4(sp)
4d0e: b012 ec4c call #0x4cec <INT>
4d12: 1f41 0400 mov 0x4(sp), r15
4d16: 3150 0600 add #0x6, sp
4d1a: 3041 ret
4d1c <getchar>
4d1c: 0412 push r4
4d1e: 0441 mov sp, r4
4d20: 2453 incd r4
4d22: 2183 decd sp
4d24: 3f40 fcff mov #0xfffc, r15
4d28: 0f54 add r4, r15
4d2a: 0f12 push r15
4d2c: 1312 push #0x1
4d2e: b012 ec4c call #0x4cec <INT>
4d32: 5f44 fcff mov.b -0x4(r4), r15
4d36: 8f11 sxt r15
4d38: 3150 0600 add #0x6, sp
4d3c: 3441 pop r4
4d3e: 3041 ret
4d40 <getsn>
4d40: 0e12 push r14
4d42: 0f12 push r15
4d44: 2312 push #0x2
4d46: b012 ec4c call #0x4cec <INT>
4d4a: 3150 0600 add #0x6, sp
4d4e: 3041 ret
4d50 <puts>
4d50: 0b12 push r11
4d52: 0b4f mov r15, r11
4d54: 073c jmp $+0x10 <puts+0x14>
4d56: 1b53 inc r11
4d58: 8f11 sxt r15
4d5a: 0f12 push r15
4d5c: 0312 push #0x0
4d5e: b012 ec4c call #0x4cec <INT>
4d62: 2152 add #0x4, sp
4d64: 6f4b mov.b @r11, r15
4d66: 4f93 tst.b r15
4d68: f623 jnz $-0x12 <puts+0x6>
4d6a: 3012 0a00 push #0xa
4d6e: 0312 push #0x0
4d70: b012 ec4c call #0x4cec <INT>
4d74: 2152 add #0x4, sp
4d76: 0f43 clr r15
4d78: 3b41 pop r11
4d7a: 3041 ret
4d7c <strcmp>
4d7c: 033c jmp $+0x8 <strcmp+0x8>
4d7e: 4d93 tst.b r13
4d80: 0b24 jz $+0x18 <strcmp+0x1c>
4d82: 1f53 inc r15
4d84: 6d4f mov.b @r15, r13
4d86: 6c4e mov.b @r14, r12
4d88: 1e53 inc r14
4d8a: 4d9c cmp.b r12, r13
4d8c: f827 jz $-0xe <strcmp+0x2>
4d8e: 4f4d mov.b r13, r15
4d90: 5e4e ffff mov.b -0x1(r14), r14
4d94: 0f8e sub r14, r15
4d96: 3041 ret
4d98: 0f43 clr r15
4d9a: 3041 ret
4d9c <_unexpected_>
4d9c: 0013 reti pc