From: Frederic Marmond <fmarmond@eprocess.fr>
To: ruxyz@yahoo.com
Cc: Emanuele Altieri <ealtieri@hampshire.edu>,
Linux Assembly List <linux-assembly@vger.kernel.org>
Subject: Re: newbie question on gnu 'as' => explaination about the why (for really newbie ;-))
Date: Wed, 31 Jul 2002 13:31:32 +0200 [thread overview]
Message-ID: <3D47CA94.3010106@eprocess.fr> (raw)
In-Reply-To: 20020731100911.58715.qmail@web14507.mail.yahoo.com
hum, well...
I don't use the AT&T syntax, so, I may be wrong, but I think your code
is not right again:
you don't specify any segment! (only the bx register)
So, how do you think the CPU will know where to put your 0x411f ?
You have to specify the segment after having fill it with a value.
movw 0xb800,%bx
movw %bx,%ds
movw $0x411f,(%bx) <= I'm not sure (perhapse a AT&T guru may help us)
Here, we assume that DS is
the default segment token by the as compiler
if I take your origin-code:
mov ax,#0xb800 ; Video Memory address is 0xb800
mov es,ax ; Video Memory is made as Extra Segment
seg es ; Makes next instruction execute wrt Extra Segment
mov [0],#0x41 ; ASCII value of the Character to be displayed
; in 1-row & 1-column
seg es ; Makes next instruction execute wrt Extra Segment
mov [1],#0x1f ; Attribute of the Character to be displayed
; in 1-row & 1-column
; 0x1f represents White
The "seg es" lines are what we need.
I think that by default, 'ds' is used, so, my 3 lines of code may work.
in this:
6> movw $0xb800,%bx # Video Memory address
7> movb $0x41,(%bx) # ASCII value to
8> movw $0xb801,%bx # Video Memory address
9> movb $0x1f,(%bx) # Attribute of the
you will put 0x411f at [ds:0xb800], which is somewhere around your
program code... it will surely erase something you may need (perhapse
your code!)
Anticipating a Reply wrote:
>Hi Frederic ,
>
> Thank you very much for all the
>explanation you have given about the
>addressing in 16-bit real mode .
>
> From this explanation , I think
>I was wrong in line number 7 ,
>which had 0xb800 acting as an
>offset to the Data Segment .
>
> That is,if I'am not wrong we
>always need to specify the addresses
>in the below format -
>
> seg_reg:offset
>----
> OR
>----
> if given as
>
> movb $xxx , ( %seg_reg )
>
>then the contents of "seg_reg"
>will be considered as an Offset
>with respect to the Data Segment.
>
>
>1> .code16
>2>
>3> .globl _start
>4>
>5> _start:
>6> movw $0xb800,%bx # Video Memory address
>7> movb $0x41,(%bx) # ASCII value to
>8> movw $0xb801,%bx # Video Memory address
>9> movb $0x1f,(%bx) # Attribute of the
>10> loop1:
>11> jmp loop1
>
>
>Hope I have got the concept correctly .
>
> Thanking you all for bearing my basic
>doubts and clearing them too.
>
>With best Regards
>
>
> --- Frederic Marmond <fmarmond@eprocess.fr> wrote: >
>Hi,
>
>
>>Here are some explainations you may want to know.
>>
>>When your PC boots, it is in real mode.
>>This mode (!= protected mode) manage memory in this
>>way:
>>segment+offset
>>The segment is a 64ko range , step by 16 bytes.
>>So, if you want to write to b8000 (video memory
>>start in text mode), you
>>may set your segment at 0xb800 (=> 0xb800 * 16 =
>>0xb8000)
>>Then, you can adress this segment of 65536 bytes
>>with an offset of 16bits.
>>(that's why in real mode you can only see the first
>>1Mo of your memory:
>>0xFFFF*16 = 0xFFFF0 ~= 1024*1024 (in fact, a
>>little bit more than 1Mo,
>>because of the offset of 0xffff max))
>>For your problem, in pseudo code:
>>mov 0x411f to 0xb800:0 (write 0x411f to the
>>corner high-left)
>>mov 0x411f to 0xb800:(80*2 *10+ 20*2) (write
>>0x411f to the 10th line
>>(80*2 *10= 80(charPerLine) *2(1char=ascii+attribut)
>>*10(10th line)) and
>>20th char)
>>
>>in assembly, segments are stored in special
>>registers: ds (Data
>>Segment), CS(Code Segment), Es,Fs,Gs (Extra
>>Segments), SS(Stack Segment)
>>Offset may be any of the followings
>>(Ax,Bx,Cx,Dx,Si,Di,Sp). (and, in
>>32bits mode: eAx,eBx,eCx....)
>>
>>So, the pseudo code may be write like that ((in
>>intel syntax, which I
>>prefer, and that compile with nasm):
>>mov ax,0xb800
>>mov es,ax ; we cannot affect
>>directly value to seg
>>register (cannot write mov es,0xb800)
>>mov bx,0x0 ; start of the segment
>>mov [es:bx],0x411f ;the compilator will
>>assume automaticaly movw
>>(mov word => 16 bits)
>>
>>That is what Emanuele wrote you (in At&t syntax):
>>
>> movw $0xB800, %ax
>> movw %ax, %es ; affect the start
>>adress to the segment
>> movb $0x41, %es:0 ; store value in
>>the video memory
>> movb $0x1f, %es:1 ; these 2 lines
>>may be = to movw $0x411f,%es:0
>>
>>
>>hope it helps!
>>
>>Fred
>>
>>Anticipating a Reply wrote:
>>
>>
>>
>>>Hello Emanuele ,
>>>
>>> Thank you for the below code
>>>you sent . It works perfectly and
>>>will help me learn more of assembly .
>>>
>>> Can you please help me figure
>>>out where I'am wrong in the code below,
>>>which I have witten for the same
>>>functionality .
>>>
>>>.code16
>>>
>>>.globl _start
>>>
>>>_start:
>>> movw $0xb800,%bx # Video Memory address
>>> movb $0x41,(%bx) # ASCII value to be
>>>
>>>
>>displayed
>>
>>
>>> movw $0xb801,%bx # Video Memory address
>>> movb $0x1f,(%bx) # Attribute of the
>>>
>>>
>>Character
>>
>>
>>>loop1:
>>> jmp loop1
>>>
>>>
>>> Thanks once again .
>>>
>>>With Best Regards
>>>
>>>--- Emanuele Altieri <ealtieri@hampshire.edu>
>>>
>>>
>>wrote:
>>
>>
>>>
>>>
>>>
>>>
>>>>I'm assuming that you want to keep your code as a
>>>>boot program:
>>>>
>>>> .code16 # needed for
>>>>booting
>>>> .global _start
>>>> _start:
>>>> movw $0xB800, %ax
>>>> movw %ax, %es
>>>> movb $0x41, %es:0
>>>> movb $0x1f, %es:1
>>>> loop1: jmp loop1
>>>>
>>>>
>>>>To assembly and link the program:
>>>>
>>>> as -o boot.o boot.s
>>>> ld -s -oformat binary -Ttext 0x0 -o boot boot.o
>>>>
>>>>The last command creates the "boot" file that is
>>>>ready to be
>>>>installed in the first sector of the floppy disk:
>>>>
>>>> dd seek=0 if=boot of=/dev/fd0
>>>>
>>>>
>>>>Hope this helps
>>>>
>>>> -Emanuele
>>>>
>>>>
>>>>On Tue, 2002-07-30 at 07:59, Anticipating a Reply
>>>>wrote:
>>>>
>>>>
>>>>
>>>>
>>>>>Hi Everybody,
>>>>>
>>>>> I have got a small piece of Assembly code
>>>>>
>>>>>
>>>>>
>>>>>
>>>>,
>>>>
>>>>
>>>>
>>>>
>>>>>which writes a character "A" on the screen .
>>>>>
>>>>> The below program is compiled and written
>>>>>to the boot sector of a floppy. It compiles
>>>>>using the command :
>>>>>
>>>>> as86 boot.s -o boot.o
>>>>> ld86 -d boot.o -o boot
>>>>>
>>>>> I want to rewrite it in AT&T syntax and
>>>>>want to use GNU "as" assembler to compile it .
>>>>>I tried doing it ,but with no success .
>>>>>
>>>>> Can anybody please help me rewite the
>>>>>below code in AT&T syntax and tell me how
>>>>>to compile & link it ?
>>>>>
>>>>> Thanks in Advance .
>>>>>
>>>>>With Best Regards
>>>>>
>>>>>
>>>>>THE CODE :
>>>>>------------
>>>>>
>>>>>
>>>>>entry start
>>>>>
>>>>>start:
>>>>> mov ax,#0xb800 ; Video Memory address is
>>>>>
>>>>>
>>>>>
>>>>>
>>>>0xb800
>>>>
>>>>
>>>>
>>>>
>>>>>
>>>>> mov es,ax ; Video Memory is made as
>>>>>
>>>>>
>>>>>
>>>>>
>>>>Extra
>>>>
>>>>
>>>>
>>>>
>>>>>Segment
>>>>> seg es ; Makes next instruction
>>>>>
>>>>>
>>>>>
>>>>>
>>>>execute
>>>>
>>>>
>>>>
>>>>
>>>>>wrt Extra Segment
>>>>> mov [0],#0x41 ; ASCII value of the
>>>>>
>>>>>
>>>>>
>>>>>
>>>>Character
>>>>
>>>>
>>>>
>>>>
>>>>>to be displayed
>>>>> ; in 1-row & 1-column
>>>>> seg es ; Makes next instruction
>>>>>
>>>>>
>>>>>
>>>>>
>>>>execute
>>>>
>>>>
>>>>
>>>>
>>>>>wrt Extra Segment
>>>>> mov [1],#0x1f ; Attribute of the
>>>>>
>>>>>
>>Character
>>
>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>to
>>>>
>>>>
>>>>
>>>>
>>>>>be displayed
>>>>> ; in 1-row & 1-column
>>>>> ; 0x1f represents White
>>>>>Character on a Blue Background
>>>>>loop1:
>>>>> jmp loop1
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>________________________________________________________________________
>>
>>
>>>
>>>
>>>
>>>
>>>>>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
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>># boot.s
>>>>>
>>>>>
>>>>>
>>>>>
>>>>#
>>>># To assembly and link as a **boot** program:
>>>>#
>>>># as boot.s -o boot.o
>>>># ld -s -oformat binary -Ttext 0x0 -o boot
>>>>
>>>>
>>boot.o
>>
>>
>>>>#
>>>># To copy it to the boot sector of a floppy disk:
>>>>#
>>>># dd seek=0 if=boot of=/dev/fd0
>>>>#
>>>># ---
>>>># Emanuele (ealtieri@hampshire.edu)
>>>>
>>>> .code16
>>>> .global _start
>>>>_start:
>>>> movw $0xB800, %ax
>>>> movw %ax, %es
>>>> movb $0x41, %es:0
>>>> movb $0x1f, %es:1
>>>>loop1: jmp loop1
>>>>
>>>>
>>>>
>>>>
>>>>
>>________________________________________________________________________
>>
>>
>>>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
>>
>>
>>>
>>>
>>>
>>>
>>
>>-
>>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
>
>
>
next prev parent reply other threads:[~2002-07-31 11:31 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-07-30 11:59 newbie question on gnu 'as' Anticipating a Reply
2002-07-30 17:24 ` Bruno N. F. Pacheco
2002-07-30 21:34 ` Emanuele Altieri
2002-07-31 5:16 ` Anticipating a Reply
2002-07-31 7:55 ` newbie question on gnu 'as' => explaination about the why (for really newbie ;-)) Frederic Marmond
2002-07-31 10:09 ` Anticipating a Reply
2002-07-31 11:31 ` Frederic Marmond [this message]
[not found] <3D47BC4C.2050001@eprocess.fr>
2002-08-01 4:43 ` Anticipating a Reply
[not found] <1028179746.1936.35.camel@italia>
2002-08-01 12:09 ` Anticipating a Reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3D47CA94.3010106@eprocess.fr \
--to=fmarmond@eprocess.fr \
--cc=ealtieri@hampshire.edu \
--cc=linux-assembly@vger.kernel.org \
--cc=ruxyz@yahoo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).