一行一個指令很容易設計.一行多個指令就很難設計.
目前只寫出單顆(single node)的simulator/assembler/disassembler.有興趣者可以到以下網址下載參考:
http://tech.groups.yahoo.com/group/armForth/files
有structural style 的if ...then, begin...until...方式之反組譯.
範例如下: 可以用模擬器(simulator)跑喔!
( 0=40 40AB 2 0 15 C=3 ) main
-; \ AB
( 1=41 2318F 11 11 11 1C=7 ) T: 16* 2*
2* 2* .
( 2=42 220E7 11 0 1C 1C=7 ) T: 2*:
2* ; . .
( 3=43 100E7 8 0 1C 1C=7 ) T: -1
3FFFF # ; . .
( 4=44 3FFFF ----- # ----- )
( 5=45 6003 3 0 0 C=3 ) T: 1-
-1 \ 3
( 6=46 39407 1C 14 0 1C=7 ) T: +: .
+ ; .
( 7=47 6005 3 0 0 14=5 ) T: negate
1- \ 5
( 8=48 260E7 13 0 1C 1C=7 ) T: not: begin
not ; . .
( 9=49 6007 3 0 0 1C=7 ) T: -
negate \ 7
( A=4A 280E7 14 0 1C 1C=7 )
+ ; . .
( B=4B 10309 8 3 1 4=1 ) T: '0~f'->0~f 30
# - \ 9
( C=4C 30 ----- # ----- )
( D=4D E00F 7 0 1 1C=7 ) -if
( F ) \ F
( E=4E 1CE7 0 1C 1C 1C=7 ) T:
nop: ; . . .
( F=4F 10309 8 3 1 4=1 ) then A #
- \ 9
( 10=50 A ----- # ----- )
( 11=51 E014 7 0 2 10=4 ) -if
( 14 ) \ 14
( 12=52 11CA0 8 1C 14 0=0 ) T: 0a+ A
# . + ;
( 13=53 A ----- # ----- )
( 14=54 10309 8 3 1 4=1 ) then 7 #
- \ 9
( 15=55 7 ----- # ----- )
( 16=56 E018 7 0 3 0=0 ) -if
( 18 ) \ 18
( 17=57 1CE7 0 1C 1C
1C=7 ) ; . . .
( 18=58 10309 8 3 1 4=1 ) then 6 #
- \ 9
( 19=59 6 ----- # ----- )
( 1A=5A E008 7 0 1 0=0 ) -until
( not: ) \ 8
( 1B=5B 11CA0 8 1C 14 0=0 ) T: 10+ 10
# . + ;
( 1C=5C 10 ----- # ----- )
( 1D=5D 2E0E7 17 0 1C 1C=7 ) T: emit
drop ; . .
( 1E=5E 100E7 8 0 1C 1C=7 ) T: key 1B
# ; . .
( 1F=5F 1B ----- # ----- )
( 20=60 353AF 1A 13 15 1C=7 ) T: or
over not and .
( 21=61 2C0E7 16 0 1C 1C=7 ) T: xor:
xor ; . .
( 22=62 318B7 18 18 16 1C=7 ) T: entr.numbr dup
dup xor .
( 23=63 601E 3 0 3 18=6 ) T: entr.numbr+n
key \ 1E
( 24=64 308B7 18 8 16 1C=7 ) dup
D # xor .
( 25=65 D ----- # ----- )
( 26=66 C02D 6 0 5 14=5 ) if
( 2drop ) \ 2D
( 27=67 2E30B 17 3 1 C=3 )
drop '0~f'->0~f \ B
( 28=68 E02A 7 0 5 8=2 ) -if
( 2A ) \ 2A
( 29=69 2E223 17 2 4 C=3 )
drop entr.numbr+n -; \ 23
( 2A=6A 3A301 1D 3 0 4=1 ) then >r
16* \ 1
( 2B=6B 33CA7 19 1C 14 1C=7 )
r> . + .
( 2C=6C 4023 2 0 4 C=3 )
entr.numbr+n -; \ 23
( 2D=6D 2F707 17 17 0 1C=7 ) T: 2drop then
drop drop ; .
( 2E=6E 3A0E7 1D 0 1C 1C=7 ) T: goto
>r ; . .
( 2F=6F 25297 12 12 12 1C=7 ) T: 16/ 2/
2/ 2/ .
( 30=70 240E7 12 0 1C 1C=7 ) T: 2/:
2/ ; . .
( 31=71 11CA7 8 1C 14 1C=7 ) T: .n'
3FFF6 # . + .
( 32=72 3FFF6 ----- # ----- )
( 33=73 E036 7 0 6 18=6 ) -if
( 36 ) \ 36
( 34=74 11CA7 8 1C 14 1C=7 )
3FFF9 # . + .
( 35=75 3FFF9 ----- # ----- )
( 36=76 11CA7 8 1C 14 1C=7 ) then 41
# . + .
( 37=77 41 ----- # ----- )
( 38=78 401D 2 0 3 14=5 ) emit
-; \ 1D
( 39=79 0 0 0 0
0=0 ) ; ; ; ;
( 3A=7A 0 0 0 0
0=0 ) ; ; ; ;
( 3B=7B 0 0 0 0
0=0 ) ; ; ; ;
( 3C=7C 0 0 0 0
0=0 ) ; ; ; ;
( 3D=7D 0 0 0 0
0=0 ) ; ; ; ;
( 3E=7E 0 0 0 0
0=0 ) ; ; ; ;
( 3F=7F 0 0 0 0
0=0 ) ; ; ; ;
( 80=C0 1031D 8 3 3 14=5 ) T: cr D #
emit \ 1D
( 81=C1 D ----- # ----- )
( 82=C2 1021D 8 2 3 14=5 ) A #
emit -; \ 1D
( 83=C3 A ----- # ----- )
( 84=C4 1CE7 0 1C 1C 1C=7 ) T:
command.table ; . . .
( 85=C5 2A0E7 15 0 1C 1C=7 ) T: and:
and ; . .
( 86=C6 1CE7 0 1C 1C
1C=7 ) ; . . .
( 87=C7 1CE7 0 1C 1C
1C=7 ) ; . . .
( 88=C8 300E7 18 0 1C 1C=7 ) T: dup:
dup ; . .
( 89=C9 4022 2 0 4 8=2 )
entr.numbr -; \ 22
( 8A=CA 360E7 1B 0 1C 1C=7 ) T: a@:
a> ; . .
( 8B=CB 402E 2 0 5 18=6 ) goto
-; \ 2E
( 8C=CC 140E7 A 0 1C 1C=7 ) T: @b: (b)
> ; . .
( 8D=CD 160E7 B 0 1C 1C=7 ) T: @a: (a)
> ; . .
( 8E=CE 120E7 9 0 1C 1C=7 ) T: @a+: (a+)
> ; . .
( 8F=CF 1A0E7 D 0 1C 1C=7 ) T: !a+: >(a
+) ; . .
( 90=D0 1E0E7 F 0 1C 1C=7 ) T: !a: >
(a) ; . .
( 91=D1 1CE7 0 1C 1C 1C=7 )
T: .T ; . . .
( 92=D2 3E0E7 1F 0 1C 1C=7 ) T: a!:
>a ; . .
( 93=D3 308AF 18 8 15 1C=7 ) T: .5n dup
F # and .
( 94=D4 F ----- # ----- )
( 95=D5 3A32F 1D 3 5 1C=7 ) >r
16/ \ 2F
( 96=D6 308AF 18 8 15 1C=7 ) dup
F # and .
( 97=D7 F ----- # ----- )
( 98=D8 3A32F 1D 3 5 1C=7 ) >r
16/ \ 2F
( 99=D9 308AF 18 8 15 1C=7 ) dup
F # and .
( 9A=DA F ----- # ----- )
( 9B=DB 3A32F 1D 3 5 1C=7 ) >r
16/ \ 2F
( 9C=DC 308AF 18 8 15 1C=7 ) dup
F # and .
( 9D=DD F ----- # ----- )
( 9E=DE 3A32F 1D 3 5 1C=7 ) >r
16/ \ 2F
( 9F=DF 6031 3 0 6
4=1 ) .n' \ 31
( A0=E0 32331 19 3 6 4=1 )
r> .n' \ 31
( A1=E1 32331 19 3 6 4=1 )
r> .n' \ 31
( A2=E2 32331 19 3 6 4=1 )
r> .n' \ 31
( A3=E3 32231 19 2 6 4=1 )
r> .n' -; \ 31
( A4=E4 3EF07 1F F 0 1C=7 ) T: !! >a >
(a) ; .
( A5=E5 6080 3 0 10 0=0 ) T: get+xcute.cmd
cr \ 80
( A6=E6 601E 3 0 3 18=6 ) T: get+xcute.cxd
key \ 1E
( A7=E7 11547 8 15 8 1C=7 ) F #
and 84 # .
( A8=E8 F ----- # ----- )
( A9=E9 84 ----- # ----- )
( AA=EA 29D07 14 1D 0 1C=7 ) +
>r ; .
( AB=EB 60A5 3 0 14 14=5 ) T: main get
+xcute.cmd \ A5
( AC=EC 40AB 2 0 15 C=3 ) main
-; \ AB
( AD=ED 10842 8 8 8 8=2 ) T: yy 55
# 44 # 33 # 22 #
( AE=EE 55 ----- # ----- )
( AF=EF 44 ----- # ----- )
( B0=F0 33 ----- # ----- )
( B1=F1 22 ----- # ----- )
( B2=F2 100E7 8 0 1C 1C=7 ) 11
# ; . .
( B3=F3 11 ----- # ----- )
( B4=F4 0 0 0 0
0=0 ) ; ; ; ;
( B5=F5 0 0 0 0
0=0 ) ; ; ; ;
( B6=F6 0 0 0 0
0=0 ) ; ; ; ;
( B7=F7 0 0 0 0
0=0 ) ; ; ; ;
( B8=F8 0 0 0 0
0=0 ) ; ; ; ;
( B9=F9 0 0 0 0
0=0 ) ; ; ; ;
( BA=FA 0 0 0 0
0=0 ) ; ; ; ;
( BB=FB 0 0 0 0
0=0 ) ; ; ; ;
( BC=FC 0 0 0 0
0=0 ) ; ; ; ;
( BD=FD 0 0 0 0
0=0 ) ; ; ; ;
( BE=FE 0 0 0 0
0=0 ) ; ; ; ;
( BF=FF 0 0 0 0
0=0 ) ; ; ; ;
On 10月22日, 下午9時41分, "H.C. Chen" <
hcchen5...@gmail.com> wrote:
> 我了解 forth 用久了的行家一出手都是畢生功力,一天不到完成這個不知道什麼東西的 assembler / disassembler 不難相信。但是
> 「任何人只要花一天的時間不到即可完成」就很驚人。密切注意 . . . .
>
> 2008/10/22 holi <
holin...@yahoo.com.tw>
>
>
>
> > 40 顆 forth cpu 的 SEA-Forth chip 出來了,個人最近正在研究中,日昨寫出了它的assembler/
> > disassembler 超簡單的, 任何人只要花一天的時間不到即可完成, 但要先嘹解其硬體構造才能.
> > 我想forth同好是否有人願意購買發展kit來深入使用.但可能不容易取得,個人公司他们可能不會理你.不知有何方法可以達成購買.- 隱藏被引用文字 -
>
> - 顯示被引用文字 -