74 lines
2.7 KiB
Plaintext
74 lines
2.7 KiB
Plaintext
expression:
|
|
opcode,op1,rel,op2
|
|
opcode,op1,rel,op2,OR,opcode,op1,rel,op2
|
|
opcode,op1,rel,op2,AND,opcode,op1,rel,op2
|
|
opcode::=C,CH,CR,CLC,CLI,CLCL, LTR, CP,CE,CD,...
|
|
rel::=EQ,NE,LT,LE,GT,GE, (fortran style)
|
|
E,L,H,NE,NL,NH (assembler style)
|
|
P (plus), M (minus) ,Z (zero) ,O (overflow)
|
|
opcode::=CLM,TM
|
|
rel::=O (ones),M (mixed) ,Z (zeros)
|
|
|
|
* IF
|
|
IF expression [THEN]
|
|
...
|
|
ELSEIF expression [THEN]
|
|
...
|
|
ELSE
|
|
...
|
|
ENDIF
|
|
|
|
IF C,R4,EQ,=F'10' THEN if r4=10 then
|
|
MVI PG,C'A' pg='A'
|
|
ELSEIF C,R4,EQ,=F'11' THEN elseif r4=11 then
|
|
MVI PG,C'B' pg='B'
|
|
ELSEIF C,R4,EQ,=F'12' THEN elseif r4=12 then
|
|
MVI PG,C'C' pg='C'
|
|
ELSE else
|
|
MV PG,C'?' pg='?'
|
|
ENDIF end if
|
|
|
|
* SELECT
|
|
SELECT expressionpart1
|
|
WHEN expressionpart2a
|
|
...
|
|
WHEN expressionpart2b
|
|
...
|
|
OTHRWISE
|
|
...
|
|
ENDSEL
|
|
|
|
* example SELECT type 1
|
|
SELECT CLI,HEXAFLAG,EQ select hexaflag=
|
|
WHEN X'20' when x'20'
|
|
MVI PG,C'<' pg='<'
|
|
WHEN X'21' when x'21'
|
|
MVI PG,C'!' pg='!'
|
|
WHEN X'22' when x'21'
|
|
MVI PG,C'>' pg='>'
|
|
OTHRWISE otherwise
|
|
MVI PG,C'?' pg='?'
|
|
ENDSEL end select
|
|
|
|
* example SELECT type 2
|
|
SELECT select
|
|
WHEN C,DELTA,LT,0 when delta<0
|
|
MVC PG,=C'0 SOL' pg='0 SOL'
|
|
WHEN C,DELTA,EQ,0 when delta=0
|
|
MVC PG,=C'1 SOL'' pg='0 SOL'
|
|
WHEN C,DELTA,GT,0 when delta>0
|
|
MVC PG,=C'2 SOL'' pg='0 SOL'
|
|
ENDSEL end select
|
|
|
|
* CASE
|
|
CASENTRY R4 select case r4
|
|
CASE 1 case 1
|
|
LA R5,1 r5=1
|
|
CASE 3 case 3
|
|
LA R5,2 r5=2
|
|
CASE 5 case 5
|
|
LA R5,3 r5=1
|
|
CASE 7 case 7
|
|
LA R5,4 r5=4
|
|
ENDCASE end select
|