| Hello!
|
| Big thanks to all of you. Now I'm starting to understand how it's working.
| Here is current version of my code:
|
| -->
| jmp cl_start
| cl_id_str: .string "STRING"
| cl_start:
| cld
| movw %cs, %ax
| movw %ax, %ds
| movw $0xe000, %ax
| movw %ax, %es
| movb $0, %al
| xor %bx, %bx # start of segment
| cl_compare:
| movw $cl_id_str, %si
| movw $cl_start, %cx
| subw %si, %cx
| decw %cx
| movw %bx, %di
| repz cmpsb
| je cl_compare_done_good
| incw %bx
| cmpw $0xffff, %bx # are we at the end of segment
| je cl_compare_done
| jmp cl_compare
| cl_compare_done_good:
| movb $1, %al
| cl_compare_done:
# here the code needs to do something like this,
# to check the second 64 KB block of memory:
movw %es, %bx
cmpw %bx, $0xe000
je all_done
movw $0xf000, %bx
movw %bx, %es
xor %bx, %bx
jmp cl_compare
| <--
|
| And this code won't work as well :(
Do you understand x86 real-mode segment registers?
They can only address a "segment" of 64 KB (roughly).
| Unfortunately, I can't start DOS and check, cause there is no video and
| keyboard controller on that PC.
oh yes.
-- ~Randy - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/