NASM - The Netwide Assembler

NASM Forum => Using NASM => Topic started by: nobody on February 22, 2009, 01:59:12 PM

Title: how to use 'lea' in NASM?
Post by: nobody on February 22, 2009, 01:59:12 PM
Hi!
when I use 'lea' in NASM
------------------------------
Some of my tests:

;file name:test.asm
[bits 16]
org 0100h
jmp main
[section .text]
main:
   lea ax,buf
   jmp $
[section .data]
buf db 'hello world$'
------------------------------
assemble: nasmw test.asm -o test.com

result is here:
test:7: error: invalid combination of opcode and operands

Could you help me?
Title: Re: how to use 'lea' in NASM?
Post by: nobody on February 22, 2009, 02:17:49 PM
I found i can use 'mov' inplace 'lea',am I right? Thank you!
Title: Re: how to use 'lea' in NASM?
Post by: Frank Kotler on February 22, 2009, 07:32:12 PM
Yeah, sorta...

http://home.myfairpoint.net/fbkotler/nasmdocc.html#section-A.4.135 (http://home.myfairpoint.net/fbkotler/nasmdocc.html#section-A.4.135)

You need "lea" (syntax: lea reg, [something]) for an address *calculation*. "lea eax, [buf]" says, "tell me the address of the variable whose address is buf." Kinda overkill. Masm users like it 'cause they don't have to write "offset" that way :) If you want the address of, say [ebp + 8] (sometimes you want contents, sometimes you want address), that's where "lea" comes in.

Since "lea" just does arithmetic - doesn't actually access any memory, you can use it for other calculations, too - must have the "form" of a valid effective address...

atoi:
    mov edx, [esp + 4]  ; pointer to string
    xor eax, eax        ; clear "result"
.top:
    movzx ecx, byte [edx]
    inc edx
    cmp ecx, byte '0'
    jb .done
    cmp ecx, byte '9'
    ja .done

; we have a valid character - multiply
    ; result-so-far by 10, subtract '0'
    ; from the character to convert it to
    ; a number, and add it to result.

lea eax, [eax + eax  *  4]
    lea eax, [eax * 2 + ecx  -  48]

jmp short .top
.done
    ret

Sort of a clever one a C compiler taught me...

Best,
Frank
Title: Re: how to use 'lea' in NASM?
Post by: nobody on February 24, 2009, 07:59:26 AM
thanks a lot