質問: casliiの問題で、わからないものがあるので解き方と回答を教えていた casliiの問題で、わからないものがあるので解き方と回答を教えていただきたいです。 入力された整数を辺の長さ(文字数)とする正方形を、文字*で出力する。 例) **** * * * * **** ↑辺の長さが4のときの正方形です。 rep3 start in rec,len ld gr1,rec (a) gr1,msk st (b) lad gr1,-1,gr1 st gr1,pos out ln1,len loop lad (c) cpa gr1,=0 (d) fin cpa gr1,=1 jmi skip ld gr0,ln2 ld gr2,pos st (e) out ln2,len jump loop skip out ln1,len fin ret rec ds 256 len ds 1 pos ds 1 msk dc #000f ln1 dc (f) ln2 dc '* ' end (a)~(f)が答えの入る場所です。 答だけでもいいので、ご教示願います。
回答: もう少し精細な仕様が無いとコードから推測するしかないが、 入力する整数は最初の一文字分だけが有効で9までのサイズの正方形を表示するということでいい? 0が先頭文字なら何も出力しない。 投稿時の空白文字制限で空白が一文字になってしまっているが、 ラベルln2の文字定数は*の後に8個のスペースがあったと推測。 おおまかに動作を説明すると、 最初と最後の行はln1のデータをサイズ分まで表示し、 途中の行は右辺の*をln2の適切な位置に書き込んでからその位置まで表示する。 面倒なのでインデントのための空白やln2の内容はそのまま削られるに任せる。 穴埋め問題なので分からなくはないと思う。 rep3 start in rec,len ld gr1,rec and gr1,msk ; (a) st gr1,len ; (b) lad gr1,-1,gr1 st gr1,pos out ln1,len loop lad gr1,-1,gr1 ; (c) cpa gr1,=0 jmi fin ; (d) cpa gr1,=1 jmi skip ld gr0,ln2 ld gr2,pos st gr0,ln2,gr2 ; (e) out ln2,len jump loop skip out ln1,len fin ret rec ds 256 len ds 1 pos ds 1 msk dc #000f ln1 dc '*********' ; (f) ln2 dc '* ' end