I am thinking about writing a simple lab practicum for students of informatics (computer programming course) for assembly programming language.
The problem I am having is to identify the best architecture, mainly due to the large number of different instruction sets, address handling, program flow etc.
I have identified three possible solutions and I would like to read about other people’s experiences in this matter.
* The first solution would be to use simpler microcontrollers as the platform because of their simple architecture and reduced instruction set. Also, because it is simple to make them interact with surrounding peripheral devices attached. I believe that this freedom of playing with real physical devices would be interesting and motivating to students. On the other hand, I am afraid that this approach would teach them that computers are programmed to make other devices move around, switch on-off, communicate simple commands etc. whilst on the other hand, sometimes, programming is all about manipulating data, taking inputs and creating outputs, and most of the time, doing it all in memory (compression algorithms, encryption, decryption etc.).
* The second solution would be to go straight to real PC architectures, but not to AMD Phenom or Intel i7 processor instruction set assembler languages, but instead to older Intel chips from the 80x series. This way they could learn the real way x86 architecture works and how it had evolved into what it is now. For this solution, I am afraid that it might teach them outdated ways of coding, stack handling and that it would not give them an opportunity to learn about parallelism, optimizing code for piping etc.
* The third solution would be to design new computer architecture. Of course, to create an emulator that would execute programs written using a whole new instruction set, designed solely for that new computer architecture. This architecture would have a RISC instruction set CPU, a simple limited memory, interrupts, virtual hard drives and other types of permanent memory, input and output devices (all simulated by means of interfacing with physical peripherals of the host machine) etc. By designing a new architecture, I could combine bits from microcontrollers, such as the possibility to directly control virtual devices (step motors, lights and other devices) connected to different kinds or general input output ports, UART etc. while I could also keep all the good things of PC architectures, such as more complex memory handling, parallelism. I could introduce virtualization, etc. The reason I am unsure is because this looks like a very big project and am unsure if it would be an overkill to do something like this, although it is not too complicated, it would only take up too much time.
So there were my three ideas for solving the dilemma (`trilemma`) regarding the question on choosing the best architecture to begin teaching beginner students in programming assembly by preparing a course practicum.
I would like to hear ideas of others and would be grateful for any suggestion from those with experience in this or similar topics.