do we need a separate assembly language programming ... - CiteSeerX

13 downloads 304363 Views 29KB Size Report
The authors have observed that over the last several years most of ... offer computer science degrees at the undergraduate level. Article IV-6 of the ... 1. Explain the basic organization of the classical von Neumann machine and its major.
DO WE NEED A SEPARATE ASSEMBLY LANGUAGE PROGRAMMING COURSE?* Krishna K. Agarwal, Ph.D. Department of Computer Science Louisiana State University in Shreveport Shreveport, LA 71115 318 795-4283 [email protected]

Achla Agarwal Division of Business and Computer Science Bossier Parish Community College Bossier City, LA 71111 318 746-9851 ext. 394 [email protected]

ABSTRACT Assembly language programming has been taught within the computer science curriculum as a separate course at most universities over the past several decades. Recent advances of the Internet has forced the introduction of several new courses in this arena leaving less time for traditional courses such as computer architecture and assembly language programming. We examine the changing role of assembly language in the present day computer science curriculum. INTRODUCTION Assembly language programming is being taught as a separate course in many universities in the world as part of a computer science curriculum for the last four decades. In the early days of computing it was taught because there were not many computer courses available to teach and it did provide a firm grasp of the computer architecture that was available at that time. Some other early topics in computer science education were Computer Architecture, Operating Systems, Compiler Design and Numerical Analysis. The authors have observed that over the last several years most of these courses have seen a decline in enrollment and have become elective courses in computing curricula at most universities. We examine the pros and cons whether

___________________________________________ *

Copyright © 2004 by the Consortium for Computing Sciences in Colleges. Permission to copy without fee all or part of this material is granted provided that the copies are not made or distributed for direct commercial advantage, the CCSC copyright notice and the title of the publication and its date appear, and notice is given that copying is by permission of the Consortium for Computing Sciences in Colleges. To copy otherwise, or to republish, requires a fee and/or specific permission. 246

CCSC: South Central Conference assembly language programming should remain a separate course or be de-emphasized and merged into other courses. The Computing Accreditation Commission (CAC) of the Accreditation Board for Engineering and Technology (ABET) accredits computer science departments which offer computer science degrees at the undergraduate level. Article IV-6 of the Criteria for Accrediting Computing Programs [2] states that "The core materials must provide basic coverage of algorithms, data structures, software design, concepts of programming languages, and computer organization and architecture." There is no mention of assembly language programming in this or other articles. The new ACM/IEEE curriculum guidelines [3] also have begun de-emphasizing computer architecture and assembly language programming in the computer science curriculum. Out of 14 areas of computer science in these guidelines, there is only one on computer architecture and organization. Like the ABET criteria, ACM/IEEE (see Chapter I of the reference) suggests spending a minimum of 9 hours on the following learning objectives (taken from the report): 1. Explain the basic organization of the classical von Neumann machine and its major functional units. 2. Explain how an instruction is executed in a classical von Neumann machine. 3. Summarize how instructions are represented at both the machine level and in the context of a symbolic assembler. 4. Explain different instruction formats, such as addresses per instruction and variable length vs. fixed length formats. 5. Write simple assembly language program segments. 6. Demonstrate how fundamental high-level programming constructs are implemented at the machine-language level. 7. Explain the basic concepts of interrupts and I/O operations. There is also an excellent panel discussion dealing with the computer architecture, assembly language and operating systems components of the ACM/IEEE curriculum in [5]. Some of the important comments from this article are: •

"In the past, most schools offered two separate courses: Assembly Language Programming and Computer Architecture. The new curriculum helps small schools, in that resources can be allocated to additional topics, such as electives in databases, networking, parallel processing, and so forth. However, having only one architecture course means there is less time for each topic." • "Understanding assembly language programming makes students better high-level language programmers." • "Besides, without learning assembly language, students may not fully understand how a computer works." Stiller [9] has made some excellent points regarding the need for new topics in the computer science curriculum, especially to attract more women and minorities into 247

JCSC 19, 4 (April 2004) computer science departments. Her report points out the need to cover the following topics in any modern curriculum: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.

The World Wide Web and its applications Networking Technologies, particularly those based on TCP/IP Graphics and Multimedia Embedded Systems Relational Databases Interoperability Object-oriented programming The use of sophisticated application programmer interfaces (APIs) Human-computer interaction Software safety Security and cryptography Application Domain

ADVANTAGES OF HAVING A SEPARATE COURSE Authors of textbooks on assembly language programming give many reasons for including its study in the computing curriculum. Some of the following advantages of assembly language programming (as compared with programming in a higher-level language) have been adapted from [1] and [4]. 1. 2. 3. 4. 5. 6. 7.

Clarifies execution of instructions Shows how data is represented in memory Shows how a program interacts with the operating system, CPU and BIOS Clarifies how a program accesses external devices Improves time-efficiency Allows accessibility to hardware Improves space-efficiency

Krishnaprasad [6, 7] feels that hardware topics often get "short-changed" in the typical computer science curriculum and recommends having two required hardware courses if possible, or at least having a lab component with the single hardware course for smaller schools where it is not possible to have more than one course. From [5] it is clear that students gain a better understanding of how a computer works if they take a full course in assembly language programming. They may also make better higher-level language programmers if they understand the details of how a computer functions. This statement is, of course, open to debate. DISADVANTAGES OF HAVING A SEPARATE COURSE The breadth and depth of knowledge has grown exponentially in the past five decades. However, in most computer science departments at small colleges and universities, only about a third of the total credit hours (about 42 out of 128) taken by a student are for computer science courses. The rest often count towards satisfying general curriculum requirements and towards the math and science courses typically required for science majors. This means that only fourteen courses can be devoted towards the entire 248

CCSC: South Central Conference computer science education that a typical undergraduate student acquires in a four year period. Devoting two full hardware courses towards the degree usually involves a course in Computer Architecture and another in Assembly Language Programming. Over the last two decades this has meant slowly moving away from older courses in Numerical Analysis, Compiler Design and Operating Systems. These courses have seen a consistent drop in enrollment and have therefore not been offered in the last several years at Louisiana State University in Shreveport. Other courses that have seen a similar decline are Artificial Intelligence, Computer Aided Design, Advanced Computer Architecture, and Computer Graphics, to name just a few. At larger universities, courses such as Pattern Recognition and Image Processing have also seen a decline in enrollment, student interest and course offerings as per the observation of the authors. Newer, "flashier" curricula have seen an increasing number of courses that have been created in the last decade. Some of these include courses on Object-Oriented Design and languages, the Internet, Multimedia technologies, Computer Networks and Graphical User Interfaces. More technology-oriented curricula often include courses on using Windows, Office products and sometimes Linux. These have also been observed by the authors to have gained enrollment. Some other courses that have been observed to gain popularity are those on programming in Java, C++, C# and Visual Basic with their applications. REASONS FOR CHANGE From the ACM/IEEE report and from [9] we can deduce several reasons for the declining emphasis on assembly language programming: 1. 2.

3.

New courses on Internet technology demand attention. Many students prefer Information Technology to traditional computer science degree program, perhaps due to their inability to handle more theoretical/mathematical courses. More women and minority need to be attracted to computing.

Stiller [9] emphasizes the need to make room for new courses. A detailed description of a new course on Client/Server programming is recommended in her report. She also recommends combining Programming Languages and Operating Systems courses into a single course so as not to neglect either one and yet have the benefit of learning both topics to some extent. Other courses include additional emphasis on relational database management systems, graphics and multimedia, human-computer interaction, software safety, and security and cryptography. Yale Patt and Sanjay Patel [8] have written an interesting book covering a wide range of hardware and software topics to introduce a beginning computer science student to a breadth-first overview of computing. It includes the structure of a simple fictitious computer, the LC-2, for which simulation software is provided. A smattering of topics such as logic design, data representation, the von Neumann model, problem solving, assembly language, I/O basics, subroutines, programming in C and data structures are included. Although the optimal use of this book may be over two semesters, the main idea is to get away from teaching complex CPU architectures such as those of Intel and 249

JCSC 19, 4 (April 2004) Motorola microprocessor chips. In other words, the emphasis is on understanding general concepts and not on particular details of CPUs which get obsolete in a short time. We like this model very much and strongly feel that it is time to combine Assembly Language Programming and Computer Architecture into a single course instead of two separate courses as is the current trend in several departments of computer science. An exception can of course be made for computer engineering departments which already follow significantly different curricula. This will allow us to keep all the advantages of teaching assembly language programming and yet permit us space in our curriculum to introduce newer courses such as those mentioned earlier in this paper. CONCLUSIONS We have discussed a few of the problems that arise in teaching assembly language to students majoring in computer science. Recent advances of the Internet have forced the introduction of several new courses in this arena leaving less time for traditional courses such as Computer Architecture and Assembly Language Programming. It is our firm belief that there is not enough time in the curriculum in most computer science departments to teach two separate courses on these topics. In any curriculum there are literally hundreds of topics to choose from- we simply have to focus on the most important ones and make the best use of our time in a field that is constantly and rapidly changing. REFERENCES 1.

Abel, P., IBM PC Assembly Language Programming, Fifth Edition, Upper Saddle River, NJ: Prentice Hall, 2001.

2.

Computing Accreditation Commission, Criteria for Accrediting Computing Programs, www.abet.org, 2003.

3.

Computing Curricula 2001 Steelman Draft (August 1, 2001), www.computer.org/education/cc2001/steelman/cc2001/index.htm, 2001.

4.

Dandamudi, S., Introduction to Assembly Language Programming, New York, NY: Springer-Verlag, 1998.

5.

Ford, F., Gousie, M., Kumar, A., Sattar, A., Implementing the Architecture, Assembly Language, and Operating Systems Components of Curriculum 2001, Journal of Computing Sciences in Colleges, 18, (5), 118-122, 2003.

6.

Krishnaprasad, S., Changing Role of Assembly Language Programming in Computer Science Curriculum, Journal of Computing in Small Colleges, 15, (2), 179-185, 2000.

7.

Krishnaprasad, S., Relevance of Computer Hardware Topics in Computer Science Curriculum, Journal of Computing Sciences in Colleges, 18, (2), 328-336, 2002.

8.

Patt, Y., Patel, S., Introduction to Computer Systems: From Bits and Gates to C & Beyond, Second Edition, Boston, MA: McGraw-Hill, 2003.

250

CCSC: South Central Conference 9.

Stiller, E., Creating New Computer Science Curricula for the New Millennium, Journal of Computing Sciences in Colleges, 18, (5), 198-209, 2003.

251