|
![]() |
|||
|
||||
OverviewAssembly Language for x86 Processors, 6/e is ideal for undergraduate courses in assembly language programming and introductory courses in computer systems and computer architecture. Written specifically for the Intel/Windows/DOS platform, this complete and fully updated study of assembly language teaches students to write and debug programs at the machine level. Based on the Intel processor family, the text simplifies and demystifies concepts that students need to grasp before they can go on to more advanced computer architecture and operating systems courses. Students put theory into practice through writing software at the machine level, creating a memorable experience that gives them the confidence to work in any OS/machine-oriented environment. Proficiency in one other programming language, preferably Java, C, or C++, is recommended. Full Product DetailsAuthor: Kip R. IrvinePublisher: Pearson Education (US) Imprint: Pearson Edition: 6th edition Dimensions: Width: 17.80cm , Height: 3.30cm , Length: 23.20cm Weight: 1.180kg ISBN: 9780136022121ISBN 10: 013602212 Pages: 768 Publication Date: 22 April 2010 Audience: College/higher education , Undergraduate Replaced By: 9780133769401 Format: Hardback Publisher's Status: Out of Print Availability: In Print ![]() Limited stock is available. It will be ordered for you and shipped pending supplier's limited stock. Table of ContentsPreface xix 1. Basic Concepts 1 1.1 Welcome to Assembly Language 1 1.1.1 Good Questions to Ask 2 1.1.2 Assembly Language Applications 5 1.1.3 Section Review 6 1.2 Virtual Machine Concept 7 1.2.1 Section Review 9 1.3 Data Representation 9 1.3.1 Binary Integers 9 1.3.2 Binary Addition 11 1.3.3 Integer Storage Sizes 12 1.3.4 Hexadecimal Integers 13 1.3.5 Signed Integers 15 1.3.6 Character Storage 17 1.3.7 Section Review 19 1.4 Boolean Operations 22 1.4.1 Truth Tables for Boolean Functions 24 1.4.2 Section Review 26 1.5 Chapter Summary 26 1.6 Exercises 27 1.6.1 Programming Tasks 27 1.6.2 Nonprogramming Tasks 27 2. x86 Processor Architecture 29 2.1 General Concepts 29 2.1.1 Basic Microcomputer Design 30 2.1.2 Instruction Execution Cycle 31 2.1.3 Reading from Memory 33 2.1.4 How Programs Run 34 2.1.5 Section Review 35 2.2 x86 Architecture Details 36 2.2.1 Modes of Operation 36 2.2.2 Basic Execution Environment 36 2.2.3 Floating-Point Unit 39 2.2.4 Overview of Intel Microprocessors 39 2.2.5 Section Review 42 2.3 x86 Memory Management 43 2.3.1 Real-Address Mode 43 2.3.2 Protected Mode 45 2.3.3 Section Review 47 2.4 Components of a Typical x86 Computer 48 2.4.1 Motherboard 48 2.4.2 Video Output 50 2.4.3 Memory 50 2.4.4 Input-Output Ports and Device Interfaces 50 2.4.5 Section Review 52 2.5 Input-Output System 52 2.5.1 Levels of I/O Access 52 2.5.2 Section Review 55 2.6 Chapter Summary 55 2.7 Chapter Exercises 57 3. Assembly Language Fundamentals 58 3.1 Basic Elements of Assembly Language 58 3.1.1 Integer Constants 59 3.1.2 Integer Expressions 60 3.1.3 Real Number Constants 61 3.1.4 Character Constants 61 3.1.5 String Constants 61 3.1.6 Reserved Words 62 3.1.7 Identifiers 62 3.1.8 Directives 62 3.1.9 Instructions 63 3.1.10 The NOP (No Operation) Instruction 65 3.1.11 Section Review 66 3.2 Example: Adding and Subtracting Integers 66 3.2.1 Alternative Version of AddSub 69 3.2.2 Program Template 70 3.2.3 Section Review 70 3.3 Assembling, Linking, and Running Programs 71 3.3.1 The Assemble-Link-Execute Cycle 71 3.3.2 Section Review 77 3.4 Defining Data 77 3.4.1 Intrinsic Data Types 77 3.4.2 Data Definition Statement 77 3.4.3 Defining BYTE and SBYTE Data 78 3.4.4 Defining WORD and SWORD Data 80 3.4.5 Defining DWORD and SDWORD Data 81 3.4.6 Defining QWORD Data 81 3.4.7 Defining Packed Binary Coded Decimal (TBYTE) Data 82 3.4.8 Defining Real Number Data 83 3.4.9 Little Endian Order 83 3.4.10 Adding Variables to the AddSub Program 84 3.4.11 Declaring Uninitialized Data 85 3.4.12 Section Review 85 3.5 Symbolic Constants 86 3.5.1 Equal-Sign Directive 86 3.5.2 Calculating the Sizes of Arrays and Strings 87 3.5.3 EQU Directive 88 3.5.4 TEXTEQU Directive 89 3.5.5 Section Review 90 3.6 Real-Address Mode Programming (Optional) 90 3.6.1 Basic Changes 90 3.7 Chapter Summary 91 3.8 Programming Exercises 92 4. Data Transfers, Addressing, and Arithmetic 94 4.1 Data Transfer Instructions 94 4.1.1 Introduction 94 4.1.2 Operand Types 95 4.1.3 Direct Memory Operands 96 4.1.4 MOV Instruction 96 4.1.5 Zero/Sign Extension of Integers 98 4.1.6 LAHF and SAHF Instructions 100 4.1.7 XCHG Instruction 100 4.1.8 Direct-Offset Operands 101 4.1.9 Example Program (Moves) 102 4.1.10 Section Review 103 4.2 Addition and Subtraction 104 4.2.1 INC and DEC Instructions 104 4.2.2 ADD Instruction 104 4.2.3 SUB Instruction 105 4.2.4 NEG Instruction 105 4.2.5 Implementing Arithmetic Expressions 106 4.2.6 Flags Affected by Addition and Subtraction 106 4.2.7 Example Program (AddSub3) 110 4.2.8 Section Review 111 4.3 Data-Related Operators and Directives 112 4.3.1 OFFSET Operator 112 4.3.2 ALIGN Directive 113 4.3.3 PTR Operator 114 4.3.4 TYPE Operator 115 4.3.5 LENGTHOF Operator 115 4.3.6 SIZEOF Operator 116 4.3.7 LABEL Directive 116 4.3.8 Section Review 117 4.4 Indirect Addressing 117 4.4.1 Indirect Operands 118 4.4.2 Arrays 119 4.4.3 Indexed Operands 120 4.4.4 Pointers 121 4.4.5 Section Review 123 4.5 JMP and LOOP Instructions 124 4.5.1 JMP Instruction 124 4.5.2 LOOP Instruction 124 4.5.3 Summing an Integer Array 126 4.5.4 Copying a String 126 4.5.5 Section Review 127 4.6 Chapter Summary 128 4.7 Programming Exercises 129 5. Procedures 132 5.1 Introduction 132 5.2 Linking to an External Library 132 5.2.1 Background Information 133 5.2.2 Section Review 134 5.3 The Book's Link Library 134 5.3.1 Overview 136 5.3.2 Individual Procedure Descriptions 137 5.3.3 Library Test Programs 149 5.3.4 Section Review 157 5.4 Stack Operations 157 5.4.1 Runtime Stack 158 5.4.2 PUSH and POP Instructions 160 5.4.3 Section Review 162 5.5 Defining and Using Procedures 163 5.5.1 PROC Directive 163 5.5.2 CALL and RET Instructions 165 5.5.3 Example: Summing an Integer Array 168 5.5.4 Flowcharts 169 5.5.5 Saving and Restoring Registers 170 5.5.6 Section Review 171 5.6 Program Design Using Procedures 172 5.6.1 Integer Summation Program (Design) 173 5.6.2 Integer Summation Implementation 175 5.6.3 Section Review 177 5.7 Chapter Summary 177 5.8 Programming Exercises 178 6. Conditional Processing 180 6.1 Introduction 180 6.2 Boolean and Comparison Instructions 181 6.2.1 The CPU Flags 182 6.2.2 AND Instruction 182 6.2.3 OR Instruction 183 6.2.4 Bit-Mapped Sets 184 6.2.5 XOR Instruction 186 6.2.6 NOT Instruction 187 6.2.7 TEST Instruction 187 6.2.8 CMP Instruction 188 6.2.9 Setting and Clearing Individual CPU Flags 189 6.2.10 Section Review 189 6.3 Conditional Jumps 190 6.3.1 Conditional Structures 190 6.3.2 Jcond Instruction 191 6.3.3 Types of Conditional Jump Instructions 192 6.3.4 Conditional Jump Applications 195 6.3.5 Section Review 199 6.4 Conditional Loop Instructions 200 6.4.1 LOOPZ and LOOPE Instructions 200 6.4.2 LOOPNZ and LOOPNE Instructions 201 6.4.3 Section Review 201 6.5 Conditional Structures 202 6.5.1 Block-Structured IF Statements 202 6.5.2 Compound Expressions 204 6.5.3 WHILE Loops 206 6.5.4 Table-Driven Selection 208 6.5.5 Section Review 210 6.6 Application: Finite-State Machines 211 6.6.1 Validating an Input String 211 6.6.2 Validating a Signed Integer 212 6.6.3 Section Review 216 6.7 Conditional Control Flow Directives 217 6.7.1 Creating IF Statements 218 6.7.2 Signed and Unsigned Comparisons 219 6.7.3 Compound Expressions 220 6.7.4 .REPEAT and .WHILE Directives 223 6.8 Chapter Summary 224 6.9 Programming Exercises 225 7. Integer Arithmetic 229 7.1 Introduction 229 7.2 Shift and Rotate Instructions 230 7.2.1 Logical Shifts and Arithmetic Shifts 230 7.2.2 SHL Instruction 231 7.2.3 SHR Instruction 232 7.2.4 SAL and SAR Instructions 233 7.2.5 ROL Instruction 234 7.2.6 ROR Instruction 235 7.2.7 RCL and RCR Instructions 235 7.2.8 Signed Overflow 236 7.2.9 SHLD/SHRD Instructions 236 7.2.10 Section Review 238 7.3 Shift and Rotate Applications 239 7.3.1 Shifting Multiple Doublewords 240 7.3.2 Binary Multiplication 241 7.3.3 Displaying Binary Bits 242 7.3.4 Isolating MS-DOS File Date Fields 242 7.3.5 Section Review 243 7.4 Multiplication and Division Instructions 243 7.4.1 MUL Instruction 243 7.4.2 IMUL Instruction 245 7.4.3 Measuring Program Execution Times 247 7.4.4 DIV Instruction 249 7.4.5 Signed Integer Division 250 7.4.6 Implementing Arithmetic Expressions 253 7.4.7 Section Review 255 7.5 Extended Addition and Subtraction 256 7.5.1 ADC Instruction 256 7.5.2 Extended Addition Example 257 7.5.3 SBB Instruction 258 7.5.4 Section Review 259 7.6 ASCII and Unpacked Decimal Arithmetic 260 7.6.1 AAA Instruction 261 7.6.2 AAS Instruction 262 7.6.3 AAM Instruction 263 7.6.4 AAD Instruction 263 7.6.5 Section Review 264 7.7 Packed Decimal Arithmetic 264 7.7.1 DAA Instruction 264 7.7.2 DAS Instruction 266 7.7.3 Section Review 266 7.8 Chapter Summary 266 7.9 Programming Exercises 267 8. Advanced Procedures 270 8.1 Introduction 270 8.2 Stack Frames 271 8.2.1 Stack Parameters 272 8.2.2 Accessing Stack Parameters 273 8.2.3 Local Variables 281 8.2.4 ENTER and LEAVE Instructions 285 8.2.5 LOCAL Directive 286 8.2.6 Section Review 289 8.3 Recursion 290 8.3.1 Recursively Calculating a Sum 291 8.3.2 Calculating a Factorial 292 8.3.3 Section Review 298 8.4 INVOKE, ADDR, PROC, and PROTO 299 8.4.1 INVOKE Directive 299 8.4.2 ADDR Operator 300 8.4.3 PROC Directive 301 8.4.4 PROTO Directive 304 8.4.5 Parameter Classifications 307 8.4.6 Example: Exchanging Two Integers 307 8.4.7 Debugging Tips 308 8.4.8 WriteStackFrame Procedure 309 8.4.9 Section Review 310 8.5 Creating Multimodule Programs 311 8.5.1 Hiding and Exporting Procedure Names 311 8.5.2 Calling External Procedures 312 8.5.3 Using Variables and Symbols across Module Boundaries 313 8.5.4 Example: ArraySum Program 314 8.5.5 Creating the Modules Using Extern 314 8.5.6 Creating the Modules Using INVOKE and PROTO 318 8.5.7 Section Review 321 8.6 Java Bytecodes 321 8.6.1 Java Virtual Machine 321 8.6.2 Instruction Set 322 8.6.3 Java Disassembly Examples 323 8.7 Chapter Summary 328 8.8 Programming Exercises 329 9. Strings and Arrays 332 9.1 Introduction 332 9.2 String Primitive Instructions 333 9.2.1 MOVSB, MOVSW, and MOVSD 334 9.2.2 CMPSB, CMPSW, and CMPSD 335 9.2.3 SCASB, SCASW, and SCASD 336 9.2.4 STOSB, STOSW, and STOSD 336 9.2.5 LODSB, LODSW, and LODSD 337 9.2.6 Section Review 337 9.3 Selected String Procedures 338 9.3.1 Str_compare Procedure 338 9.3.2 Str_length Procedure 339 9.3.3 Str_copy Procedure 340 9.3.4 Str_trim Procedure 340 9.3.5 Str_ucase Procedure 343 9.3.6 String Library Demo Program 344 9.3.7 Section Review 346 9.4 Two-Dimensional Arrays 346 9.4.1 Ordering of Rows and Columns 346 9.4.2 Base-Index Operands 347 9.4.3 Base-Index-Displacement Operands 349 9.4.4 Section Review 350 9.5 Searching and Sorting Integer Arrays 350 9.5.1 Bubble Sort 350 9.5.2 Binary Search 352 9.5.3 Section Review 3599.6 Java Bytecodes: String Processing 359 9.7 Chapter Summary 360 9.8 Programming Exercises 361 10. Structures and Macros 366 10.1 Structures 366 10.1.1 Defining Structures 367 10.1.2 Declaring Structure Variables 368 10.1.3 Referencing Structure Variables 370 10.1.4 Example: Displaying the System Time 372 10.1.5 Structures Containing Structures 375 10.1.6 Example: Drunkard's Walk 375 10.1.7 Declaring and Using Unions 378 10.1.8 Section Review 381 10.2 Macros 382 10.2.1 Overview 382 10.2.2 Defining Macros 382 10.2.3 Invoking Macros 383 10.2.4 Additional Macro Features 384 10.2.5 Using the Book's Macro Library 388 10.2.6 Example Program: Wrappers 394 10.2.7 Section Review 395 10.3 Conditional-Assembly Directives 396 10.3.1 Checking for Missing Arguments 397 10.3.2 Default Argument Initializers 398 10.3.3 Boolean Expressions 399 10.3.4 IF, ELSE, and ENDIF Directives 399 10.3.5 The IFIDN and IFIDNI Directives 400 10.3.6 Example: Summing a Matrix Row 401 10.3.7 Special Operators 404 10.3.8 Macro Functions 407 10.3.9 Section Review 409 10.4 Defining Repeat Blocks 410 10.4.1 WHILE Directive 410 10.4.2 REPEAT Directive 410 10.4.3 FOR Directive 411 10.4.4 FORC Directive 412 10.4.5 Example: Linked List 412 10.4.6 Section Review 414 10.5 Chapter Summary 415 10.6 Programming Exercises 416 11. MS-Windows Programming 419 11.1 Win32 Console Programming 419 11.1.1 Background Information 420 11.1.2 Win32 Console Functions 424 11.1.3 Displaying a Message Box 426 11.1.4 Console Input 429 11.1.5 Console Output 435 11.1.6 Reading and Writing Files 437 11.1.7 File I/O in the Irvine32 Library 442 11.1.8 Testing the File I/O Procedures 444 11.1.9 Console Window Manipulation 447 11.1.10 Controlling the Cursor 450 11.1.11 Controlling the Text Color 451 11.1.12 Time and Date Functions 453 11.1.13 Section Review 456 11.2 Writing a Graphical Windows Application 457 11.2.1 Necessary Structures 458 11.2.2 The MessageBox Function 459 11.2.3 The WinMain Procedure 460 11.2.4 The WinProc Procedure 460 11.2.5 The ErrorHandler Procedure 461 11.2.6 Program Listing 461 11.2.7 Section Review 465 11.3 Dynamic Memory Allocation 466 11.3.1 HeapTest Programs 469 11.3.2 Section Review 473 11.4 x86 Memory Management 473 11.4.1 Linear Addresses 473 11.4.2 Page Translation 477 11.4.3 Section Review 479 11.5 Chapter Summary 479 11.6 Programming Exercises 481 12. Floating-Point Processing and Instruction Encoding 483 12.1 Floating-Point Binary Representation 483 12.1.1 IEEE Binary Floating-Point Representation 484 12.1.2 The Exponent 485 12.1.3 Normalized Binary Floating-Point Numbers 486 12.1.4 Creating the IEEE Representation 486 12.1.5 Converting Decimal Fractions to Binary Reals 488 12.1.6 Section Review 490 12.2 Floating-Point Unit 490 12.2.1 FPU Register Stack 491 12.2.2 Rounding 493 12.2.3 Floating-Point Exceptions 495 12.2.4 Floating-Point Instruction Set 495 12.2.5 Arithmetic Instructions 498 12.2.6 Comparing Floating-Point Values 502 12.2.7 Reading and Writing Floating-Point Values 504 12.2.8 Exception Synchronization 506 12.2.9 Code Examples 507 12.2.10 Mixed-Mode Arithmetic 508 12.2.11 Masking and Unmasking Exceptions 509 12.2.12 Section Review 511 12.3 x86 Instruction Encoding 512 12.3.1 Instruction Format 512 12.3.2 Single-Byte Instructions 513 12.3.3 Move Immediate to Register 514 12.3.4 Register-Mode Instructions 514 12.3.5 Processor Operand-Size Prefix 515 12.3.6 Memory-Mode Instructions 516 12.3.7 Section Review 519 12.4 Chapter Summary 520 12.5 Programming Exercises 521 13. High-Level Language Interface 525 13.1 Introduction 525 13.1.1 General Conventions 526 13.1.2 .MODEL Directive 527 13.1.3 Section Review 529 13.2 Inline Assembly Code 529 13.2.1 __asm Directive in Microsoft Visual C++ 529 13.2.2 File Encryption Example 532 13.2.3 Section Review 535 13.3 Linking to C/C++ in Protected Mode 535 13.3.1 Using Assembly Language to Optimize C++ Code 536 13.3.2 Calling C and C++ Functions 542 13.3.3 Multiplication Table Example 544 13.3.4 Calling C Library Functions 547 13.3.5 Directory Listing Program 550 13.3.6 Section Review 552 13.4 Linking to C/C++ in Real-Address Mode 552 13.4.1 Linking to Borland C++ 553 13.4.2 ReadSector Example 554 13.4.3 Example: Large Random Integers 558 13.4.4 Section Review 55913.5 Chapter Summary 560 13.6 Programming Exercises 561 14. 16-Bit MS-DOS Programming 562 14.1 MS-DOS and the IBM-PC 562 14.1.1 Memory Organization 563 14.1.2 Redirecting Input-Output 564 14.1.3 Software Interrupts 565 14.1.4 INT Instruction 565 14.1.5 Coding for 16-Bit Programs 567 14.1.6 Section Review 568 14.2 MS-DOS Function Calls (INT 21h) 568 14.2.1 Selected Output Functions 570 14.2.2 Hello World Program Example 572 14.2.3 Selected Input Functions 573 14.2.4 Date/Time Functions 577 14.2.5 Section Review 581 14.3 Standard MS-DOS File I/O Services 581 14.3.1 Create or Open File (716Ch) 583 14.3.2 Close File Handle (3Eh) 584 14.3.3 Move File Pointer (42h) 584 14.3.4 Get File Creation Date and Time 585 14.3.5 Selected Library Procedures 585 14.3.6 Example: Read and Copy a Text File 586 14.3.7 Reading the MS-DOS Command Tail 588 14.3.8 Example: Creating a Binary File 591 14.3.9 Section Review 594 14.4 Chapter Summary 594 14.5 Chapter Exercises 596 Chapters are available from the Companion Web site 15. Disk Fundamentals 16. BIOS-Level Programming 17. Expert MS-DOS Programming Appendix A MASM Reference 598 Appendix B The x86 Instruction Set 620 Appendix C Answers to Review Questions 655ReviewsThis textbook [Irvine] teaches assembly and architecture fundamentals in a logical and concise manner for students with a reasonable CS1 backgrounds...and are applicable to higher-level programmers as to their understanding of what is happing to the code that they write and how it behaves during compilation and execution. -- John Doyle, Indiana University, Southeast The problems and exercises are of good quality and quantity; they always have similarity within the chapter examples, but they are presented in a more challenging way. Students can pick-up skills that can be transferred to solving a new problem. -- Yinping Jiao, South Texas College The book [Irvine] is well-organized. The chapters are lined-up such that after you cover the foundations presented in chapter 1-8, you can jump to any chapter you like consistent with what you think the students should know for upcoming classes. -- Remzi Seker, University of Arkansas, Little Rock Wonderful! This edition...added clearer examples to make it easy to understand assembly language and computer architecture from the programmer's point-of-view. I am very impressed with the clarity of explanations. The diagrams are simple and complement the discussions perfectly. -- David Topham, Ohlone College The coverage of 16-bit mode is superb... increasingly historical. -- John-Thomas Amenyo, York College, City College of New York This textbook [Irvine] teaches assembly and architecture fundamentals in a logical and concise manner for students with a reasonable CS1 backgrounds...and are applicable to higher-level programmers as to their understanding of what is happing to the code that they write and how it behaves during compilation and execution. -- John Doyle, Indiana University, Southeast<br><br> The problems and exercises are of good quality and quantity; they always have similarity within the chapter examples, but they are presented in a more challenging way. Students can pick-up skills that can be transferred to solving a new problem. -- Yinping Jiao, South Texas College<br><br> The book [Irvine] is well-organized. The chapters are lined-up such that after you cover the foundations presented in chapter 1-8, you can jump to any chapter you like consistent with what you think the students should know for upcoming classes. -- Remzi Seker, University of Arkansas, Little Rock<br><br> Wonderful! This edition...added clearer examples to make it easy to understand assembly language and computer architecture from the programmer's point-of-view. I am very impressed with the clarity of explanations. The diagrams are simple and complement the discussions perfectly. -- David Topham, Ohlone College<br><br> The coverage of 16-bit mode is superb... increasingly historical. -- John-Thomas Amenyo, York College, City College of New York This textbook [Irvine] teaches assembly and architecture fundamentals in a logical and concise manner for students with a reasonable CS1 backgrounds and are applicable to higher-level programmers as to their understanding of what is happing to the code that they write and how it behaves during compilation and execution. John Doyle, Indiana University, Southeast The problems and exercises are of good quality and quantity; they always have similarity within the chapter examples, but they are presented in a more challenging way. Students can pick-up skills that can be transferred to solving a new problem. Yinping Jiao, South Texas College The book [Irvine] is well-organized. The chapters are lined-up such that after you cover the foundations presented in chapter 1-8, you can jump to any chapter you like consistent with what you think the students should know for upcoming classes. Remzi Seker, University of Arkansas, Little Rock Wonderful! This edition added clearer examples to make it easy to understand assembly language and computer architecture from the programmer s point-of-view. I am very impressed with the clarity of explanations. The diagrams are simple and complement the discussions perfectly. David Topham, Ohlone College The coverage of 16-bit mode is superb increasingly historical. John-Thomas Amenyo, York College, City College of New York This textbook [Irvine] teaches assembly and architecture fundamentals in a logical and concise manner for students with a reasonable CS1 backgrounds...and are applicable to higher-level programmers as to their understanding of what is happing to the code that they write and how it behaves during compilation and execution. -- John Doyle, Indiana University, Southeast <br> The problems and exercises are of good quality and quantity; they always have similarity within the chapter examples, but they are presented in a more challenging way. Students can pick-up skills that can be transferred to solving a new problem. -- Yinping Jiao, South Texas College <br> The book [Irvine] is well-organized. The chapters are lined-up such that after you cover the foundations presented in chapter 1-8, you can jump to any chapter you like consistent with what you think the students should know for upcoming classes. -- Remzi Seker, University of Arkansas, Little Rock <br> Wonderful! This edi Author InformationKip Irvine has written five computer programming textbooks, for Intel Assembly Language, C++, Visual Basic (beginning and advanced), and COBOL. His book Assembly Language for Intel-Based Computers has been translated into six languages. His first college degrees (B.M., M.M., and doctorate) were in Music Composition, at University of Hawaii and University of Miami. He began programming computers for music synthesis around 1982 and taught programming at Miami-Dade Community College for 17 years. Kip earned an M.S. degree in Computer Science from the University of Miami, and he has been a full-time member of the faculty in the School of Computing and Information Sciences at Florida International University since 2000. Tab Content 6Author Website:Countries AvailableAll regions |