An easier way to learn an assembly language

2 undergraduate students

NYU Tandon undergraduates, Susanna Xu and Cindy Lee, have developed a new platform that allows students to easily run assembly code.

Although an assembly language is the most fundamental programming language available for any processor, learning one can still be a daunting prospect for aspiring computer scientists. Before the novice even gets started, they must install an “assembler,” a program that will convert the assembly syntax into executable machine code, and a “debugger,” which, as the name implies, ensures that the code is free of errors and glitches. 

That two-step process can be difficult, but now, two NYU Tandon undergraduates, Susanna Xu and Cindy Lee, have developed a new platform that allows students to run assembly code without mastering arcane tools. (The platform could prove to be exceptionally useful in courses on operating systems and other such topics, where the focus is not specifically on assembly languages —  and actually using an assembler could pose a distraction from the main class material.)

Featuring an intuitive graphical user interface and easy ways of saving and distributing the code, the Emu86 Jupyter Kernel Package, as their creation is called, is proving to be a valuable open-source educational tool. “We conducted the work under the supervision of Industry Associate Professor of Computer Science and Engineering Eugene Callahan, and we all believe very strongly that tools like this should remain open source so that everyone who wants can take advantage of them,” Xu and Lee assert. “Students can write assembly programs using the kernel and then save and distribute it as a Jupyter Notebook.” (For the totally uninitiated, a kernel here refers to a language module that adds a new language to the Jupyter Notebook world; the Jupyter Notebook is an open-source application that lets users create and share documents containing live code, equations, visualizations, and narrative text.) 

The kernel, as the pair explain, will output changes in memory and register the assembly program made. If there are errors in the code, the kernel will instead output the specific error and line number of the code that caused the error. 

Callahan points out that Xu and Lee, while modest about their efforts, have written the first-ever notebook support for assembly languages, which provide human-friendly substitutions for long strings of binary code and can be useful not only in educational settings but for any programmer needing to carry out an operation not possible in higher-level languages.

The Emu86 Jupyter Kernel Package consists of an Intel assembly language emulator kernel, and, eventually, it will implement other assembly languages as well. 

The Package has been uploaded to the Python Package Index (PyPI) and is available at

Installation and set-up instructions can be found at