Re: Searching for string problems

Randy.Dunlap (rddunlap@osdl.org)
Wed, 23 Apr 2003 13:05:31 -0700


On Wed, 23 Apr 2003 22:48:35 +0300 Andrew Kirilenko <icedank@gmx.net> wrote:

| 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/