+++ /dev/null
-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