RosettaCodeData/Task/Conditional-structures/360-Assembly/conditional-structures-2.360

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