実現したいこと
CASLⅡについての質問です。
3つのサブルーチンを用いて、以下のことを実現したいです。
サブルーチンINPUT: キーボードからの入力を受け付け、入力された文字列を数値に変換。入力された数値は-32768〜32767の範囲にあるとする。
サブルーチンMULT: 2数の積を求める。オーバーフローは無視。
サブルーチンOUTPUT: MULTで求めた積を数値から文字列に変換し、出力。
発生している問題・分からないこと
サブルーチンINPUTとMULTは作成できたのですが、OUTPUTの作り方がわからず困っています。
数値を文字へ変換するためには、数値を10で割って各桁をバラバラにした後、各桁ごとに文字に変換していけば良いことはわかるのですが、どうやってコードに起こせば良いかわかりません。
また、INPUTについてなのですが、現時点では正の整数しか扱えません。負の整数も扱えるようにするためにはどうすれば良いかコードを教えて欲しいです。
該当のソースコード
CASLⅡ
1MAIN START 2NEXT LAD GR1, IN1 ; 入力結果を入れてもらう番地 3 CALL INPUT 4 LD GR1, IN1 5 JZE FIN ; 最初の入力が0なら終了 6 LAD GR1, IN2 ; 入力結果を入れてもらう番地 7 CALL INPUT 8 LD GR1, IN1 9 LD GR2, IN2 10 LAD GR3, PROD 11 CALL MULT 12 LD GR1, PROD 13 CALL OUTPUT 14 JUMP NEXT 15FIN RET 16IN1 DS 1 ;かけられる数 17IN2 DS 1 ;かける数 18PROD DS 1 ;積の答え 19 END 20 21;文字列を数値に変換 22INPUT START 23 OUT OBUF, OLEN 24 IN IBUF, ILEN ;入力を受け付け 25 LD GR0, =0 ;使用するGRを全て初期化 26 LD GR4, =0 27 LD GR5, =0 28 LD GR6, =0 29 LD GR7, =0 30 LD GR7, ILEN 31 SUBA GR7, =1 32CONVERT LD GR0, IBUF, GR4 ;GR0にアドレスIBUF+GR4の番地の内容をGR0にコピー 33 AND GR0, =#000F ;文字列を数値に変換 34 ADDA GR5, GR0 35 CPA GR4, GR7 ;最後の桁に到達したら 36 JZE LAST 37 LD GR6, GR5 ;GR5の値をGR6にコピー 38 SLL GR5, 3 ;文字を2倍 39 SLL GR6, 1;文字を8倍 40 ADDA GR5, GR6 ;足して10倍 41 LAD GR4, 1, GR4 ;添え字が1増える 42 JUMP CONVERT 43LAST ST GR5, 0, GR1 ;GR5に格納された数値をIN1/2に格納 44 RET 45OBUF DC 'TYPE A NUMBER' 46OLEN DC 15 47IBUF DS 6 48ILEN DS 1 49 END 50 51MULT START 52 LD GR4, =0 ;初期化、答えを入れる 53LOOP ADDA GR4, GR1 ;掛けられる数をGR4にロード 54 SUBA GR2, =1 ;かける数を1引く 55 CPA GR2, =0 56 JZE END 57 JUMP LOOP 58END ST GR4, 0, GR3 ;積の答えをPRODにロード 59 RET 60 END 61
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
Googleで「CASLⅡ 数値 文字 変換」と検索しましたが、めぼしい記事が見つかりませんでした。
補足
特になし

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/01/17 10:15