CSCI 250 Assembly Language

(a low-level programming language allowing software to interact with hardware)
MASM MASM help Using MASM Getting started GitHub Programmer’s guide
x86 Instruction reference MASM reference MASM Cheat Sheet Reserved Words
Others Intel x86 Visual Studio C/C++
General Information Discord EE/CS Wiki EITS Textbook Stack Overflow


Syllabus: Fall 2026   Credit hours: 3
Class times: 10:10am – 11:00am, MoWeFr Classroom: Harrington Hall 108
Class # (on-campus: 250-01): 36013 Class # (on-line: 250-02): 36014
Prerequisite: CSCI 160 Computer Science I

Instructor: Wen-Chen Hu   (my teaching philosophy) Office: Upson II 366K
Office hours: 12:30pm – 02:00pm, MoWeFr ✉ Email: wenchen@cs.und.edu
: https://und.zoom.us/j/2489867333 UND Zoom sign in: https://und.zoom.us

TA: Bruno Fonkeng Office: Harrington Hall 221
: https://und.zoom.us/j/4569996871 ✉ Email: bruno.fonkeng@und.edu
Office hours: 09:00am – 10:30am, TuTh ☎ Phone #: (701) 777-9355

Synchronous class delivery: The class lectures will be delivered synchronously via https://und.zoom.us/j/2489867333, and the Zoom video will be posted on the Blackboard afterwards. Students can watch the video clips anytime they want.

Textbook (recommended): Assembly Language for x86 Processors, 8th ed., Kip Irvine, Pearson, ISBN: 978-0135381656

Lecture notes: Other than the textbook, award-winning, interactive, complementary, and abridged lecture notes (based on the textbook and other online documents and user manuals) and detailed and precise class instructions will be provided. Collectively, the lecture notes and instructions are more like a small book, which supplies much more information than regular notes do and makes the subject studies much easier. Students will not have problem learning the subjects or taking the exams after studying them and doing the homeworks and programming exercises.



Grading:

Announcements:



Tentative Schedule:


Week

Class Topic Due Where
0    
  0.1 A computer career    
  0.2 Data research    
  0.3 Data technologies    
1 08/26
08/28
1. Introduction to CSCI 250  
  1.1 Course outline    
  1.2 Programming language generations    
  1.3 A language processing system    
2 08/31
09/02
09/04
2. Introducation to Assembly Languages  
  2.1 MASM    
  2.2 ARM    
  2.3 MIPS    
09/02  Last day to add a course or drop without record — 100% refund
 Last day to add audit or change to/from audit
 Last day to receive a refund on a dropped class
 Drops after the last day to add will appear on a transcript.
   
3 09/09
09/11
3. Programming Exercise I    
  3.1 Specifications    
  3.2 Construction steps    
  3.3 A sample program    
09/07
Holiday, Labor Day (Monday) — no classes
   
4 09/14
09/16
09/18
4. Computer Data Representation    
  4.1 Integers    
  4.2 Two’s complement notation    
  4.3 Character storage  
5 09/21
09/23
09/25
5. MASM Data Representation    
  5.1 Intrinsic data types    
  5.2 Defining data    
  5.3 Little endian order    
6 09/28
09/30
10/02
6. Data Transfers    
  6.1 Data transfer instructions    
  6.2 MOV instructions    
  6.3 Load and store instructions    
7 10/05
10/09
7. Arithmetic    
  7.1 Arithmetic instructions
  7.2 Arithmetic expressions    
  7.3 Status flags    
10/07
(no class)
Exam I (for both on-campus and on-line students; 6:30pm – 8:30pm, Wednesday)
   
8 10/12
10/14
10/16
8. Multiplication and Division    
  8.1 Multiplication    
  8.2 Division    
  8.3 Arithmetic expressions    
9 10/19
10/21
10/23
9. MASM Miscellaneous Instructions    
  9.1 Data-related operators EX I  
  9.2 Memory addressing    
  9.3 Other miscellaneous instructions    
10 10/28
10/30
10. The Link Library from Irvine    
  10.1 Input functions    
  10.2 Output functions    
  10.3 Other miscellaneous functions    
10/26
IEEE CARS 2026 Symposium (Monday) — no classes
   
11 11/02
11/04
11/06
11. Conditional Processing    
  11.1 Boolean instructions    
  11.2 AND instructions    
  11.3 NOT instructions    
12 11/09
11/13
12. Conditional Processing (Cont.)    
  12.1 LOOP instructions
  12.2 Decision directives    
  12.3 .WHILE directive    
11/13  Last day to change to or from S/U grading
 Last day to change to or from audit grading
 Last day to drop a full-term course or withdraw from school
   
11/11
Holiday, Veteran’s (Wednesday) — no classes
   
13 11/16
11/20
13. Procedures    
  13.1 The runtime stack    
  13.2 PUSH and POP instructions    
  13.3 Defining and using procedures    
11/18
(no class)
Exam II (for both on-campus and on-line students; 6:30pm – 8:30pm, Wednesday)
   
14 11/23 14. Advanced Procedures    
  14.1 Local variables    
  14.2 INVOKE directive    
  14.3 PROC directive    
11/25
11/26
11/27
Holiday, Thanksgiving Break (MoWeFr) — no classes
   
15 11/30
12/02
12/04
15. High-Level Language Interface    
  15.1 Inline assembly code EX II  
  15.2 Linking to C/C++
  15.3 Calling C/C++ functions    
16 12/07
12/09
16. Shift and Rotate Instructions    
  16.1 SAL/SHL instruction    
  16.2 SAR/SHR instruction  
  16.3 ROR instruction    
17 12/16
Final exam (for both on-campus and on-line students; 06:30pm – 08:30pm, Wednesday)
   
18 12/22 Grades posted before noon, Tuesday    

Instructor’s qualification: The instructor has been teaching assembly language for more than 20 years. In addition, he designed and implemented a POPLOG virtual machine for which both LISP and PROLOG compilers generate assembly code.

University of North Dakota Course Description (
CSCI 250) —
Introduction to machine language and assembly language programming. Concepts of assembly language and the machine representation of instructions and data of a modern digital computer are presented. Requires students to practice assembly language programming techniques on ARM and Intel x86 architectures.

Assembly Language from webopedia.com —
Assembly language is once removed from a computer’s machine language. Machine languages consist entirely of numbers and are almost impossible for humans to read and write. Assembly languages have the same structure and set of commands as machine languages, but they enable programmers to use names instead of numbers. Each type of CPU has its own machine language and assembly language, so an assembly language program written for one type of CPU will not run on another. In the early days of programming, all programs were written in assembly language. Now, most programs are written in a high-level language such as FORTRAN or C. Programmers still use assembly language when speed is essential or when they need to perform an operation that isn’t possible in a high-level language.

An Assemble-Link-Execute Cycle —


Computer Hardware —