CESIL, or Computer Education in Schools Instruction Language, 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 developed in the late 1960s and early 1970s by International Computers Limited (ICL). CESIL was developed by ICL as part of the CES project, and introduced in 1974. 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. Typically, this would be sent to run on a mainframe computer, with the output from a line printer being returned later.
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.
The fundamental principle of CESIL is the use of a single accumulator, which handles mathematical operations. Numeric values are stored in variables, which in CESIL are referred to as store locations. CESIL only works with integers, and results from DIVIDE operations are rounded if necessary. There is no facility for structured data such as arrays, nor for string handling, though string constants can be output by means of the PRINT instruction.
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. The instruction or operation is stated in the second column, and the operand in the third column. On some coding sheets, comments and the text of the PRINT instruction would be written in a fourth column.
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. Numeric integer constants must be signed + or −, with zero being denoted as +0.[a]
Input and Output
IN– reads the next value from the data, and stores it in the accumulator. The error message
*** PROGRAM REQUIRES MORE DATA ***is printed if the program tries to read beyond the end of the data provided.
OUT– prints the current value of the accumulator. No carriage return is printed.
PRINT "text in quotes"– prints the given text. No carriage return is printed.
LINE– prints a carriage return, thus starting a new line.
LOAD constant– copies the value of the given location or constant to the accumulator.
STORE location– copies the contents of the accumulator to the given location.
ADD constant– adds the value of the given location or constant to the accumulator.
SUBTRACT constant– subtracts the value of the given location or constant from the accumulator.
MULTIPLY constant– multiplies the accumulator by the value of the given location or constant.
DIVIDE constant– divides the accumulator by the value of the given location or constant. The result is rounded down if the result is positive, and up if the result is negative. A
*** DIVISION BY ZERO ***error message is printed if the divisor is zero.
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.
JINEG label(Jump If NEGative) – transfers control to location labelled if the accumulator contains a negative value.
JIZERO label(Jump If ZERO) – transfers control to location labelled if the accumulator contains zero.
HALT– terminates the program.
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.
*is used to mark the end of the data.
(is used at the start of a line to indicate a comment.[b]
An emulator for CESIL, designed to run on Windows and called Visual CESIL, is available as freeware.
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
- Visual CESIL does not require non-negative constants to be signed.
- Not supported in Visual CESIL. * is used instead.
- Computer Studies, page 71
- "ICL–CES: Computer Education in Schools". Retrieved 16 June 2021.
- Furber, Steve (January 2012). "Appendix J: Timeline of major developments in Computing in schools in England". Shut down or restart? The way forward for computing in UK schools (PDF). The Royal Society. p. 120. Retrieved 20 June 2021.
- Computer Studies, page 72
- "My First Program". Retrieved 16 June 2021.
- Computer Studies, page 82
- Computer Studies, page 76
- Computer Studies, pages 93–94
- Computer Studies, page 148
- Computer Studies, page 77
- Computer Studies, page 74
- Computer Studies, pages 96, 148
- Computer Studies, pages 97–99
- Computer Studies, page 201
- Computer Studies, page 73
- Computer Studies, pages 199–200
- Computer Studies, pages 80, 97–98
- Computer Studies, pages 84, 97–98
- Computer Studies, pages 86, 97–98
- Computer Studies, pages 90, 97–98
- Computer Studies, pages 92, 97–98
- Computer Studies, page 145
- Computer Studies, page 198
- Computer Studies, page 154
- Computer Studies, page 83
- Computer Studies, page 164
- Andrew John Jacobs (20 June 2010). "Visual CESIL". Retrieved 19 June 2021.