- ベストアンサー
CASLIIの問題が分かりません。
資格の勉強のためCASLIIの参考書を買い問題を解いてるのですが分からないので質問します。 4桁の16進文字列を入力し、それを数値に変換してメモリ上に格納するプログラム。 SAMPL16 START LD GR1,0BUF LD GR0,=1000 CALL REVESUB OUT OBUF,LEN LET OBUF DS 4 LEN DC 1 ANS DS 1 END REVESUB START PUSH 0,GR1 PUSH 0,GR2 PUSH 0,GR3 PUSH 0,GR4 LAD GR0,0 LAD GR2,0 LOOP SLL GR0,4 ;ここまでの結果を4ビット左シフト LD GR3,0,GR1 ;1文字取り出し CPL GR3,='A' JMI NEXT ADDL GR3,=9 NEXT AND GR3,C000F ADDL GR0,GR3 LAD GR1,1,GR1 LAD GR2,1,GR2 CPL GR2,=4 JMI LOOP POP GR4 POP GR3 POP GR2 POP GR1 RET C000F DC #000F END SLL GR0,4 で4ビットシフトする意味がわかりません。あとLD GR3,0,GR1で1文字だけ取り出せるのですか?取り出すのは下位からですか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#2>GR0は0だから4ビットシフトしても意味ないかと思ったのですが…。 最初はそうですが、ループしてきてまた使いますよね。(コメントの通り…;ここまでの結果を4ビット左シフト) #2>文字が入ってるのはGR1ですよね? GR1 に入っているのは文字列が格納されているアドレス(IBUF)です。 >LD GR3,0,GR1 ;1文字取り出し でも文字列格納領域アドレスとして使われています。 LD命令の指標(インデックス)レジスタ使用時の動作についてもう一度ご確認ください。
その他の回答 (3)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#3>GR1+1とかすることで次の文字を見ていくんですよね。 そうです。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>4ビットシフトする意味 16進数1文字を数値に換算したら次の文字を処理するために桁上げしないといけません。 >取り出すのは下位からですか? 左シフトするということは(入力文字の)上位からですね。 >1文字だけ取り出せるのですか? IN命令を使って取り込んだ文字は1ワードに1文字ですから1文字とりだすことになります。
補足
メインのプログラム間違えてました。 SAMPL16 START IN IBUF,LEN LAD GR1,IBUF CALL REVESUB ST GR0 ANS RET IBUF DS 4 LEN DS 1 ANS DS 1 END GR0は0だから4ビットシフトしても意味ないかと思ったのですが…。文字が入ってるのはGR1ですよね?
- bnosuke
- ベストアンサー率21% (4/19)
勉強と言うことで、答えをズバリでなく、ヒントを示します。 1)SLL GR0,4 で4ビットシフトする意味がわかりません。 16進数一桁が4ビットだからです。 16進数の目で見れば、左に一桁ずらすことになりますよね? 2)LD GR3,0,GR1で1文字だけ取り出せるのですか? 取り出せます。 LD GR1,0BUF LD GR3,0,GR1 で、0BUFに入っている文字を1文字取り出せます。 3)取り出すのは下位からですか? 2)と関連します。 LAD GR1,1,GR1 は何をしているのか?を考えましょう。
補足
ん~よく分かりません(>_<) INBUF=GR1で4文字入ってるんですよね。4×4で16ビットで、最初に左に一桁ずらしたら下位が0000になっていいんですか?それともはじきだした上位4ビットの一文字を取り出すってことですか?次がGR3にGR1と0を足した値が1文字出せたことになる?LAD GR1,1,GR1はカウンタ増やしてるんですよねー
補足
なんとなく分かってきました。 GR1には文字列が入っているアドレス4つのうち1つを示していて、GR1+1とかすることで次の文字を見ていくんですよね。