Em ISPS, as descrições são divididas em várias seções
da forma:
** Seção 1 **
descrição
** Seção 2 **
descrição
O nosso exemplo do minicomputador simples fica então:
mini:=
Begin
** Memory.State **
Mp\Primary.Memory[0:255]<0:11>
** Processor.State **
Acc\Accumulator<0:11>,
PC\Program.Counter<0:7>,
Interrupt.Enable<>,
Interrupt.Request<>
** Instruction.Format **
IR\Instruction.Register<0:11>,
Op\Operation.Code<0:2>:=IR<0:2>,
Ibit\Indirect.Bit<>:=IR<3>,
Adr\Address<0:7>:=IR<4:11>
** Effective.Address.Calculation **
Z\Effective.Address<0:7>:=
Begin
Decode Ibit =>
Begin
0:= Z<-Adr,
1:= Z<-Mp[Adr]
End
End
** Instruction.Interpretation **
IExec\Instruction.Execution:=
Begin
Decode Op =>
Begin
0\AND:= Acc <- Acc And Mp[Z()],
1\TAD:= Acc <- Acc + Mp[Z()], !Two's complement add
2\ISZ:= !Increment and skip if zero
Begin
Mp[Z] <- Mp[Z()] + 1 Next
If Mp[Z] Eql 0 => PC <- PC+1
End,
3\DCA:= Mp[Z()]@Acc <- Acc@#0000, !Deposit and clear Acc
4\HLT:= Stop(), !Halt
5\JMP:= PC <- Z(), !Jump
6\IOF:= Interrupt.Enable <- 0, !Interrupt OFF
7\ION:= !Interrupt ON
Begin
Interrupt.Enable <- 1 Next
Restart ICycle
End
End
End
ICycle\Interpretation.Cycle:=
Begin
Repeat
Begin
IR <- Mp[PC] Next
PC <- PC + 1 Next
IExec() Next
If Interrupt.Enable And Interrupt.Request =>
Begin
Mp[0] <- PC Next
PC <- 1
End
End
End
End