CESIL, or Computer Education in Schools Instruction Language, [1] is a programming language designed to introduce pupils in British secondary schools to elementary computer programming. It is a simple language containing a total of fourteen instructions.
Computer Education in Schools (CES) was a project that commenced in 1968 under the stewardship of the John Hoskyns Group. [2] The project was taken over by International Computers Limited (ICL) in September 1969 to become ICL-CES. [2] CESIL was developed by ICL as part of the ICL-CES project, and introduced in 1974. [3] In those days, very few if any schools had computers, so pupils would write programs on coding sheets, which would then be transferred to punched cards or paper tape. [4] Typically, this would be sent to run on a mainframe computer, with the output from a line printer being returned later. [5]
Because CESIL was not designed as an interactive language, there is no facility to input data in real time. Instead, numeric data is included as a separate section at the end of the program. [6]
The fundamental principle of CESIL is the use of a single accumulator, which handles mathematical operations. [4] Numeric values are stored in variables, which in CESIL are referred to as store locations. [7] CESIL only works with integers, and results from DIVIDE operations are rounded if necessary. [8] There is no facility for data structures such as arrays, nor for string handling, though string constants can be output by means of the PRINT instruction. [4]
Jumps and loops can be conditional or non-conditional, and transfer operation of the program to a line with a specific label, which is identified in the first column of a coding sheet. [9] The instruction or operation is stated in the second column, and the operand in the third column. [10] On some coding sheets, comments and the text of the PRINT instruction would be written in a fourth column. [11]
Instructions, or operations, are written in upper case and may have a single operand, which can be a store location, constant integer value or line label. Store locations and line labels are alphanumeric, up to six characters, and begin with a letter. [12] Numeric integer constants must be signed + or −, with zero being denoted as +0. [13] [a]
IN
– reads the next value from the data, and stores it in the accumulator.
[4] The error message *** PROGRAM REQUIRES MORE DATA ***
is printed if the program tries to read beyond the end of the data provided.
[14]OUT
– prints the current value of the accumulator. No carriage return is printed.
[15]PRINT "text in quotes"
– prints the given text. No carriage return is printed.
[15]LINE
– prints a carriage return, thus starting a new line.
[16]LOAD location
or LOAD constant
– copies the value of the given location or constant to the accumulator.
[17]STORE location
– copies the contents of the accumulator to the given location.
[10]ADD location
or ADD constant
– adds the value of the given location or constant to the accumulator.
[18]SUBTRACT location
or SUBTRACT constant
– subtracts the value of the given location or constant from the accumulator.
[19]MULTIPLY location
or MULTIPLY constant
– multiplies the accumulator by the value of the given location or constant.
[20]DIVIDE location
or DIVIDE constant
– divides the accumulator by the value of the given location or constant.
[21] The result is rounded down if the result is positive, and up if the result is negative.
[8] A *** DIVISION BY ZERO ***
error message is printed if the divisor is zero.
[22]In each case, the result of the operation is stored in the accumulator, replacing the previous value.
JUMP label
– unconditionally transfers control to location labelled.
[23]JINEG label
(Jump If NEGative) – transfers control to location labelled if the accumulator contains a negative value.
[24]JIZERO label
(Jump If ZERO) – transfers control to location labelled if the accumulator contains zero.
[9]HALT
– terminates the program.
[15]Three special symbols are used in CESIL at the beginnings of lines.
%
is used to mark the end of the program and the start of data.
[11]*
is used to mark the end of the data.
[25](
is used at the start of a line to indicate a
comment.
[26]
[b]An emulator for CESIL, designed to run on Windows and called Visual CESIL, is available as freeware. [27]
An interpreter for CESIL, designed to run on the Android platform and called Wyrm CESIL, is available as free to install. [28]
The following totals the integers in the runtime data section until it encounters a negative value and prints the total.
LOAD +0 LOOP STORE TOTAL IN JINEG DONE ADD TOTAL JUMP LOOP DONE PRINT "The total is: " LOAD TOTAL OUT LINE HALT % 1 2 3 -1 *
The output of the above program would be:
The total is: 6
Monsoon, Colin C; Sewell, Ian R; Frances P, Vickers (1978). Computer Studies. Vol. Book 1. ICL Computer Education in Schools. ISBN 0-903885-17-4.
CESIL, or Computer Education in Schools Instruction Language, [1] is a programming language designed to introduce pupils in British secondary schools to elementary computer programming. It is a simple language containing a total of fourteen instructions.
Computer Education in Schools (CES) was a project that commenced in 1968 under the stewardship of the John Hoskyns Group. [2] The project was taken over by International Computers Limited (ICL) in September 1969 to become ICL-CES. [2] CESIL was developed by ICL as part of the ICL-CES project, and introduced in 1974. [3] In those days, very few if any schools had computers, so pupils would write programs on coding sheets, which would then be transferred to punched cards or paper tape. [4] Typically, this would be sent to run on a mainframe computer, with the output from a line printer being returned later. [5]
Because CESIL was not designed as an interactive language, there is no facility to input data in real time. Instead, numeric data is included as a separate section at the end of the program. [6]
The fundamental principle of CESIL is the use of a single accumulator, which handles mathematical operations. [4] Numeric values are stored in variables, which in CESIL are referred to as store locations. [7] CESIL only works with integers, and results from DIVIDE operations are rounded if necessary. [8] There is no facility for data structures such as arrays, nor for string handling, though string constants can be output by means of the PRINT instruction. [4]
Jumps and loops can be conditional or non-conditional, and transfer operation of the program to a line with a specific label, which is identified in the first column of a coding sheet. [9] The instruction or operation is stated in the second column, and the operand in the third column. [10] On some coding sheets, comments and the text of the PRINT instruction would be written in a fourth column. [11]
Instructions, or operations, are written in upper case and may have a single operand, which can be a store location, constant integer value or line label. Store locations and line labels are alphanumeric, up to six characters, and begin with a letter. [12] Numeric integer constants must be signed + or −, with zero being denoted as +0. [13] [a]
IN
– reads the next value from the data, and stores it in the accumulator.
[4] The error message *** PROGRAM REQUIRES MORE DATA ***
is printed if the program tries to read beyond the end of the data provided.
[14]OUT
– prints the current value of the accumulator. No carriage return is printed.
[15]PRINT "text in quotes"
– prints the given text. No carriage return is printed.
[15]LINE
– prints a carriage return, thus starting a new line.
[16]LOAD location
or LOAD constant
– copies the value of the given location or constant to the accumulator.
[17]STORE location
– copies the contents of the accumulator to the given location.
[10]ADD location
or ADD constant
– adds the value of the given location or constant to the accumulator.
[18]SUBTRACT location
or SUBTRACT constant
– subtracts the value of the given location or constant from the accumulator.
[19]MULTIPLY location
or MULTIPLY constant
– multiplies the accumulator by the value of the given location or constant.
[20]DIVIDE location
or DIVIDE constant
– divides the accumulator by the value of the given location or constant.
[21] The result is rounded down if the result is positive, and up if the result is negative.
[8] A *** DIVISION BY ZERO ***
error message is printed if the divisor is zero.
[22]In each case, the result of the operation is stored in the accumulator, replacing the previous value.
JUMP label
– unconditionally transfers control to location labelled.
[23]JINEG label
(Jump If NEGative) – transfers control to location labelled if the accumulator contains a negative value.
[24]JIZERO label
(Jump If ZERO) – transfers control to location labelled if the accumulator contains zero.
[9]HALT
– terminates the program.
[15]Three special symbols are used in CESIL at the beginnings of lines.
%
is used to mark the end of the program and the start of data.
[11]*
is used to mark the end of the data.
[25](
is used at the start of a line to indicate a
comment.
[26]
[b]An emulator for CESIL, designed to run on Windows and called Visual CESIL, is available as freeware. [27]
An interpreter for CESIL, designed to run on the Android platform and called Wyrm CESIL, is available as free to install. [28]
The following totals the integers in the runtime data section until it encounters a negative value and prints the total.
LOAD +0 LOOP STORE TOTAL IN JINEG DONE ADD TOTAL JUMP LOOP DONE PRINT "The total is: " LOAD TOTAL OUT LINE HALT % 1 2 3 -1 *
The output of the above program would be:
The total is: 6
Monsoon, Colin C; Sewell, Ian R; Frances P, Vickers (1978). Computer Studies. Vol. Book 1. ICL Computer Education in Schools. ISBN 0-903885-17-4.