Writing Boot Sector Code (2007)
susam.in
susam.in
That's largely because no one wants to use GNU/AT&T assembler syntax. In the official Intel syntax, the important 4 lines of code would be more like
mov ax, 0b800h ; ax = b800
mov ds, ax ; ds = ax
mov byte ptr [0], 'A' ; ds:[0] = 'A'
mov byte ptr [1], 1eh ; ds:[1] = 1e
...and I immediately feel compelled to optimise it to (186+) push 0b800h
pop ds
mov word ptr [0], 1e41h
Also, especially with newer CPUs and on a laptop, it's a good idea to put a HLT in the infinite loop, like so: idle:
hlt
jmp idle
A halt causes the CPU to spend most of the time waiting for an interrupt, instead of spinning in a tight loop and wasting far more power than necessary.I am the one who enjoyed using AT&T syntax. It remainded me old-days PDP-11 assembler.
If you use coreboot and libpayload it's much easier because it offers you built-in GDB server you can connect to via serial port.
https://yarchive.net/comp/linux/efi.html
The result should be generation of intermediate files and the final hello.efi program file of about 46KiB on a 64-bit system
That's bigger than the whole MS-DOS 3.2 kernel.
EDIT: as pointed out by a sibling comment, the UEFI firmware may support a CSM (compatibility support module) that can boot a legacy BIOS loader.