Assembly Nasm Bootloader x86
Since cx is not used other than a loop counter, you may consider making a countdown loop. That would spare 2 instructions:

    move cx, 16
.loopstart:
    pop dx
    ....
    dec cx
    jnz .loopstart

The MSB operations can also be shortened:

    xor al,al    # Clear al
    sal dx,1     # MSB lands in CF
    adc al,30h   # Add with carry. al becomes 30h + MSB

Yet another jump could be spared by jne printMemoryValue.