gforth
[Top][All Lists]
Advanced

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

Re: amd64 missing addressing modes


From: Bernd Paysan
Subject: Re: amd64 missing addressing modes
Date: Wed, 26 Aug 2020 15:42:52 +0200

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.

-- 
Bernd Paysan
"If you want it done right, you have to do it yourself"
net2o id: kQusJzA;7*?t=uy@X}1GWr!+0qqp_Cn176t4(dQ*
https://net2o.de/

Attachment: signature.asc
Description: This is a digitally signed message part.


reply via email to

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