gforth
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: amd64 missing addressing modes


From: anthony
Subject: Re: amd64 missing addressing modes
Date: Wed, 26 Aug 2020 16:34:22 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0

Dear Bernd Paysan,

On 26/08/2020 14:42, Bernd Paysan wrote:
Am Mittwoch, 26. August 2020, 15:35:45 CEST schrieb anthony:
I try to use amd64 assembly with addressing mode base with displacement,
scaled index and scaled index with displacement gforth i.e.

mov (%rdx,%rcx,1),%rax
mov (%rdx,%rcx,4),%rax
mov 40(%rdx,%rcx,4),%rax

I installed gforth from git version 0.7.9_20200820 on linux opensuse
15.1 64 bit.
I included this code to test:

ABI-CODE A  ( -- )
      500  #  AX  MOV    \ AX := 500
      DX  AX  MOV    \ AX := DX
       200  AX  MOV    \ AX := (200)
       DX  )  AX  MOV    \ AX := (DX)
       40  DX  D)  AX  MOV    \ AX := (DX + 40)
\  DX  CX  I)  AX MOV    \ AX := (DX + CX)
\  DX  CX  *4  I)  AX  MOV    \ AX := (DX + CX * 4)    *1/2/4/8
\  40  DX  CX  *4  DI)  AX  MOV    \ AX := (DX + CX * 4 + 40)

      DI  AX  MOV
      RET
END-CODE

Compiling any of the now commented three lines results in an "invalid
memory address" error.
Maybe I am using an invalid syntax? Thought this was the correct syntax
after reading asm.fs

Every help is very much appreciated.
Anthony
This here works:

abi-code test  ok 1
ax cx *4 i) dx mov  ok 1
3 ax cx *8 di) dx mov  ok 1
ret   ok 1
end-code
see test
ABI-Code test
7F38B25582B0:   mov     rdx,[rax][rcx*4]
7F38B25582B4:   mov     rdx,$03[rax][rcx*8]
7F38B25582B9:   ret
end-code

Your example doesn't work, though.  Looks like some storage is not cleaned
after finishing with one instruction.  Your syntax is ok.

Thanks, your approach to test it in design time is great! and the assurance there is no syntax error. This brings me miles ahead.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]