4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

IPFactoryAdvent Calendar 2022

Day 10

CASLⅡでシーザー暗号

Last updated at Posted at 2022-12-10

おそばせながら、12月10目のアドベントカレンダーです。

はじめに

今回は学校で習ったCASLⅡを使ってシーザー暗号を解いてみたです。
CASLⅡを実行できる環境がなかったので『CASLシミュレーター』をお借りしました。
なんとなくでやってみようと考えて行動に起こした結果、地獄を見た回でした。

目次

  1. 大枠を考えた
  2. 副プログラム書いた
  3. 合わせてみた
  4. 汎用化?
  5. 感想

大枠を考えた

作ろうとは考えたのですが、何をしたらいいのか分からなかったので、
想像しているプログラムを絵にかいて考えました。それを文字にしたものが
下のようになります。

ループ{
    判定
    (大文字){文字ずらし}
    (小文字){文字ずらし}
    (その他){そのまま格納}
}
出力

大枠の作り方はあっているのでしょうか。。。
書いている当初はCASLⅡのことを理解していなかったので、このまま作業に
入ってしまいました。

副プログラム

分岐した後の文字をずらす作業を副プログラムでしたいと考えました。
そして完成したものがこちらです。

     
とても楽しい。これは大文字を三文字移動させるプログラムです。
この子を基に小文字を移動のプログラムを作成しました。ここまでは順調でした。

合わせてみた

試しに大文字だけ呼び出せるかやってみました。
      
うごかない、てかなにこれ?という状態になってしまいました。

出力画面から分かったこと

  • 必要以上の出力→副プログラムのOUTの消し忘れ
  • すべてD→副プログラムの最初のLAD消し忘れ

修正①

まだ変ですね。最後の文字が最初にも入ってしまています。よくコードを見てみると、副プログラムのSTが残ってました。

修正②

       

きたーーーーーーー!!!!!
副プログラムもちゃんと作動しました。

汎用化?

小文字の分の処理を増やして、それ以外の文字はずらさないように判定を付ければ、、、

RS	    START
    	IN	    BUF,LEN
        IN      NUM,LEN2
    	LAD 	GR1,BUF
    	LAD	    GR2,0
LOOP	LD      GR4,0,GR1
        CPA     GR4,=#0041
        JMI     NEXT
        CPA     GR4,=#005A
        JPL     NEXT
        CALL    SHO1
        JUMP    PUT
NEXT    CPA     GR4,=#0061
        JMI     POS
        CPA     GR4,=#007A
        JPL     POS
        CALL    SHO2
        JUMP    PUT
POS     LD      GR0,0,GR1
PUT	    ST	    GR0,GFT,GR2
    	LAD 	GR1,1,GR1
    	LAD 	GR2,1,GR2
    	CPA 	GR2,LEN
    	JMI 	LOOP
    	OUT 	GFT,LEN
FIN  	RET
SHO1	RPUSH
    	LD  	GR0,0,GR1
        LD      GR3,NUM
        SUBA    GR3,=#0030
        ADDA    GR0,GR3
        CPA     GR0,='Z'
        JMI     OK1
        JZE     OK1
        LD      GR3,=#001A
        SUBA    GR0,GR3
OK1     RPOP
    	RET
SHO2	RPUSH
        LD      GR0,0,GR1
        LD      GR3,NUM
        SUBA    GR3,=#0030
        ADDA    GR0,GR3
        CPA     GR0,='z'
        JMI     OK2
        JZE     OK2
        LD      GR3,=#001A
        SUBA    GR0,GR3
OK2     RPOP
    	RET
LEN	    DS  	1
LEN2    DS      1
NUM     DS      1
BUF 	DS  	256
GFT  	DS  	256
        END

完成ー!!!

感想

授業ではその場で解くだけでしたが、実際書いてみると本当に難しい言語でした。
また、どこの処理が間違っているのかを探すのがとても大変だと感じました。
かなり汚いプログラムが出来てしまったので、きれいなプログラムを書けるように
勉強したいです。

参考資料

アセンブリ言語 CASL2 入門

アドベントカレンダー

IPFactoryアドベントカレンダー
・12月10日 ゲーム制作を通してプログラミングを勉強しよう  HARUさん

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?