* Prblem with AT&T
@ 2002-08-08 7:31 Anticipating a Reply
2002-08-08 8:02 ` Frederic Marmond
2002-08-08 16:04 ` Maciej Hrebien
0 siblings, 2 replies; 10+ messages in thread
From: Anticipating a Reply @ 2002-08-08 7:31 UTC (permalink / raw)
To: Assembly Linux
Hi All !
I have got the below 16 bit code which is
in Intel Syntax .
----------- INTEL SYNTAX CODE ------------------------
entry start
start:
mov ah,#0x03 ; read cursor position.
xor bh,bh
int 0x10
mov cx,#26 ; length of our beautiful string.
mov bx,#0x0007 ; page 0, attribute 7 (normal)
mov bp,#mymsg
mov ax,#0x1301 ; write string, move cursor
int 0x10
loop1: jmp loop1
mymsg:
.byte 13,10
.ascii "Handling BIOS interrupts"
---------------------------------------------
I am trying to write to the above code in
AT&T format as given below .
But I get the error in "ld" .
sect2.o: In function `_start':
sect2.o(.text+0xd): relocation truncated to fit:
R_386_16 data
-------------AT&T SYNTAX --------------------
.code16
.align 4
.data
mymsg:
.byte 13,10
.ascii "Handling BIOS interrupts"
.text
.globl _start
_start:
movb $0x03,%ah # read cursor position.
xor %bh,%bh
int $0x10
movw $24,%cx # length of our beautiful string.
movw $0x0007,%bx # page 0, attribute 7 (normal)
movw $mymsg,%bp
movw $0x1301,%ax # write string, move cursor
int $0x10
loop1:
jmp loop1
----------------------------------------------
Please help me how to resolve this .
Regards
________________________________________________________________________
Want to sell your car? advertise on Yahoo Autos Classifieds. It's Free!!
visit http://in.autos.yahoo.com
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Prblem with AT&T
2002-08-08 7:31 Prblem with AT&T Anticipating a Reply
@ 2002-08-08 8:02 ` Frederic Marmond
2002-08-08 9:28 ` Anticipating a Reply
2002-08-08 16:04 ` Maciej Hrebien
1 sibling, 1 reply; 10+ messages in thread
From: Frederic Marmond @ 2002-08-08 8:02 UTC (permalink / raw)
To: ruxyz, linux-assembly
hi!
how are you today?
;-)
well, with your error code, I think that what i said yesterday was right:
your syntax at
mymsg:
.byte 13,10
.ascii "Handling BIOS interrupts"
[...]
movw $mymsg,%bp
But as I don't know about At&t syntax, here is an example of good syntax
$ cat write.s
.data
hw:
.string "hello world\n"
.text
.globl main
main:
movl $SYS_write,%eax
movl $1,%ebx
movl $hw,%ecx
movl $12,%edx
int $0x80
movl $SYS_exit,%eax
xorl %ebx,%ebx
int $0x80
ret
For At&t / intel syntax, please refer to:
www.linuxassembly.org
or more precisely:
http://www.linuxassembly.org/linasm.html
happy new year!
;-)
Fred
Anticipating a Reply wrote:
>Hi All !
>
> I have got the below 16 bit code which is
>in Intel Syntax .
>
>----------- INTEL SYNTAX CODE ------------------------
>
>entry start
>
>start:
> mov ah,#0x03 ; read cursor position.
> xor bh,bh
> int 0x10
> mov cx,#26 ; length of our beautiful string.
> mov bx,#0x0007 ; page 0, attribute 7 (normal)
> mov bp,#mymsg
> mov ax,#0x1301 ; write string, move cursor
> int 0x10
>
> loop1: jmp loop1
>
>mymsg:
> .byte 13,10
> .ascii "Handling BIOS interrupts"
>
>
>---------------------------------------------
>
>I am trying to write to the above code in
>AT&T format as given below .
>
> But I get the error in "ld" .
>
>sect2.o: In function `_start':
>sect2.o(.text+0xd): relocation truncated to fit:
>R_386_16 data
>
>
>-------------AT&T SYNTAX --------------------
>
>
>.code16
>
>.align 4
>
>.data
>
>mymsg:
> .byte 13,10
> .ascii "Handling BIOS interrupts"
>
>.text
>
>.globl _start
>
>_start:
> movb $0x03,%ah # read cursor position.
> xor %bh,%bh
>
> int $0x10
>
> movw $24,%cx # length of our beautiful string.
> movw $0x0007,%bx # page 0, attribute 7 (normal)
> movw $mymsg,%bp
> movw $0x1301,%ax # write string, move cursor
>
> int $0x10
>
>loop1:
> jmp loop1
>
>----------------------------------------------
>
> Please help me how to resolve this .
>
>Regards
>
>________________________________________________________________________
>Want to sell your car? advertise on Yahoo Autos Classifieds. It's Free!!
> visit http://in.autos.yahoo.com
>-
>To unsubscribe from this list: send the line "unsubscribe linux-assembly" in
>the body of a message to majordomo@vger.kernel.org
>More majordomo info at http://vger.kernel.org/majordomo-info.html
>
>
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Prblem with AT&T
2002-08-08 8:02 ` Frederic Marmond
@ 2002-08-08 9:28 ` Anticipating a Reply
0 siblings, 0 replies; 10+ messages in thread
From: Anticipating a Reply @ 2002-08-08 9:28 UTC (permalink / raw)
To: fmarmond, linux-assembly
Hi Frederic !
I'am fine but got up late this morning ,
because of the beautiful dream .
The code you sent was for 32 bit mode
and I have passed the address in the same
manner to "bp" .
I think there is some other method to
pass the address to the " bp " for 16
bit mode which is OS independent .
Hope some AT&T 16 bit specialist
will rescue me out of this problem .
Waiting for the AT&T Robinhood to
help me out .
Harmony !
--- Frederic Marmond <fmarmond@eprocess.fr> wrote: >
hi!
>
> how are you today?
> ;-)
>
> well, with your error code, I think that what i said
> yesterday was right:
> your syntax at
>
> mymsg:
> .byte 13,10
> .ascii "Handling BIOS interrupts"
>
> [...]
>
> movw $mymsg,%bp
>
> But as I don't know about At&t syntax, here is an
> example of good syntax
>
> $ cat write.s
> .data
> hw:
> .string "hello world\n"
> .text
> .globl main
> main:
> movl $SYS_write,%eax
> movl $1,%ebx
> movl $hw,%ecx
> movl $12,%edx
> int $0x80
> movl $SYS_exit,%eax
> xorl %ebx,%ebx
> int $0x80
> ret
>
>
> For At&t / intel syntax, please refer to:
> www.linuxassembly.org
> or more precisely:
> http://www.linuxassembly.org/linasm.html
>
>
> happy new year!
>
> ;-)
> Fred
>
>
> Anticipating a Reply wrote:
>
> >Hi All !
> >
> > I have got the below 16 bit code which is
> >in Intel Syntax .
> >
> >----------- INTEL SYNTAX CODE
> ------------------------
> >
> >entry start
> >
> >start:
> > mov ah,#0x03 ; read cursor position.
> > xor bh,bh
> > int 0x10
> > mov cx,#26 ; length of our beautiful string.
> > mov bx,#0x0007 ; page 0, attribute 7 (normal)
> > mov bp,#mymsg
> > mov ax,#0x1301 ; write string, move cursor
> > int 0x10
> >
> > loop1: jmp loop1
> >
> >mymsg:
> > .byte 13,10
> > .ascii "Handling BIOS interrupts"
> >
> >
> >---------------------------------------------
> >
> >I am trying to write to the above code in
> >AT&T format as given below .
> >
> > But I get the error in "ld" .
> >
> >sect2.o: In function `_start':
> >sect2.o(.text+0xd): relocation truncated to fit:
> >R_386_16 data
> >
> >
> >-------------AT&T SYNTAX --------------------
> >
> >
> >.code16
> >
> >.align 4
> >
> >.data
> >
> >mymsg:
> > .byte 13,10
> > .ascii "Handling BIOS interrupts"
> >
> >.text
> >
> >.globl _start
> >
> >_start:
> > movb $0x03,%ah # read cursor position.
> > xor %bh,%bh
> >
> > int $0x10
> >
> > movw $24,%cx # length of our beautiful string.
>
> > movw $0x0007,%bx # page 0, attribute 7 (normal)
> > movw $mymsg,%bp
> > movw $0x1301,%ax # write string, move cursor
> >
> > int $0x10
> >
> >loop1:
> > jmp loop1
> >
> >----------------------------------------------
> >
> > Please help me how to resolve this .
> >
> >Regards
> >
>
>________________________________________________________________________
> >Want to sell your car? advertise on Yahoo Autos
> Classifieds. It's Free!!
> > visit http://in.autos.yahoo.com
> >-
> >To unsubscribe from this list: send the line
> "unsubscribe linux-assembly" in
> >the body of a message to majordomo@vger.kernel.org
> >More majordomo info at
> http://vger.kernel.org/majordomo-info.html
> >
> >
> >
>
>
>
________________________________________________________________________
Want to sell your car? advertise on Yahoo Autos Classifieds. It's Free!!
visit http://in.autos.yahoo.com
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Prblem with AT&T
2002-08-08 7:31 Prblem with AT&T Anticipating a Reply
2002-08-08 8:02 ` Frederic Marmond
@ 2002-08-08 16:04 ` Maciej Hrebien
2002-08-10 4:41 ` Anticipating a Reply
1 sibling, 1 reply; 10+ messages in thread
From: Maciej Hrebien @ 2002-08-08 16:04 UTC (permalink / raw)
To: linux-assembly
Anticipating a Reply wrote:
>
> But I get the error in "ld" .
>
> sect2.o: In function `_start':
> sect2.o(.text+0xd): relocation truncated to fit:
> R_386_16 data
>
>
> -------------AT&T SYNTAX --------------------
>
> .code16
>
> .align 4
>
> .data
>
> mymsg:
> .byte 13,10
> .ascii "Handling BIOS interrupts"
>
> .text
>
> .globl _start
>
> _start:
> movb $0x03,%ah # read cursor position.
> xor %bh,%bh
>
> int $0x10
>
> movw $24,%cx # length of our beautiful string.
> movw $0x0007,%bx # page 0, attribute 7 (normal)
> movw $mymsg,%bp
> movw $0x1301,%ax # write string, move cursor
>
> int $0x10
>
> loop1:
> jmp loop1
try ld like this:
ld -Ttext 0x0 -o beauty_str beauty_str.o
it works but You must set right "text" address - more useful to You than
0x0 in this example.
Regards
--
Maciej Hrebien
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Prblem with AT&T
2002-08-08 16:04 ` Maciej Hrebien
@ 2002-08-10 4:41 ` Anticipating a Reply
2002-08-10 11:47 ` Maciej Hrebien
2002-08-10 19:35 ` Maciej Hrebien
0 siblings, 2 replies; 10+ messages in thread
From: Anticipating a Reply @ 2002-08-10 4:41 UTC (permalink / raw)
To: m_hrebien, linux-assembly
Hi All !
I got the below code compiled , but it does not
give the desired results .
I have two modules , stored on a boot floppy .
The first module residing in the boot sector
loads the second module ( residing
on second sector of floppy ) into RAM and
transfers control to it . The Second module
prints a string onto the screen .
All the relevant code is given below .
Please help this newbie find out ,
what the problem is ?
Thanks in Advance .
With Best Regards.
---------THE MAKEFILE --------
all : bsect sect2 write
bsect : bsect.o
ld -s -oformat binary -Ttext 0x000 -o bsect bsect.o
sect2 : sect2.o
ld -s -oformat binary -Ttext 0x500 -o sect2 sect2.o
bsect.o : bsect.s
as bsect.s -o bsect.o
sect2.o : sect2.s
as sect2.s -o sect2.o
write : write.c
cc write.c -o write
clean :
rm bsect.o sect2.o bsect sect2 write
------( Module 1) bsect.s - Boot sector code
----------
.code16
.globl _start
_start:
movw $0x500,%ax
movw %ax,%es
movw $0,%bx #segment offset
movb $0,%dl #drive no.
movb $0,%dh #head no.
movb $0,%ch #track no.
movb $2,%cl #sector no.( 1..18 )
movb $1,%al #no. of sectors tranferred
movb $2,%ah #function no.
int $0x13
ljmp $0x500,$0
-----(Module 2)sect2.s -Code in 2nd sector --------
.code16
.data
mymsg:
.byte 13,10
.ascii "Handling BIOS interrupts"
.text
.globl _start
_start:
movb $0x03,%ah # read cursor position.
xor %bh,%bh
int $0x10
movw $26,%cx # length of our beautiful string.
movw $0x0007,%bx # page 0, attribute 7 (normal)
movw $mymsg,%bp
movw $0x1301,%ax # write string, move cursor
int $0x10
loop1:
jmp loop1
------------ write.c ---------------------
/*
* Program to write to boot sector and
* desired code to second sector
*
*/
#include <sys/types.h> /* unistd.h needs this */
#include <unistd.h> /* contains read/write */
#include <fcntl.h>
int main()
{
char boot_buf[512];
int floppy_desc, file_desc;
file_desc = open("./bsect", O_RDONLY);
read(file_desc, boot_buf, 510);
close(file_desc);
boot_buf[510] = 0x55;
boot_buf[511] = 0xaa;
floppy_desc = open("/dev/fd0", O_RDWR);
lseek(floppy_desc, 0, SEEK_SET);
write(floppy_desc, boot_buf, 512);
file_desc = open("./sect2", O_RDONLY);
read(file_desc, boot_buf, 512);
close(file_desc);
lseek(floppy_desc, 512, SEEK_SET);
write(floppy_desc, boot_buf, 512);
close(floppy_desc);
}
---------------------THE END ----------------------
--- Maciej Hrebien <m_hrebien@wp.pl> wrote: >
Anticipating a Reply wrote:
> >
> > But I get the error in "ld" .
> >
> > sect2.o: In function `_start':
> > sect2.o(.text+0xd): relocation truncated to fit:
> > R_386_16 data
> >
> >
> > -------------AT&T SYNTAX --------------------
> >
> > .code16
> >
> > .align 4
> >
> > .data
> >
> > mymsg:
> > .byte 13,10
> > .ascii "Handling BIOS interrupts"
> >
> > .text
> >
> > .globl _start
> >
> > _start:
> > movb $0x03,%ah # read cursor position.
> > xor %bh,%bh
> >
> > int $0x10
> >
> > movw $24,%cx # length of our beautiful
> string.
> > movw $0x0007,%bx # page 0, attribute 7
> (normal)
> > movw $mymsg,%bp
> > movw $0x1301,%ax # write string, move
> cursor
> >
> > int $0x10
> >
> > loop1:
> > jmp loop1
>
> try ld like this:
>
> ld -Ttext 0x0 -o beauty_str beauty_str.o
>
> it works but You must set right "text" address -
> more useful to You than
> 0x0 in this example.
>
> Regards
>
> --
> Maciej Hrebien
>
> -
> To unsubscribe from this list: send the line
> "unsubscribe linux-assembly" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at
http://vger.kernel.org/majordomo-info.html
________________________________________________________________________
Want to sell your car? advertise on Yahoo Autos Classifieds. It's Free!!
visit http://in.autos.yahoo.com
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Prblem with AT&T
2002-08-10 4:41 ` Anticipating a Reply
@ 2002-08-10 11:47 ` Maciej Hrebien
2002-08-10 19:35 ` Maciej Hrebien
1 sibling, 0 replies; 10+ messages in thread
From: Maciej Hrebien @ 2002-08-10 11:47 UTC (permalink / raw)
To: linux-assembly
Anticipating a Reply wrote:
>
> Hi All !
>
> I got the below code compiled , but it does not
> give the desired results .
>
> I have two modules , stored on a boot floppy .
> The first module residing in the boot sector
> loads the second module ( residing
> on second sector of floppy ) into RAM and
> transfers control to it . The Second module
> prints a string onto the screen .
I've tried very similar code some time ago and all the information
needed to assembly and link it properly i've found in "info as" &
Linux's arch/i386/boot/Makefile. Try to study it, it's very interesting
lecture ;)
> All the relevant code is given below .
> Please help this newbie find out ,
> what the problem is ?
I've chceck it. bsect.s, sect2.s & write.c are OK but Makefile is wrong!
Please look below.
> ---------THE MAKEFILE --------
>
> all : bsect sect2 write
>
> bsect : bsect.o
> ld -s -oformat binary -Ttext 0x000 -o bsect bsect.o
ld --oformat binary -Ttext 0x0 -o bsect bsect.o
^^ 2 "-" are needed & "-s" isn't useful for us
> sect2 : sect2.o
> ld -s -oformat binary -Ttext 0x500 -o sect2 sect2.o
ld --oformat binary -Ttext 0x0 -Tdata 0x1c -o sect2 sect2.o
The same thing with "-" & "-s". The text section in this "module" begins
at 0x0 address and the data section is 0x1c bytes after text section.
This is needed to properly do:
mov $mymsg,%bp
and see the beautiful string :)
Hope I helped You, regards
> bsect.o : bsect.s
> as bsect.s -o bsect.o
>
> sect2.o : sect2.s
> as sect2.s -o sect2.o
>
> write : write.c
> cc write.c -o write
>
> clean :
> rm bsect.o sect2.o bsect sect2 write
>
> ------( Module 1) bsect.s - Boot sector code
> ----------
>
> .code16
>
> .globl _start
>
> _start:
>
> movw $0x500,%ax
> movw %ax,%es
> movw $0,%bx #segment offset
> movb $0,%dl #drive no.
> movb $0,%dh #head no.
> movb $0,%ch #track no.
> movb $2,%cl #sector no.( 1..18 )
> movb $1,%al #no. of sectors tranferred
> movb $2,%ah #function no.
> int $0x13
>
> ljmp $0x500,$0
>
> -----(Module 2)sect2.s -Code in 2nd sector --------
>
> .code16
>
> .data
>
> mymsg:
> .byte 13,10
> .ascii "Handling BIOS interrupts"
> .text
>
> .globl _start
>
> _start:
> movb $0x03,%ah # read cursor position.
> xor %bh,%bh
>
> int $0x10
>
> movw $26,%cx # length of our beautiful string.
> movw $0x0007,%bx # page 0, attribute 7 (normal)
> movw $mymsg,%bp
> movw $0x1301,%ax # write string, move cursor
>
> int $0x10
>
> loop1:
> jmp loop1
>
>
> ------------ write.c ---------------------
>
> /*
> * Program to write to boot sector and
> * desired code to second sector
> *
> */
>
> #include <sys/types.h> /* unistd.h needs this */
> #include <unistd.h> /* contains read/write */
> #include <fcntl.h>
>
> int main()
> {
> char boot_buf[512];
> int floppy_desc, file_desc;
>
> file_desc = open("./bsect", O_RDONLY);
> read(file_desc, boot_buf, 510);
> close(file_desc);
>
> boot_buf[510] = 0x55;
> boot_buf[511] = 0xaa;
>
> floppy_desc = open("/dev/fd0", O_RDWR);
> lseek(floppy_desc, 0, SEEK_SET);
> write(floppy_desc, boot_buf, 512);
>
>
> file_desc = open("./sect2", O_RDONLY);
> read(file_desc, boot_buf, 512);
> close(file_desc);
>
> lseek(floppy_desc, 512, SEEK_SET);
> write(floppy_desc, boot_buf, 512);
> close(floppy_desc);
>
> }
>
> ---------------------THE END ----------------------
--
Maciej Hrebien
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Prblem with AT&T
2002-08-10 4:41 ` Anticipating a Reply
2002-08-10 11:47 ` Maciej Hrebien
@ 2002-08-10 19:35 ` Maciej Hrebien
2002-08-14 6:35 ` Anticipating a Reply
1 sibling, 1 reply; 10+ messages in thread
From: Maciej Hrebien @ 2002-08-10 19:35 UTC (permalink / raw)
To: linux-assembly
Anticipating a Reply wrote:
>
> Hi All !
>
> I got the below code compiled , but it does not
> give the desired results .
>
> I have two modules , stored on a boot floppy .
> The first module residing in the boot sector
> loads the second module ( residing
> on second sector of floppy ) into RAM and
> transfers control to it . The Second module
> prints a string onto the screen .
I've tried very similar code some time ago and all the information
needed to assembly and link it properly i've found in "info as" &
Linux's arch/i386/boot/Makefile. Try to study it, it's very interesting
lecture ;)
> All the relevant code is given below .
> Please help this newbie find out ,
> what the problem is ?
I've chceck it. bsect.s, sect2.s & write.c are OK but Makefile is wrong!
Please look below.
> ---------THE MAKEFILE --------
>
> all : bsect sect2 write
>
> bsect : bsect.o
> ld -s -oformat binary -Ttext 0x000 -o bsect bsect.o
ld --oformat binary -Ttext 0x0 -o bsect bsect.o
^^ 2 "-" are needed & "-s" isn't useful for us
> sect2 : sect2.o
> ld -s -oformat binary -Ttext 0x500 -o sect2 sect2.o
ld --oformat binary -Ttext 0x0 -Tdata 0x1c -o sect2 sect2.o
The same thing with "-" & "-s". The text section in this "module" begins
at 0x0 address and the data section is 0x1c bytes after text section.
This is needed to properly do:
mov $mymsg,%bp
and see the beautiful string :)
Hope I helped You, regards
> bsect.o : bsect.s
> as bsect.s -o bsect.o
>
> sect2.o : sect2.s
> as sect2.s -o sect2.o
>
> write : write.c
> cc write.c -o write
>
> clean :
> rm bsect.o sect2.o bsect sect2 write
>
> ------( Module 1) bsect.s - Boot sector code
> ----------
>
> .code16
>
> .globl _start
>
> _start:
>
> movw $0x500,%ax
> movw %ax,%es
> movw $0,%bx #segment offset
> movb $0,%dl #drive no.
> movb $0,%dh #head no.
> movb $0,%ch #track no.
> movb $2,%cl #sector no.( 1..18 )
> movb $1,%al #no. of sectors tranferred
> movb $2,%ah #function no.
> int $0x13
>
> ljmp $0x500,$0
>
> -----(Module 2)sect2.s -Code in 2nd sector --------
>
> .code16
>
> .data
>
> mymsg:
> .byte 13,10
> .ascii "Handling BIOS interrupts"
> .text
>
> .globl _start
>
> _start:
> movb $0x03,%ah # read cursor position.
> xor %bh,%bh
>
> int $0x10
>
> movw $26,%cx # length of our beautiful string.
> movw $0x0007,%bx # page 0, attribute 7 (normal)
> movw $mymsg,%bp
> movw $0x1301,%ax # write string, move cursor
>
> int $0x10
>
> loop1:
> jmp loop1
>
>
> ------------ write.c ---------------------
>
> /*
> * Program to write to boot sector and
> * desired code to second sector
> *
> */
>
> #include <sys/types.h> /* unistd.h needs this */
> #include <unistd.h> /* contains read/write */
> #include <fcntl.h>
>
> int main()
> {
> char boot_buf[512];
> int floppy_desc, file_desc;
>
> file_desc = open("./bsect", O_RDONLY);
> read(file_desc, boot_buf, 510);
> close(file_desc);
>
> boot_buf[510] = 0x55;
> boot_buf[511] = 0xaa;
>
> floppy_desc = open("/dev/fd0", O_RDWR);
> lseek(floppy_desc, 0, SEEK_SET);
> write(floppy_desc, boot_buf, 512);
>
>
> file_desc = open("./sect2", O_RDONLY);
> read(file_desc, boot_buf, 512);
> close(file_desc);
>
> lseek(floppy_desc, 512, SEEK_SET);
> write(floppy_desc, boot_buf, 512);
> close(floppy_desc);
>
> }
>
> ---------------------THE END ----------------------
--
Maciej Hrebien
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Prblem with AT&T
2002-08-10 19:35 ` Maciej Hrebien
@ 2002-08-14 6:35 ` Anticipating a Reply
2002-08-14 18:40 ` Maciej Hrebien
0 siblings, 1 reply; 10+ messages in thread
From: Anticipating a Reply @ 2002-08-14 6:35 UTC (permalink / raw)
To: m_hrebien, linux-assembly
Hello Maciej !
Thanks for your help , and the code
now works fine .
Can you please help me understand how
you decided the addresses to use for
the text and data section .
I could not figure out how you
decided to use specifically 0x1c
for the data section .
Can you please explain what addresses
are these referring to ?
Thanks in Advance .
With Regards
ld --oformat binary -Ttext 0x0 -Tdata 0x1c -o sect2
sect2.o
--- Maciej Hrebien <m_hrebien@wp.pl> wrote: >
Anticipating a Reply wrote:
> >
> > Hi All !
> >
> > I got the below code compiled , but it does not
> > give the desired results .
> >
> > I have two modules , stored on a boot floppy .
> > The first module residing in the boot sector
> > loads the second module ( residing
> > on second sector of floppy ) into RAM and
> > transfers control to it . The Second module
> > prints a string onto the screen .
>
> I've tried very similar code some time ago and all
> the information
> needed to assembly and link it properly i've found
> in "info as" &
> Linux's arch/i386/boot/Makefile. Try to study it,
> it's very interesting
> lecture ;)
>
> > All the relevant code is given below .
> > Please help this newbie find out ,
> > what the problem is ?
>
> I've chceck it. bsect.s, sect2.s & write.c are OK
> but Makefile is wrong!
> Please look below.
>
> > ---------THE MAKEFILE --------
> >
> > all : bsect sect2 write
> >
> > bsect : bsect.o
> > ld -s -oformat binary -Ttext 0x000 -o
> bsect bsect.o
>
> ld --oformat binary -Ttext 0x0 -o bsect bsect.o
>
> ^^ 2 "-" are needed & "-s" isn't useful for us
>
> > sect2 : sect2.o
> > ld -s -oformat binary -Ttext 0x500 -o
> sect2 sect2.o
>
> ld --oformat binary -Ttext 0x0 -Tdata 0x1c -o sect2
> sect2.o
>
> The same thing with "-" & "-s". The text section in
> this "module" begins
> at 0x0 address and the data section is 0x1c bytes
> after text section.
> This is needed to properly do:
>
> mov $mymsg,%bp
>
> and see the beautiful string :)
>
> Hope I helped You, regards
>
> > bsect.o : bsect.s
> > as bsect.s -o bsect.o
> >
> > sect2.o : sect2.s
> > as sect2.s -o sect2.o
> >
> > write : write.c
> > cc write.c -o write
> >
> > clean :
> > rm bsect.o sect2.o bsect sect2 write
> >
> > ------( Module 1) bsect.s - Boot sector code
> > ----------
> >
> > .code16
> >
> > .globl _start
> >
> > _start:
> >
> > movw $0x500,%ax
> > movw %ax,%es
> > movw $0,%bx #segment offset
> > movb $0,%dl #drive no.
> > movb $0,%dh #head no.
> > movb $0,%ch #track no.
> > movb $2,%cl #sector no.( 1..18 )
> > movb $1,%al #no. of sectors tranferred
> > movb $2,%ah #function no.
> > int $0x13
> >
> > ljmp $0x500,$0
> >
> > -----(Module 2)sect2.s -Code in 2nd sector
> --------
> >
> > .code16
> >
> > .data
> >
> > mymsg:
> > .byte 13,10
> > .ascii "Handling BIOS interrupts"
> > .text
> >
> > .globl _start
> >
> > _start:
> > movb $0x03,%ah # read cursor position.
> > xor %bh,%bh
> >
> > int $0x10
> >
> > movw $26,%cx # length of our beautiful
> string.
> > movw $0x0007,%bx # page 0, attribute 7
> (normal)
> > movw $mymsg,%bp
> > movw $0x1301,%ax # write string, move
> cursor
> >
> > int $0x10
> >
> > loop1:
> > jmp loop1
> >
> >
> > ------------ write.c ---------------------
> >
> > /*
> > * Program to write to boot sector and
> > * desired code to second sector
> > *
> > */
> >
> > #include <sys/types.h> /* unistd.h needs this */
> > #include <unistd.h> /* contains read/write */
> > #include <fcntl.h>
> >
> > int main()
> > {
> > char boot_buf[512];
> > int floppy_desc, file_desc;
> >
> > file_desc = open("./bsect", O_RDONLY);
> > read(file_desc, boot_buf, 510);
> > close(file_desc);
> >
> > boot_buf[510] = 0x55;
> > boot_buf[511] = 0xaa;
> >
> > floppy_desc = open("/dev/fd0", O_RDWR);
> > lseek(floppy_desc, 0, SEEK_SET);
> > write(floppy_desc, boot_buf, 512);
> >
> >
> > file_desc = open("./sect2", O_RDONLY);
> > read(file_desc, boot_buf, 512);
> > close(file_desc);
> >
> > lseek(floppy_desc, 512, SEEK_SET);
> > write(floppy_desc, boot_buf, 512);
> > close(floppy_desc);
> >
> > }
> >
> > ---------------------THE END
> ----------------------
>
> --
> Maciej Hrebien
>
> -
> To unsubscribe from this list: send the line
> "unsubscribe linux-assembly" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at
http://vger.kernel.org/majordomo-info.html
________________________________________________________________________
Want to sell your car? advertise on Yahoo Autos Classifieds. It's Free!!
visit http://in.autos.yahoo.com
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Prblem with AT&T
2002-08-14 6:35 ` Anticipating a Reply
@ 2002-08-14 18:40 ` Maciej Hrebien
2002-08-16 4:55 ` Anticipating a Reply
0 siblings, 1 reply; 10+ messages in thread
From: Maciej Hrebien @ 2002-08-14 18:40 UTC (permalink / raw)
To: linux-assembly
Anticipating a Reply wrote:
>
> Hello Maciej !
>
> Thanks for your help , and the code
> now works fine .
>
> Can you please help me understand how
> you decided the addresses to use for
> the text and data section .
>
> I could not figure out how you
> decided to use specifically 0x1c
> for the data section .
Oops! It should be 0x18, sorry! ;) 0x1c works too but it adds 4 zeros
(as a padding) at the end of text section and You don't need it, do You?
> Can you please explain what addresses
> are these referring to ?
>
> Thanks in Advance .
>
> With Regards
>
> ld --oformat binary -Ttext 0x0 -Tdata 0x1c -o sect2
> sect2.o
The "-Ttext" and "-Tdata" options tell the linker what is the base
address of text and data segment of the output file (man ld). ld links
Your code in binary format so it's good to tell him how he must "look"
at the code to link it as You wish. In Your "module" there is nothing
before text section, it's the first section, so the starting address is
set to 0x0. 0x18 bytes (or 0x1c in the fat version ;)) after text
section there is the data section which holds the beautiful string. You
must tell ld explicitly where it is to avoid default behavior which i
think isn't good for You (pad with 0x1000 zeros!). Keep in mind that You
are working with binary format and You are decideing how the result of
linking looks.
Regards
--
Maciej Hrebien
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Prblem with AT&T
2002-08-14 18:40 ` Maciej Hrebien
@ 2002-08-16 4:55 ` Anticipating a Reply
0 siblings, 0 replies; 10+ messages in thread
From: Anticipating a Reply @ 2002-08-16 4:55 UTC (permalink / raw)
To: m_hrebien, linux-assembly
Hi Maciej !
Thanks for clearing the doubt .
I had checked the sect2.o file using
objdump -h , and got confused with the
difference in the text address locations .
Your explanation has made things clear .
Have a nice time .
Cheers !
--- Maciej Hrebien <m_hrebien@wp.pl> wrote: >
Anticipating a Reply wrote:
> >
> > Hello Maciej !
> >
> > Thanks for your help , and the code
> > now works fine .
> >
> > Can you please help me understand how
> > you decided the addresses to use for
> > the text and data section .
> >
> > I could not figure out how you
> > decided to use specifically 0x1c
> > for the data section .
>
> Oops! It should be 0x18, sorry! ;) 0x1c works too
> but it adds 4 zeros
> (as a padding) at the end of text section and You
> don't need it, do You?
>
> > Can you please explain what addresses
> > are these referring to ?
> >
> > Thanks in Advance .
> >
> > With Regards
> >
> > ld --oformat binary -Ttext 0x0 -Tdata 0x1c -o
> sect2
> > sect2.o
>
> The "-Ttext" and "-Tdata" options tell the linker
> what is the base
> address of text and data segment of the output file
> (man ld). ld links
> Your code in binary format so it's good to tell him
> how he must "look"
> at the code to link it as You wish. In Your "module"
> there is nothing
> before text section, it's the first section, so the
> starting address is
> set to 0x0. 0x18 bytes (or 0x1c in the fat version
> ;)) after text
> section there is the data section which holds the
> beautiful string. You
> must tell ld explicitly where it is to avoid default
> behavior which i
> think isn't good for You (pad with 0x1000 zeros!).
> Keep in mind that You
> are working with binary format and You are decideing
> how the result of
> linking looks.
>
> Regards
>
> --
> Maciej Hrebien
>
> -
> To unsubscribe from this list: send the line
> "unsubscribe linux-assembly" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at
http://vger.kernel.org/majordomo-info.html
________________________________________________________________________
Want to sell your car? advertise on Yahoo Autos Classifieds. It's Free!!
visit http://in.autos.yahoo.com
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2002-08-16 4:55 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-08-08 7:31 Prblem with AT&T Anticipating a Reply
2002-08-08 8:02 ` Frederic Marmond
2002-08-08 9:28 ` Anticipating a Reply
2002-08-08 16:04 ` Maciej Hrebien
2002-08-10 4:41 ` Anticipating a Reply
2002-08-10 11:47 ` Maciej Hrebien
2002-08-10 19:35 ` Maciej Hrebien
2002-08-14 6:35 ` Anticipating a Reply
2002-08-14 18:40 ` Maciej Hrebien
2002-08-16 4:55 ` Anticipating a Reply
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).