CSAPPInstructor_sSolutionManual

CSAPPInstructor_sSolutionManual - Computer Systems A...

Info iconThis preview shows pages 1–6. Sign up to view the full content.

View Full Document Right Arrow Icon

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: Computer Systems: A Programmer’s Perspective Instructor’s Solution Manual 1 Randal E. Bryant David R. O’Hallaron December 4, 2003 1 Copyright c 2003, R. E. Bryant, D. R. O’Hallaron. All rights reserved. 2 Chapter 1 Solutions to Homework Problems The text uses two different kinds of exercises: Practice Problems. These are problems that are incorporated directly into the text, with explanatory solutions at the end of each chapter. Our intention is that students will work on these problems as they read the book. Each one highlights some particular concept. Homework Problems. These are found at the end of each chapter. They vary in complexity from simple drills to multi-week labs and are designed for instructors to give as assignments or to use as recitation examples. This document gives the solutions to the homework problems. 1.1 Chapter 1: A Tour of Computer Systems 1.2 Chapter 2: Representing and Manipulating Information Problem 2.40 Solution: This exercise should be a straightforward variation on the existing code. code/data/show-ans.c 1 void show_short(short int x) 2 { 3 show_bytes((byte_pointer) &x, sizeof(short int)); 4 } 5 6 void show_long(long int x) 7 { 8 show_bytes((byte_pointer) &x, sizeof(long)); 9 } 1 2 CHAPTER 1. SOLUTIONS TO HOMEWORK PROBLEMS 10 11 void show_double(double x) 12 { 13 show_bytes((byte_pointer) &x, sizeof(double)); 14 } code/data/show-ans.c Problem 2.41 Solution: There are many ways to solve this problem. The basic idea is to create some multibyte datum with different values for the most and least-significant bytes. We then read byte 0 and determine which byte it is. In the following solution is to create an int with value 1. We then access its first byte and convert it to an int . This byte will equal 0 on a big-endian machine and 1 on a little-endian machine. code/data/show-ans.c 1 int is_little_endian(void) 2 { 3 /* MSB = 0, LSB = 1 */ 4 int x = 1; 5 6 /* Return MSB when big-endian, LSB when little-endian */ 7 return (int) (* (char *) &x); 8 } code/data/show-ans.c Problem 2.42 Solution: This is a simple exercise in masking and bit manipulation. It is important to mention that ˜0xFF is a way to generate a mask that selects all but the least significant byte that works for any word size. (x & 0xFF) | (y & ˜0xFF) Problem 2.43 Solution: These exercises require thinking about the logical operation ! in a nontraditional way. Normally we think of it as logical negation. More generally, it detects whether there is any nonzero bit in a word. A. !!x B. !!˜x C. !!(x & 0xFF) D. !!(˜x & 0xFF) Problem 2.44 Solution: 1.2. CHAPTER 2: REPRESENTING AND MANIPULATING INFORMATION 3 There are many solutions to this problem, but it is a little bit tricky to write one that works for any word size. Here is our solution: code/data/shift-ans.c 1 int int_shifts_are_arithmetic() 2 { 3 int x = ˜0; /* All 1’s */ 4 5 return (x >> 1) == x; 6 } code/data/shift-ans.c The above code peforms a right shift of a word in which all bits are set to 1. If the shift is arithmetic, theThe above code peforms a right shift of a word in which all bits are set to 1....
View Full Document

This document was uploaded on 10/20/2011.

Page1 / 89

CSAPPInstructor_sSolutionManual - Computer Systems A...

This preview shows document pages 1 - 6. Sign up to view the full document.

View Full Document Right Arrow Icon
Ask a homework question - tutors are online