2002-09-26 14:45:59

by immortal1015

[permalink] [raw]
Subject: A newbie's question

Hi, all. I am a newbie to Linuxe Kernel. I am reading the kernel source about bootstrap in Linux.
I was confused by the boot.s:
/////////////////////////////
mov ax,#BOOTSEG
mov ds,ax
mov ax,#INITSEG
mov es,ax
mov cx,#256
sub si,si
sub di,di
rep
movw
jmpi go,INITSEG
/////////////////////////////
1. What assembly language used in boot.s? Intel Asm or AT&T?
2. Where is the definition of operand movw and jmpi? I cant find it in the Intel Manual.

Please give me some adivices.

Best regards.



2002-09-26 15:09:05

by jbradford

[permalink] [raw]
Subject: Re: A newbie's question

> Hi, all. I am a newbie to Linuxe Kernel. I am reading the kernel source about bootstrap in Linux.
> I was confused by the boot.s:
> /////////////////////////////
> mov ax,#BOOTSEG
> mov ds,ax
> mov ax,#INITSEG
> mov es,ax
> mov cx,#256
> sub si,si
> sub di,di
> rep
> movw
> jmpi go,INITSEG
> /////////////////////////////
> 1. What assembly language used in boot.s? Intel Asm or AT&T?
> 2. Where is the definition of operand movw and jmpi? I cant find it in the Intel Manual.
>
> Please give me some adivices.

I could be totally wrong here, but my understanding of the situtation is that the bootstrap was originally compiled with as86, not gas, and therefore was in the Intel format, (the standard for gas being AT&T, although Gas can also compile Intel format using the .intel_syntax pseudo-op). I assume that the bootloader has stayed in Intel format for historical reasons.

However, I could be totally wrong. The last assembler coding I did was on a Z80 :-).

John.

2002-09-26 16:00:28

by DervishD

[permalink] [raw]
Subject: Re: A newbie's question

Hi unknown :)

> rep
> movw

In my bootsector.S, it's movsw: repeat move (string) by words.
'movw' is 'mov word size operands'.

> jmpi go,INITSEG

AFAIK, the correct is 'ljmp': long jump. What kernel sources are
you seeing?. Old kernels (2.0 and I think that 2.2 too) used as86 to
do the assembling, and the syntax was like the Intel one, but with
some differences. Not quite standard, I think.

> /////////////////////////////
> 1. What assembly language used in boot.s? Intel Asm or AT&T?

AT&T in new kernels, fully 'assembleable' with GNU as. IMHO is a
better syntax, but I don't want to feed a troll here ;)

> 2. Where is the definition of operand movw and jmpi?
> I cant find it in the Intel Manual.

Of course, there aren't Intel syntax anyway :) I recommend you to
see the 2.4 sources for reading the assembler part. Moreover, the
info section for 'GNU as' comments the differences between Intel
assembly syntax and the AT&T one. This will be of great help.

In addition to this, I have a document about using GNU as for
real mode assembly that comments some of these points. But it is
written in spanish only :((

Last, the Assembly-HOWTO will cast some light to the issue, too.

Ra?l