I am currently trying to built my own boot loader and noticed something peculiar.
When below code is assembled with NASM or Yasm without the marked NOP command the following CALL is missing from the binary. With the NOP included the CALL is correctly assembled but the op code 0x90 (NOP) is not present in the binary (later is understandable due to the nature of NOP).
to_hex_ascii:
add al, '0'
cmp al, 0x3a
jl .end
; add al, 0x07
add al, 0x27
.end:
ret
print_word_hex:
push bp
mov bp, sp
mov dx, [bp + 4]
push dx
mov al, dh
push ax ;\
nop ; | <- NOP in question
call print_lsb_hex ; print_lsb_hex(ax);
add sp, 2 ;/
pop dx
jmp print_lsb_hex.continue
print_lsb_hex:
push bp
mov bp, sp
mov dl, [bp + 4]
.continue:
mov ah, 0x0e
; 0xf0
mov al, dl
and al, 0xf0
shr al, 4
call to_hex_ascii
int 0x10 ; BIOS print call
; 0x0f
mov al, dl
and al, 0x0f
call to_hex_ascii
int 0x10 ; BIOS print call
pop bp
ret