HEX4 START ;16進数 [b15.cas]
IN HEX,LEN ;16進数の入力
LAD GR3,0 ;結果の格納場所
LD GR1,LEN
CPA GR1,=4 ;長さのチェック
JNZ ERROR
LOOP SUBA GR1,=1
JMI FIN
SRL GR3,4 ;右に4ビットシフト [ a ]
LD GR2,HEX,GR1 ;1文字取り出す
CPA GR2,='0' ;数字か?
JMI ERROR
CPA GR2,=':' ;数字か?
JMI NUM
CPA GR2,='A' ;'A'から'F'?
JMI ERROR
CPA GR2,='F' ;'A'から'F'?
JPL ERROR
SUBA GR2,='A' ; [ b ]
LAD GR2,10,GR2
N1 SLL GR2,12 ;12ビット左シフト
ADDA GR3,GR2 ;加算
JUMP LOOP
NUM SUBA GR2,='0' ;文字から数値へ [ c ]
JUMP N1
ERROR OUT ER,ERLEN ;エラーメッセージ
FIN ST GR3,N
RET
LEN DS 1
N DS 1
ER DC 'ERROR'
ERLEN DC 5
HEX DS 256
END