[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]

    {
     JP> How do you get the length of a string using assembler? I've tried
     JP> this, but it doesn't work. I was told the first two bytes hold the
     JP> string length. Is this correct?
    }

    function len(s : string) : byte; assembler;
    asm
      les di,s
      mov al,es:byte ptr [di]
    end;

    or this:

    function len(s : string) : byte; assembler;
    asm
      push ds
      lds si,s
      mov al,byte ptr [si]
      pop ds
    end;

    {PETER LOUWEN,Re: Assembler to get leng}

    FUNCTION Len1(CONST Str: STRING): byte; ASSEMBLER;
    ASM push ds
        lds si, Str   { -- DS:SI now holds @Str. }
        lodsb         { -- AL := (DS:SI)^.       }
        pop ds
    END;

    FUNCTION Len2(CONST Str: STRING): byte; ASSEMBLER;
    ASM les di, Str         { -- ES:DI now holds @Str. }
        mov al, es:[di]     { -- AL := (ES:DI)^.       }
    END;

    The second method is slightly faster on my machine.

[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]