#はじめに
引き続きCASL2をやっていきます。今回は分岐条件と比較演算をやります。
#casl2について
casl2は文字コードJIS 0201です。16進数で表しています
\ | #30 | #40 | #50 | #60 | #70 |
---|---|---|---|---|---|
#0 | 0 | / | P | / | p |
#1 | 1 | A | Q | a | q |
#2 | 2 | B | R | b | r |
#3 | 3 | C | S | c | s |
#4 | 4 | D | T | d | t |
#5 | 5 | E | U | e | u |
#6 | 6 | F | V | f | v |
#7 | 7 | G | W | g | w |
#8 | 8 | H | X | h | x |
#9 | 9 | I | Y | i | y |
#A | / | J | Z | j | z |
#B | / | K | / | k | / |
#C | / | L | / | l | / |
#D | / | M | / | m | / |
#E | / | N | / | n | / |
#F | / | O | / | o | / |
#コード1(JUMP命令、JPL命令,JZE命令、JMI命令)
RANCH START
LD GR0, DATA ; OF=0,SF=0,ZF=1
JZE LOOP1 ; LOOP1に飛ぶ
JP1 LD GR0, DATA2 ; OF=0,SF=0,ZF=0
JPL LOOP2 ; LOOP2に飛ぶ
JP2 LD GR0, DATA3 ; OF=0,SF=1,ZF=0
JMI LOOP3 ; LOOP3に飛ぶ
LOOP1 JUMP JP1 ; 無条件でJP1に飛ぶ
LOOP2 JUMP JP2 ; 無条件でJP2に飛ぶ
LOOP3 JUMP EXIT ; 無条件でEXITに飛ぶ
DATA DC 0
DATA2 DC 1
DATA3 DC #8000 ; 最上位ビットが1
EXIT RET
END
##JUMP命令、JPL命令,JZE命令、JMI命令
JUMP命令は無条件でオペランドで指定したラベルの行に飛びます。
JPL命令はSF=0のとき、オペランドで指定したラベルの行に飛びます。(JPL = Jump on PLus)
JZE命令JはZF=1のとき、オペランドで指定したラベルの行に飛びます。(JZE = Jump on ZEro)
JMI命令JはSF=1のとき、オペランドで指定したラベルの行に飛びます。(JMI = Jump on MInus)
#JOV命令,JNZ命令
JOV命令はOF=1のとき、オペランドで指定したラベルの行に飛びます。(Jump on OVerflow)
JNZ命令はZF=0のとき、オペランドで指定したラベルの行に飛びます。(Jump on Not Zero)
##比較命令(CPA命令,CPL命令)
CPA命令はオペランドで指定した値の比較をします。比較といっても実際には
(レジスタの中身)-(指定したアドレスの中身)を行い、符号の結果をフラグレジスタに格納しています。
CPL命令もCPA命令と同じような動作をしますが、減算は論理演算であることに注意しましょう
#分岐・比較を用いたコード
RA2SA START
IN IBUF, LEN ; Input String
LD GR0, IBUF ; GR0 <- IBUF
CPA GR0, BOUND ; 小文字か大文字かを判定
JPL S2L ; 小文字ならS2L(Small to Large)
JMI L2S ; 大文字ならL2S(Large to Small)
; 変換後の値を出力する
RSTART ST GR0, OBUF ; GR0 -> OBUF
OUT OBUF, LEN ; Output String
RET
; 小文字から大文字に変換 * only character
S2L SUBA GR0, CHANGE
JUMP RSTART
; 大文字から小文字に変換 * only character
L2S ADDA GR0, CHANGE
JUMP RSTART
; define Constants and keeping memory
IBUF DS 1
OBUF DS 1
LEN DC 1
CHANGE DC 32
BOUND DC 95
NOTCHAR DC 65
ECODE DC 97
END
; 大文字を小文字に変換し、小文字を大文字に変換するプログラム(*文字コードJIS 0208でのみ出力可)
上のコードでは小文字であれば大文字に、大文字であれば小文字に変換します。
大文字と小文字の差は32であるのでそれを利用しています。
#終わりに
分岐条件では見にくくなりやすいので、コメントや条件をうまくやることが大切です。