X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=as%2Fcasl2lib%2Fsample%2Fcall_mull.casl;fp=as%2Fcasl2lib%2Fsample%2Fcall_mull.casl;h=6085ce16a59c98e26da651f23a9870c0cf3ceef9;hp=0000000000000000000000000000000000000000;hb=0b153de269505fe25552d3f1ee2a21dc049239c3;hpb=ae04e48ee62a95f6f77794d5611db189a19e70de diff --git a/as/casl2lib/sample/call_mull.casl b/as/casl2lib/sample/call_mull.casl new file mode 100644 index 0000000..6085ce1 --- /dev/null +++ b/as/casl2lib/sample/call_mull.casl @@ -0,0 +1,45 @@ +MAIN START + LAD GR4,0 ; Xのインデックス +LOOPX CPA GR4,XCNT ; (GR4 = XCNT)の場合、ループ脱出 + JZE FIN ; ↓ + LD GR1,X,GR4 ; GR1に、(X+GR4)番地の値を転送 + LAD GR5,0 ; Yのインデックス +LOOPY CPA GR5,YCNT ; (GR5 = YCNT)の場合、ループ脱出 + JZE XNEXT ; ↓ + LD GR2,Y,GR5 ; GR2に、(X+GR5)番地の値を転送 + CALL OUTL ; GR1の数値を出力 + PUSH 0,GR1 ; GR2の数値を出力 + LD GR1,GR2 ; ↓ + CALL OUTL ; ↓ + POP GR1 ; ↓ + CALL MULL ; GR0 <- GR1 * GR2 + JOV WOV ; オーバーフローの場合は、WOVへジャンプ + PUSH 0,GR1 ; GR0の数値を出力 + LD GR1,GR0 ; ↓ + CALL OUTL ; ↓ + POP GR1 ; ↓ +YNEXT OUT SEP,SLEN ; 区切り線を出力 + LAD GR5,1,GR5 ; GR5 <- GR5 + 1 + JUMP LOOPY ; LOOPYへジャンプ +WOV OUT YOMSG,YLEN ; オーバーフローした場合のメッセージを表示 + PUSH 0,GR1 ; GR0の数値を出力 + LD GR1,GR0 ; ↓ + CALL OUTL ; ↓ + POP GR1 ; ↓ + PUSH 0,GR1 ; GR3の数値を出力 + LD GR1,GR3 ; ↓ + CALL OUTL ; ↓ + POP GR3 ; ↓ + JUMP YNEXT ; YNEXTへジャンプ +XNEXT LAD GR4,1,GR4 ; GR4 <- GR4 + 1 + JUMP LOOPX ; LOOPXへジャンプ +FIN RET +X DC 0,1,2,127,128,255,256,257,32767,#8000,#FFFF +Y DC 0,1,2,127,128,255,256,257,32767,#8000,#FFFF +XCNT DC 11 +YCNT DC 11 +SEP DC '--------------------' +SLEN DC 20 +YOMSG DC 'overflow' +YLEN DC 8 + END