Re: newbie

Frank Kotler <[email protected]>
Newsgroups org.kernel.vger.linux-assembly
Message-ID <[email protected]>
Niel A wrote:
> hello all!
> 
> i'm taking linux assembly as a hobby for christmas

... and for New Year you're doing micro-code? :)

> and i found your great site. the tutorials have been much helpful.
> 
> anyway, i meant to ask something.. 
> 
> section .data
> 	string: db "hi!",10
> 
> and i wanna capitalize the small letter 'h'.
> 
> at first i used
> 	mov di, string ; but di is 16 bits and ld complains

Right. As Fred explains, an address is 32 bits (or 64).

> so i eventually started using the 32 bit ones to do the capitalisation operation. but for some reason, i lose all other letters, including the linefeed.

Sounds like maybe you went too far. The address is 32 bits (or 64), but 
the characters of the string are only a byte (8 bits). If you tried to 
"uppercase" a whole 32 bits, you'd lose the whole thing, including the 
linefeed.

> please point me to the right direction.

Easy way:

sub byte [string], 32

maybe you'd write it as:

sub byte [string], 'a' - 'A'

to make it more "self-documenting". But a more flexible way, using some 
registers...

mov edi, string
mov al, [edi]
cmp al, 'a'  ; don't "uppercase" it unless
jb skip      ; it's lower case!
cmp al, 'z'
ja skip
sub al, 'a' - 'A'
mov [edi], al  ; store it back in "string"
skip:

...perhaps "inc edi", and loop back do do the next letter, or whatever...

inc edi
mov byte [edi], 'a'  ; change it to "Ha!"

Have fun.

> merry christmas,

Same to you and yours... and the rest of the list.

Best,
Frank
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.