It makes a colossal difference.
The correct version sets the top of stck, sensibly, at 0:7c00 giving masses of space for the stack.
The incorrect version sets it at 0:7c90 which is in the middle of the loaded bootcode and as soon as it is used it will start over-writing the loaded instructions!
You should also take note of Octocontrabrass's comment about relying on cs. This is the following lines of code
Code:
call 0x4c
pop %si
add 0x19 %si
which will probably work on the machine you are using and the emulators but will fail on some machines.
There are two solutions:
(a) Replace the code with:
Code:
be 65 7c mov 0x7c65 %si
90 90 90 90 nop nop nop nop //nop means do nothing: you are basically stopping the next two instructions doing anything
which is far clearer code than the original. The objection to it might be that the code becomes 'position dependent' but in a bootloader this is a bit pedantic.
(b) Use the initial five bytes of the bootloader to get a consistent value in cs by doing a far jump instead of a (near) short jump:
Code:
ea 3e 7c 00 00 jmp far 0x0000:0x7c3e
(Your disassembly of this may look slightly different: I'm not used to the syntax it uses)
This approach is slightly problematic because the last two bytes mess up the "IB" of the IBM signature at the start of the boot record, but I suspect this is not used anywhere.
[and people says nobody ever writes in machine code...
Which is also why this post must be treated with caution: it is very very easy to make mistakes and I may have done so]