Цитата Сообщение от vinxru Посмотреть сообщение
У меня есть идея, добавить в ассемблер конструкции

if(R0>R4) {
..do {
..} while(--R4>0)
}
Обычный макроассемблер RT-11 ( MACRO-11 ) позволяет модифицировать синтаксические конструкции при помощи макросов.

Вот пример реализации конструкций IF, CASE и других:
Код:
.MACRO MACSP L,I
.IF B,I
	.MCALL IF,IFB,IFC,ELSE,FI,CALL,PROC,BEGIN,END
	.MCALL LOOP,LOOPB,EXLOOP,REPEAT,CASE
	.MCALL $20,$22,$90,$91,$92,$93,$94
	$10=0
	.IIF NB,L,$10=1
	$11=1000
.ENDC
$0=20
$1=1
$2=0
$3=0
$4=0
$8=0
$9=1
$12=77777
.ENDM
.MACRO IF S,Q,D,T
$20 ,<S>,<Q>,<D>
IFC <Q>,<T>
.ENDM
.MACRO IFB S,Q,D,T       
$20 B,<S>,<Q>,<D>
IFC <Q>,<T>
.ENDM
.MACRO $20  V,S,Q,D
.IF DIF,<Q>,<IN>
        .IF DIF,<Q>,<NI>
		.IF IDN,<D>,<#0>
                	$93 <TST'V S>
		.IFF
			$93 <CMP'V S,D>
		.ENDC
		.MEXIT
	.ENDC
.ENDC
$93 <BIT'V S,D>
.ENDM
.MACRO IFC Q,T
.IF IDN,<T>,<THEN>
	.IIF NE,$4,.ERROR ;U
	.IIF EQ,$2,$92 $2
	$90 $2*2,4,\$0
	$22 F,<Q>,\$2
	$2=0
	.IIF NE,$3,$94 \$3,$:
	$3=0
	.MEXIT		 		                	       
.ENDC
.IF B,T
	.IIF EQ,$4,.ERROR ;U
	$4=0
	$22 ,<Q>,\$3
	$3=0
	.IIF NE,$2,$94 \$2,$:
	$2=0
	.MEXIT
.ENDC
.IF IDN <T>,<AND>
	.IIF EQ,$2,$92 $2
	$22 F,<Q>,\$2
	.MEXIT
.ENDC
.IF IDN,<T>,<OR>
	.IIF EQ,$3,$92 $3
	$22 ,<Q>,\$3
	.MEXIT
.ENDC
.ERROR ;U
.ENDM
.MACRO $22 F,Q,L
$6=0
.IIF IDN,<Q>,<SLT>,$6=BLT
.IIF IDN,<Q>,<SLE>,$6=BLE
.IIF IDN,<Q>,<SGE>,$6=BGE
.IIF IDN,<Q>,<SGT>,$6=BGT
.IIF IDN,<Q>,<ULT>,$6=BLO
.IIF IDN,<Q>,<ULE>,$6=BLOS
.IIF IDN,<Q>,<UGE>,$6=BHIS
.IIF IDN,<Q>,<UGT>,$6=BHI
.IIF IDN,<Q>,<IN>,$6=BNE
.IIF IDN,<Q>,<NI>,$6=BEQ
.IIF EQ,$6,$6=B'Q
.IIF NE,$6&74377,.ERROR ;U
$6=$6/400&377
.IIF NB,F,$6=$6!1-<$6&1>
$93 BR,L
$94 .=.-1
$93 <.BYTE $6>
.ENDM
.MACRO ELSE
$91 $6,4,\$0-1
.IIF NE,$6&1,.ERROR ;N
$93 BR,\$1
$90 $1*2+1,4,\$0
$92
$94 \$6/2,$:
.ENDM
.MACRO FI
$91 $6,4,\$0-1
$94 \$6/2,$:
.ENDM
.MACRO CALL L
$93 <JSR %7,L>
.ENDM
.MACRO PROC L,S,B,C,T
;IF 'T' BLANK - FOR PDP-11, IF 'T' LSI - FOR LSI-11 
$6=0
.IF NB,L
	.IIF NE,$0-20,.ERROR ;N
	MACSP ,I
	$6=4
	$90 7,0,\$0
	$94 L:
.ENDC
$5=-1
.IRP R,<S>
	.NTYPE $5,R
	.IIF GT,$5-5,.ERROR ;T
	$6=$6+4
	$90 $5,0,\$0
	$93 <MOV R,-(%6)>
.ENDR
.IF NB,B
	.IIF LT,$5,.ERROR ;P
	.IIF LE,B,.ERROR ;V
	$7=B+1/2*2
	.IIF GT,$7-7776,.ERROR ;V
        $93 <SUB #$7,%6>
	$93\10600+$5
	$90 $7,0,\$0
	$6=$6+2
.ENDC
.IF NB,C
	.IIF DIF,<C>,<CRITICAL>,.ERROR ;U
	$6=$6+1
	.IF B,T
	$93 <MOV @#-2,-(%6)>
	$93 <MOV #340,@#-2>
	$13=0
	.IFF
		.IIF DIF,<T>,<LSI>,.ERROR ;U
	$93 <MFPS -(%6)>
	$93 <MTPS #340>
	$13=1
	.ENDC
.ENDC
$90 $6,1,\$0
$9=$9+1
.ENDM
.MACRO BEGIN S,B,C
PROC ,<S>,<B>,<C>
.ENDM
.MACRO END
$9=$9-1
$91 $6,1,\$0-1
;.IIF NE,$6&1,$93 <MOV (%6)+,@#-2>
.IF NE,$6&1
.IF EQ,$13
	$93 <MOV (%6)+,@#-2>
.IFF
	$93 <MTPS (%6)+>
.ENDC
.ENDC
.IF NE,$6&2
	$91 $7,0,\$0-1
	$93 <ADD #$7,%6>
.ENDC
.REPT $6/4
	$91 $5,0,\$0-1
	$93 \12600+$5
.ENDR
.ENDM
.MACRO LOOP S
$90 $8,0,\$0
$8=0
$90 $9,0,\$0
$9=0
$5=0
.IF NB,S
	.NTYPE $5,S
	.IF EQ,$5-26
		$93 <TST @%6>
	.IFF
		.IIF NE,$5-47,$93 <MOV S,-(%6)>
	.ENDC
	.IF EQ,$5-27
		$94 <$94 $5=,^>,S,#
		.IIF EQ,$5,.ERROR ;Z
	.IFF
		$92 $8
		$93 BEQ,\$8
	.ENDC
	$5=1
.ENDC
$90 $1*2+$5,2,\$0
$94 \$1,$:
$92
.ENDM
.MACRO LOOPB S
.NTYPE $5,S
.IF EQ,$5&7-6
	.IIF NE,$5-26,$93 <MOVB S,-(%6)>
	$93 <BIC #177400,@%6>
.IFF
	$93 <CLR -(%6)>
	$93 <MOVB S,@%6>
.ENDC
LOOP -(%7)
.ENDM
.MACRO EXLOOP I,S,Q,D,T
.IIF NE,$9,.ERROR ;N
.IIF EQ,$8,$92 $8
.IF B,I
	$93 BR,\$8
.IFF
	$4=1
	$3=$8
	I S Q D T
.ENDC
.ENDM
.MACRO REPEAT
$91 $6,2,\$0-1
.IF NE,$6&1
	$93 <DEC @%6>
	$93 BNE,\$6/2
.IFF
	$93 BR,\$6/2
.IFTF
	.IIF NE,$8,$94 \$8,$:
.IFT
	$93 <TST (%6)+>
.ENDC
$91 $9,0,\$0-1
$91 $8,0,\$0-1
.ENDM
.MACRO CASE R,L,P
.MCALL $24,VALUE,CASEND
$24 <R>,<L>,<P>
.ENDM
.MACRO $24 R,L,P
.IIF LE,L,.ERROR ;V
.IIF GT,L-7777,.ERROR ;V
$93 <CMP R,#L>
$5=$11*2
.IF B,P
	.IF LE,L-172
		$93 <BHI L+6*2+.>
	.IFF
		$93 <BLOS .+6>
		$93 <JMP L+7*2+.>
	.ENDC
	$93 <ASL R>
	$93 <ADD %7,R>
	$93 <ADD 4(R),%7>
	$94 $,\$11,=.
	$94 $6=$,\$11+1,-.
	.REPT L+1
		$93 <.WORD $6>
	.ENDR
.IFF
	.IIF DIF,<P>,<PACKED>,.ERROR ;U
	.IF LE,L-357
		$93 <BHI L/2+11*2+.>
	.IFF
		$93 <BLOS .+6>
		$93 <JMP L/2+12*2+.>
	.ENDC
	$93 <ADD %7,R>
	$93 <MOVB 14(R),R>
	$93 <BIC #177400,R>
	$93 <ASL R>
	$93 <ADD R,%7>
	$94 $,\$11,=.
	$94 $6=$,\$11+1,-.
	.REPT L+1
		$93 <.BYTE $6/2>
	.ENDR
	.EVEN
	$5=$5+1
.ENDC
$94 $,\$11+1,=.
$90 <L>,0,\$0
$90 $5,3,\$0
$11=$11+3
.ENDM
.MACRO VALUE L
$91 $5,3,\$0-1
$94 $6=$,\$5/2+2
$93 <JMP $6>
.IF IDN,<L>,<>
	$0=$0+1
	$94 $,\$5/2+1,=.
.IFF
	$91 $7,0,\$0-1
	$0=$0+2
	$94 $6=.-$,\$5/2
	.IRP V,<L>
		.IF GE,V
			.IIF GT,V-$7,.ERROR ;R
			.IF EQ,$5&1
				$94 .=V*2+$,\$5/2
				$93 <.WORD $6>
			.IFF
				$94 .=V+$,\$5/2
				$93 <.BYTE $6/2>
			.ENDC
			$12=V
		.IFF
			.IIF GT,-<V>-$7,.ERROR ;R
			.IIF LE,-<V>-$12,.ERROR ;R
			.REPT -<V>-$12
				.IF EQ,$5&1
					$93 <.WORD $6>
				.IFF
					$93 <.BYTE $6/2>
				.ENDC
			.ENDR
			$12=77777
		.ENDC
	.ENDR
	$12=77777
	$94 .=$6+$,\$5/2
.ENDC
.ENDM
.MACRO CASEND
$91 $5,3,\$0-1
$94 $,\$5/2+2,=.
$0=$0-1
.ENDM		
.MACRO $90 V,T,X
$'X=V*10+T
$0=$0+1
.ENDM
.MACRO $91 V,T,X
$0=$0-1
.IIF LT,$0-20,.ERROR ;N
.IIF NE,$'X&7-T,.ERROR ;N
V=$'X/10
.ENDM
.MACRO $92 D
.IIF NB,D,D=$1
$1=$1+1
.ENDM
.MACRO $93 I,L
.IIF NE,$10,.LIST MEB
.IF B,L
						I
.IFF
						I L'$
.ENDC
.IIF NE,$10,.NLIST MEB
.ENDM
.MACRO $94 L,M,R
						.IIF NE,$10,.LIST ME
				L''M''R
.IIF NE,$10,.NLIST ME
.ENDM