linux-assembly.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* 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).