Disassemble again

Now let’s look what those changes won us.

```
$ make
```

Again, I deobfuscated the labels and added source annotations.

```
CSEG AT 0000h
  0000 020006       LJMP __sdcc_gsinit_startup

__sdcc_program_startup:
  0003 02001C       LJMP _main

                                                        ; lib/src/mcs51/crtstart.asm line 43
__sdcc_gsinit_startup:                                  __sdcc_gsinit_startup::
  0006 758107       MOV SP, #7h                             mov     sp,#__start__stack - 1
                                                            .area   GSINIT2 (CODE)
  0009 120020       LCALL __sdcc_external_startup           lcall   __sdcc_external_startup
  000C E582         MOV A, DPL                              mov     a,dpl
  000E 6003         JZ __mcs51_genRAMCLEAR                  jz      __sdcc_init_data
  0010 020003       LJMP __sdcc_program_startup             ljmp    __sdcc_program_startup
                                                        __sdcc_init_data:
                                                        ; lib/src/mcs51/crtclear.asm line 41
__mcs51_genRAMCLEAR:                                    __mcs51_genRAMCLEAR::
  0013 E4           CLR A                                   clr     a
  0014 78FF         MOV R0, #0FFh                           mov     r0,#(l_IRAM-1)  ; mov r0,a will do for most devices
L0006:                                                  00004$:
  0016 F6           MOV @R0, A                              mov     @r0,a
  0017 D8FD         DJNZ R0, L0006                          djnz    r0,00004$
  0019 020003       LJMP __sdcc_program_startup

                                                        ; main.c
_main:                                                  int main(void)
                                                        {
  001C 900000       MOV DPTR, #0000h
  001F 22           RET                                     return 0;
                                                        }

                                                        ; lib/src/_startup.c line 45
__sdcc_external_startup:                                unsigned char _sdcc_external_startup (void) __nonbanked
                                                        {
  0020 758200       MOV DPL, #0h
  0023 22           RET                                     return 0;
                                                        }
END
```

Now that’s much better. Notice that by opting out of XRAM initialization
we also lost XRAM zeroing. So much for the better for now; if we ever
want XRAM variables, we can always write a custom
`_sdcc_external_startup` routine.