I wrote a x86 assembly program for MBR section. I compile it as follows:
nasm hellombr.asm -f bin -o hellombr.img
Then I run it in qemu:
Instead of using qemu, use bochs. It is completely compatible, albeit slower. It is also an emulator but if you make it from sources, using these flags and build it like this:
./configure --enable-debugger --enable-disasm --disable-docbook
make
make install
you can place breakpoints in your code, step through it, view GDT, IDT and everything you needed to know.