前提・実現したいこと
課題内容としまして、座席予約プログラムを作れというもので、16席を小さい数字の席から順に一席予約あるいは二席予約で行えというものです
この16席というのは0から15の番号が振られており、二席かけになっていてペアは0−1、2−3、4−5...となっています。なので二席予約では3−4や1−2で予約をすることはできなくなっています。
この席を私はGR2で全工程共通で、予約されている席の位置には1、予約されていない席の位置には0という形で表現しました。左から順に0、1、2としております。つまり、#8000なら0番目の席のみ予約されている、#C000なら0、1番目の席が予約されているということです
また出力は予約された席の番号です
発生している問題・エラーメッセージ
はじめに1人予約してから2人予約しようと思い出てくる表示の順に0->1->0->2を入力しました しかし次の入力はできずエラーコードとして Illegal instruction DC at #fefc が表示され続きができない状態になっています 一つ一つ確認していったところどうやら最後の2を入力した後のRETでもとのルーチンであるREPORT4にRES2から戻らずNOPという命令が予期せず出されてしまいます 改善点を教えてください
ターミナルはこのようになっています
PR #0002 [ PUSH #0000, GR2 ]
SP #feff( -257) FR 001 ( 1)
GR0 #0000( 0) GR1 #0000( 0) GR2 #0000( 0) GR3 #0000( 0)
GR4 #0000( 0) GR5 #0000( 0) GR6 #0000( 0) GR7 #0000( 0)
comet> r
OUT> RESERVATION->0 CONFIRMATION->1
IN > 0
OUT> NUNBER OF PEOPLE?
IN > 1
OUT> 0
OUT> RESERVATION->0 CONFIRMATION->1
IN > 0
OUT> NUNBER OF PEOPLE?
IN > 2
OUT> 2
OUT> 3
Illegal instruction DC at #fefc.
joukiso $
該当のソースコード
CASL2
1REPORT4 START 2NEXT OUT BUFF, LEN ;予約状況をGR2に永久保存 3 IN BUFF1, LEN1 4 LD GR1, BUFF1 5 AND GR1, =#000F 6 CPL GR1, =0 7 JZE CALLRES 8 LD GR1, =0 9 CALL CONFIR 10 JUMP FIN 11CALLRES OUT BUFF2, LEN2 12 IN BUFF3, LEN3 13 LD GR1, BUFF3 14 AND GR1, =#000F 15 CPL GR1, =1 16 JZE CALRES1 17 LD GR1, =0 18 CALL RES2 19 JUMP FIN 20CALRES1 LD GR1, =0 21 CALL RES1 22FIN JUMP NEXT 23 RET 24BUFF DC 'RESERVATION->0 CONFIRMATION->1' 25LEN DC 30 26BUFF1 DS 256 27LEN1 DS 1 28BUFF2 DC 'NUNBER OF PEOPLE?' 29LEN2 DC 17 30BUFF3 DS 1 31LEN3 DS 1 32 33 34RES1 START 35 LD GR1, =0 ;GR1にループ数 GR3で計算 36 LD GR3, GR2 37 CPA GR2, =#FFFF 38 JZE NOK 39 XOR GR3, =#FFFF 40LOOP SLL GR3, 1 ;LOOPで空きの位置を把握 41 JOV EMPTY 42 ADDA GR1, =1 43 JUMP LOOP 44EMPTY LD GR4, =15 45 SUBA GR4, GR1 46 LD GR5, =1 47LOOP2 SLL GR5, 1 48 SUBA GR4, =1 49 CPA GR4, =0 50 JNZ LOOP2 51 OR GR2, GR5 52 OR GR1, =#0030 53 ST GR1, BUFF5 54 OUT BUFF5, LEN5 55 LD GR1, =0 56 LD GR3, =0 57 LD GR4, =0 58 LD GR5, =0 59 JUMP FIN1 60NOK OUT BUFF4, LEN4 61FIN1 RET 62BUFF4 DC 'MANSEKI' 63LEN4 DC 7 64BUFF5 DS 1 65LEN5 DC 1 66 67 68RES2 START 69 LD GR3, GR2 70 LD GR4, =0 ;ループ数はGR4 71 XOR GR3, =#FFFF 72 LD GR1, =#C000 73LOOP3 PUSH 0, GR3 74 AND GR3, GR1 75 CPL GR1, GR3 76 JZE EXIT 77 CPL GR4, =7 78 JZE NOK1 79 SRL GR1, 2 80 ADDA GR4, =1 81 POP GR3 82 JUMP LOOP3 83EXIT OR GR2, GR1 ;GR1はカウント変数 84 LD GR1, =1 85 SLL GR4, 1 86 PUSH 0, GR4 87 OR GR4, =#0030 88 ST GR4, BUFF7 89 POP GR4 90 ADDA GR4, =1 91 OR GR4, =#0030 92 ST GR4, BUFF8 93 OUT BUFF7, LEN7 94 OUT BUFF8,LEN8 95 LD GR1, =0 96 LD GR3, =0 97 LD GR4, =0 98 LD GR5, =0 99 JUMP FIN2 100NOK1 OUT BUFF6, LEN6 101FIN2 RET 102BUFF6 DC 'MANSEKI' 103LEN6 DC 7 104BUFF7 DS 256 105LEN7 DC 1 106BUFF8 DS 256 107LEN8 DC 1 108 109 110CONFIR START 111 LD GR1, =0 112 LD GR3, GR2 113 LD GR4, GR2 114LOOP4 SUBA GR3, =1 115 AND GR4, GR3 116 ADDA GR1, =1 117 CPL GR4, =0 118 LD GR3, GR4 119 JZE EXIT3 120 JUMP LOOP4 121EXIT3 OR GR1, =#0030 122 LD GR1, BUFF9 123 OUT BUFF9, LEN9 124BUFF9 DS 256 125LEN9 DC 1 126 END

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/16 09:18
2020/01/16 09:43