do ループ (カウント付きループとも呼ばれます) は、ループの繰り返し回数があらかじめ計算できるときに使用します。do ループは、通常、指定した終了値に達する直前に終了します。
表 4-31にカウント付きループの実行制御用コマンドを示します。
表 4-31 do (カウント付き) ループコマンド
次の画面で、ループの使用方法をいくつか示します。
ok 10 5 do i . loop
5 6 7 8 9 a b c d e f
ok
ok 2000 1000 do i . i c@ . cr i c@ ff = if leave then 4 +loop
1000 23
1004 0
1008 fe
100c 0
1010 78
1014 ff
ok : scan (byte -- )
] 6000 5000
(5000 〜 6000 のメモリー領域を走査して指定のバイト値に
一致しないバイトを調べる)
] do dup i c@ <> (byte error? )
] if i . then (byte )
] loop
] drop (the original byte was still on the stack, discard it )
] ;
ok 55 scan
5005 5224 5f99
ok 6000 5000 do i i c! loop
(メモリー領域にステップパターンを埋め込む)
ok
ok 500 value testloc
ok : test16 (-- ) 1.0000 0 (do 0-ffff )
(指定位置に異なる 16 ビット値を書き込む)
] do i testloc w! testloc w@ i <> (error? ) (さらに位置をチェック)
] if ." Error - wrote " i . ." read " testloc w@ . cr
] leave (exit after first error found ) (この行は省略可能)
] then
] loop
] ;
ok test16
ok 6000 to testloc
ok test16
Error - wrote 200 read 300
ok
|
ok 10 5 do i . loop
5 6 7 8 9 a b c d e f
ok
ok 2000 1000 do i . i c@ . cr i c@ ff = if leave then 4 +loop
1000 23
1004 0
1008 fe
100c 0
1010 78
1014 ff
ok : scan (byte -- )
] 6000 5000
(5000 〜 6000 のメモリー領域を走査して指定のバイト値に
一致しないバイトを調べる)
] do dup i c@ <> (byte error? )
] if i . then (byte )
] loop
] drop (the original byte was still on the stack, discard it )
] ;
ok 55 scan
5005 5224 5f99
ok 6000 5000 do i i c! loop
(メモリー領域にステップパターンを埋め込む)
ok
ok 500 value testloc
ok : test16 (-- ) 1.0000 0 (do 0-ffff )
(指定位置に異なる 16 ビット値を書き込む)
] do i testloc w! testloc w@ i <> (error? ) (さらに位置をチェック)
] if ." Error - wrote " i . ." read " testloc w@ . cr
] leave (exit after first error found ) (この行は省略可能)
] then
] loop
] ;
ok test16
ok 6000 to testloc
ok test16
Error - wrote 200 read 300
ok
|