How widespread is the use of the PEP/8 assembly simulator in education?

For teaching assembly language and computer architecture, are any other platforms besides PEP/8 used, and if so, what are they called and how widespread are they?

Or more generally, how is assembly language usually taught at the college level? I need more information than just my personal experience in one class.

I ask because I have created a similar but more powerful platform and need to comprehensively evaluate the existing systems for my research project.

I haven't been able to find an authoritative source about PEP/8 but this powerpoint describes it pretty well:

PEP/8 Overview

Basically it is a very simple virtual machine that teaches the basics of assembly programming.

I think that PEP/8 too simple and would support teaching with real architectures, as some of you have mentioned.

I have studied at several public schools in California and PEP/8 is used universally here.

• Welcome to Computer Science Educators! I hope we hear more from you in the future. Would you mind adding a link for PEP/8 for those who don't know what it is? – Ben I. Feb 13 '18 at 3:47
• What is PEP/8? We use little man computer. – ctrl-alt-delor Feb 13 '18 at 11:35
• FWIW, as an mentor for assembly language on codementor.io for the last 6 months, I see primarily MIPS MARS/QtSim and x86/x64. Otherwise I have seen a few using Atmel chips (for Arduino), and ARM, and once each of Manchester Baby, PIC, Motorola 6800, and PEP/9 but not 8. – Erik Eidt Feb 13 '18 at 15:29

At Colorado State University we teach the LC3 assembly language. A quick search for LC3 assembly language shows links to courses at multiple universities. Our course is normally taken by students in the second year and has three primary subject areas.

1. C language - students already have at least two semesters with Java, so the programs are more advanced, frequently including an assembler and/or simulator for the LC3.
2. Assembly language - students learn the assembly and write programs for 16 bit floating point math and learn how the run time stack is used in function calls (commonly in the context of a recursive function).
3. Hardware - students study hardware using Logisim. They commonly design some of the control for the LC3 machine.

In looking at other schools, I have found several that use subset of MIPS. I hope that helps

• Nice answer! (Better than mine, really.) Welcome to Computer Science Educators. Take a look around and post some answers; as a CS Instructor, I'm sure you'll have a lot to contribute here. And once you have 20 rep, feel free to come by The Classroom to introduce yourself :) – Ben I. Feb 13 '18 at 20:37

This is really only a half-answer, as I cannot speak to what is used generally. Perhaps someone else will be able to find a compiled report somewhere.

I can attest, however, that other systems are definitely used. We use 6502 assembly, for the reasons outlined here. (So you don't have to follow the link, one of the biggest reasons is that it was one of the last real-world assembly languages really designed for people instead of compilers, and utilizes a simple syntax and a straightforward architecture that allows our students to understand the inner workings without too much difficulty.)

• X86 assembly is not too bad either, it is (deliberately) very COBOL like. Your old 4004 calculator code will still run on an i9. – pojo-guy Feb 13 '18 at 21:23
• @pojo-guy: user-space x86 is fairly human-friendly, especially in 32 or 64-bit mode. (16-bit has less flexible addressing modes, so not all registers can be used for pointers, and segmentation is often actually used). But writing a kernel for x86 requires dealing with segmentation, or "meaningless" boilerplate to init segment registers if you don't understand it. x86 is human-friendly if you know it well, but it has a lot of quirks, especially privileged instructions. – Peter Cordes Feb 26 '18 at 3:02
• Also, no, en.wikipedia.org/wiki/Intel_4004 is a totally different architecture than 8086. It has sixteen 4-bit registers. Perhaps you meant you could run 8086 code on a modern x86? That's true, except that a 64-bit OS can't natively run in virtual-8086 (vm86) mode, so you need either a virtual machine, or to boot actual DOS, or a 32-bit kernel to run 16-bit code natively, or an emulator like DOSBOX. And most old 8086 code uses DOS or BIOS system calls which have to be emulated under modern OSes. Anyway, yes it's interesting that you could boot DOS on a modern PC. – Peter Cordes Feb 26 '18 at 3:07
• @pojo-guy: And BTW, stackoverflow gets a lot of questions about 16-bit x86 code, the bulk of which are from people taking courses that use emu8086. Most of us who follow the x86 and assembly tags thing this is a poor choice, because there are lots of quirks to the DOS int 0x21 and BIOS ABI, and so on. And that x86 without instructions like movzx or shift counts other than 1 and cl is harder. Segmentation is easy to learn if you already know asm, but it's just very confusing if you don't. Also, emu8086's built-in assembler kinda sucks, e.g. doesn't error on ambiguous operand-size. – Peter Cordes Feb 26 '18 at 3:13
• @PeterCordes Agreed - segmentation sucks, and the DOS legacy stuff definitely doesn't help. – pojo-guy Feb 26 '18 at 3:51