MAIN START LAD GR1,ARG CALL ZOOM ;副プログラムの呼び出し RET ARG DC ORG,PUT ORG DC #1818,#1818,#DBDB,#FFFF PUT DS 16 END ZOOM START ;拡大 [c02.cas] RPUSH ;汎用レジスタの退避 LD GR4,1,GR1 ;PUTのアドレス ST GR4,LAST ;終了アドレス LD GR1,0,GR1 ;ORGのアドレス LAD GR6,0 ;1回目、2回目 TOP LD GR0,0,GR1 ;ORGの値の取り出し [ a ] CPA GR6,=1 ;1回目か? JZE RIGHT SRL GR0,8 ;8ビット右シフト RIGHT SLL GR0,8 ;8ビット左シフト LAD GR2,8 ;ループカウンタ LAD GR3,0 ;結果を保存する場所 B0 LAD GR5,0 ;加算する値 CPA GR0,=0 ;符号ビットが0か? [ b ] JZE B2 ;終了 JPL B1 ;符号ビットが0 LAD GR5,1 ;加算する値 B1 SLL GR3,1 ;左に論理シフト ADDA GR3,GR5 ;GR5を加算 SLL GR3,1 ;左に論理シフト ADDA GR3,GR5 ;GR5を加算 [ c ] SLL GR0,1 ;左に論理シフト SUBA GR2,=1 ;カウントダウン JPL B0 JUMP STORE B2 SLA GR2,1 ;2倍 SLL GR3,0,GR2 ;残りの2倍をシフト [ d ] STORE ST GR3,0,GR4 ;結果を保存 ST GR3,1,GR4 ;結果を保存 LAD GR4,2,GR4 ;次のアドレス XOR GR6,=1 ;ビットの反転 JPL TOP ;右8ビットの処理へ LAD GR1,1,GR1 ;次のデータ CPL GR1,LAST ;終了判定 JMI TOP RPOP ;汎用レジスタの復元 RET LAST DS 1 END