Kopa писал(а):
Форта для Симбиан ( на базе hForth ). через С/С++
на ASMе для ARM
Зачем там
Код:
$CODE 2,'W@',WAT,_SLINK
ldrh r1, [tos] ;get the word
mov tos, r1 ;bung back on the stack
$NEXT
У меня
Код:
CODE W@ ( a - w)
ldrh TOS, [TOS]
NEXT
ASMARM_END
Работает
Еще
Код:
CODE >
swp TOS,TOS,[DSTK]
CODL <
dpop r1
subs TOS,r1,TOS @ TOS = a-b -- msbit set if a is less than b
CODL 0<
mov TOS,TOS,asr #31 @ turn msbit into 0xffff or 0x0000
NEXT
ASMARM_END
CODE U>
swp TOS,TOS,[DSTK]
CODL U<
dpop r1
subs TOS,r1,TOS @ TOS = a-b -- carry set if a is less than b
sbc TOS,TOS,TOS
NEXT
ASMARM_END
CODE = ( a b - f)
dpop R1
eor TOS, R1 TOS
CODL 0=
subs TOS, TOS, #1
sbc TOS, TOS, TOS
NEXT
ASMARM_END
CODE 2R>
str TOS, [DSTK,#-4]! \ DUP
ldr TOS, [RSTK], #4
CODL R>SWAP
str TOS, [DSTK,#-4]! \ DUP
ldr TOS, [RSTK], #4
CODL SWAP
swp TOS, TOS, [DSTK]
NEXT
ASMARM_END
CODE OVER ( n1 n2 -- n1 n2 n1 )
str TOS, [DSTK,#-4]!
ldr TOS, [DSTK, #4]
NEXT
ASMARM_END
CODE ?DUP
tst TOS, TOS
strne TOS, [DSTK, #-4]! @ only if TOS is non-zero do we dup it
NEXT
ASMARM_END
CODE UM* ( u1 u2 - ud)
ldr r1, [DSTK]
umull r0, r3, TOS, r1 @ r3:r2 := TOS * r1
str r0, [DSTK] @ store ls32bits on stack
mov TOS, r3 @ TOS := ms32bits
NEXT
ASMARM_END
CODE M* ( n1 n2 - d) \ We probably want a 32x32-->64 signed multiply also
ldr r1, [DSTK]
smull r0, r3, TOS, r1 @ r3:r2 := TOS * r1
str r0, [DSTK] @ store ls32bits on stack
mov TOS, r3 @ TOS := ms32bits
NEXT
ASMARM_END