Strange choice of syntax to be seeing boot sector Asm in --- I didn't know GNU/AT&T assembler(?) could generate 16-bit binaries. Also looks to be a very beginner attempt since I immediately spotted lots of bytes that could be trimmed; if I was looking at disassembly and not the source, I might even mistake this for compiler output. A few more hints/suggestions:
- mov ax, 13h | int 10h will enter mode 13 in 5 bytes instead of 6
- this is x86, not a RISC. mov m16, imm16 exists.
- put the variables in memory after the code and initialise them literally
- use ALL the registers. I don't see a single bp or si
- the use of a few 32-bit instructions (but not 32-bit registers) is odd
I would also recommend studying the entries of this old competition to learn some more sizecoding tricks: http://www.hugi.scene.org/compo/compoold.htmpouet.net's many sub-1K demos are also worth inspecting.