- ベストアンサー
CASL 2000÷127
失礼します 2000÷127の結果、GR1に95 GR2に15を算出したんですけど、 この後の、サブルーチンを使ってのOUTの仕方がわからないです・・・ ANSWER=15 AMARI=95 として出したいんですけど、わかる人いますか?^^;
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
GR1の内容を10進文字に変換するサブルーチンを開発すればいいでしょう。一度目の呼び出しはともかく、二度目のサブルーチンを呼び出す前にGR2の内容をGR1に移します。 10進文字変換の核心部分のみを説明します。 16ビットなので、その範囲は-32768~32767つまり符号を含めて6桁ぶんの格納領域を用意します。「DIGIT DS 6」記述でこの6桁ぶんが確保できます。ここへ次のように格納することを最終目標にして下さい。 ┌──┬──┬──┬──┬──┬──┐ DIGIT │*±│*△│*△│*△│*9│*5│ └──┴──┴──┴──┴──┴──┘ 上記の一マスは16ビットを表し、△は空白文字です。±は負なら"-",正なら"△"文字を置くものとします。*は不定文字です。 この状態でDIGIT番地を指定してOUT命令を発行すると、*文字部分は無視される仕様だったと記憶しているので、この前提で説明します。 【処理方法】 1)IX=5とします。 2)DIGITから始まる6語の領域を"*△"で埋めます。 3)GR1が負のとき、DIGIT番地に"*-"文字を置きます。同時に GR1の符号を逆転させて正数に直します。GR1が正のときはこ の処理をパスしてください。 4)GR1を10で除した余りを求めます。それに16進数30Hを加えた ものをDIGIT+(IX)番地に格納します。 この時点で商がGR1に残るようにしてください。 5)商が0になっていれば処理8)へ。 6)IX=IX-1を計算します。 7)処理4)から繰り返します。 8)必要なら符号と数字文字の間にある△文字を詰めます。 9)RETURNします。 あとは解ると思います。 "ANSWER="に続けて、DIGIT番地から6文字出力すればいいでしょう。 この回答で自信が持てない部分があり、処理6)の部分でIX=IX-2とするのが正しいかどうかはご自身で調べてください。
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
;GR0に入力された数字を出力する PUTNUM START PUSH 0,GR1 PUSH 0,GR2 PUSH 0,GR3 PUSH 0,GR4 LD GR1,GR0 LD GR2,BASE LAD GR3,DISPNUM LAD GR4,LEN CALL DEC2STR OUT DISPNUM,LEN POP GR4 POP GR3 POP GR2 POP GR1 RET DISPNUM DS 5 ;表示に使う領域たかだか5桁(65535) LEN DS 1 ;表示に使う文字の長さ BASE DC 10 ;表示に使う基数 END ;GR0 は破壊される ;GR1 変換する数 ;GR2 基数 ;GR3 文字列アドレス ;GR4 文字数アドレス ;数字を基数で示されたn進数の文字列に変換する DEC2STR START PUSH 0,GR5 アドレスポインタ PUSH 0,GR1 PUSH 0,GR2 ST GR1,N ST GR3,STR ST GR4,STRLEN LAD GR5,0 TEST CPL GR1,GR2 ;数>=基数 JMI EXIT LOOP CALL DIV ;GR3=GR1/GR2,GR4=GR1%GR2 LD GR0,TABLE,GR4 c=TABLE[GR4] LD GR4,STR ADDL GR4,GR5 ST GR0,0,GR4 STR[GR5]=c ADDL GR5,ONE ST GR3,N NEXT LD GR1,N JUMP TEST EXIT LD GR4,N LD GR0,TABLE,GR4 LD GR4,STR ADDL GR4,GR5 ST GR0,0,GR4 ADDL GR5,ONE LD GR4,STRLEN ST GR5,0,GR4 [STRLEN] に文字数をセット LD GR1,STR LD GR2,STRLEN CALL REVERSE POP GR2 POP GR1 POP GR5 RET TABLE DC '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' ONE DC 1 N DS 1 STR DS 1 STRLEN DS 1 END
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
10進数に変換してそのそれぞれの桁を文字コードに変換する
補足
それはわかってるんですけど、その方法がわからなくて^^;