Re: amd64 missing addressing modes
anthony <[email protected]> Wed, 26 Aug 2020 16:34:22 +0100
| Newsgroups | gmane.comp.lang.forth.gforth |
|---|---|
| Message-ID | <[email protected]> |
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.