The MASM Forum

Specialised Projects => Basic variants => FreeBASIC => Topic started by: Vortex on July 05, 2025, 04:48:07 AM

Title: Inline assembly and FreeBASIC
Post by: Vortex on July 05, 2025, 04:48:07 AM
Hello,

A quick example of using inline assembly with FreeBASIC :

Function LowerCase Naked (s As String) As ZString Ptr

     Asm

.data


lcase_table:

    .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .byte 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0
    .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

.text

    mov     rdx,QWORD PTR [rcx]
    mov     r10,OFFSET lcase_table
    sub     rdx,1

_loop:

    add     rdx,1
    movzx   rax,BYTE PTR [rdx]
    movzx   r8,BYTE PTR [r10+rax]
    shl     r8,5
    add     BYTE PTR [rdx],r8b
    jnz     _loop
    mov     rax,QWORD PTR [rcx]
    ret
      
    End Asm
   
End Function


Dim As String t="THIS is a TEST."

Print *Lowercase(t)