编程辅导 C C++ Java Python MIPS Processing 网络家教 在线辅导

编程家教 远程写代码 Debug 讲解答疑 课后答疑 不是中介,本人直接答疑

微信: ittutor QQ: 14061936 Email: ittutor@qq.com

导航

 ECS 40 Program  Executable Name: CPU.out Filenames (case sensitive): decoder.cpp, decoder.h, instruction.cpp, instruction.h, main.cpp, reader.cpp, reader.h, registers.cpp, registers.h, and Makefile. For this assignment you will be converting Program #1 to C++ code using classes, new, delete, and standard C++ input/output classes. All implementation code should be in the .cpp files. You are free (and encouraged) to use my source code for p1 as your starting point. You will find all my source code from p1 in ~ssdavis/40/p1/SeansSrc Thursday morning. In any case, you may wish to refer to my code if you do not understand some of the references in the instructions. Here are the steps to make the conversion. Your program should compile without warnings, and run perfectly after each complete step. 1. Rename all .c files to .cpp files, and rewrite the Makefile accordingly. 2. Replace all calls using stdio.h with calls using iostream, fstream, and iomanip. 2.1. Eliminate the #include , and replace it with #includes of iostream, fstream, and/or iomanip. Add “using namespace std;” wherever these header files are used. 2.2. printf() calls should be replaced with lines using cout and the functions of iomanip described on pages 758-759 in the text. 2.3. File operations should use an ifstream object named inf. getline() will be quite useful. 3. Replace #includes of string.h with cstring, and stdlib with cstdlib. Add “using namespace std;” where needed. 4. Replace calls to malloc() with calls to new. If you code has any calls to free(), then replace them with calls to delete. 5. Make the typedef struct Reader a class. 5.1. Change the typedef in reader.h to a Reader class. Remember to have a semi-colon after the final ‘}’. 5.2. Make read(), and fetch() public member functions of the Reader class. 5.2.1.You should remove the Reader pointer from their parameter lists. 5.2.2. In reader.h, move their prototypes into the Reader class under a “public:” heading. 5.2.3. In reader.cpp, add “Reader::” in front of their function names. 5.2.3.1. Remove the Reader pointer from their parameter lists. 5.2.3.2. Within the functions, remove all “reader->”, since the private data is directly available (a simple search/replace works great!). 5.2.4. In main(), just call them using the Reader object declared in main(), e.g. “reader.read(®isters, argv[1]);” 5.3. After everything compiles and runs perfectly again, as an experiment, delete the semi-colon after the final ‘}’ of the class definition to see what obscure error you get. Then put the semi-colon back. 6. Make the typedef struct Decoder a class. 6.1. Use the steps described for the Reader class as a guideline. 6.2. Make parse(), and execute() public member functions of the Decoder class. 6.3. Make all the assembly language functions private member functions of the Decoder class. 6.3.1.Do not use “this” to make their calls from execute(). There is no need to since the calls are already in a member function, and the object is understood implicitly. 6.3.2.Change pushl() so that it subtracts four from esp, and then places the operand1 information at the location specified by the esp. 7. Make the typedef struct Registers a class, using the steps of the Reader class as a guideline. 7.1. Move the address() code from main.cpp to registers.cpp. 7.2. Move the address() prototype and enum from main.h to registers.h. 7.2.1.Eliminate main.h and any mention of it in any file. 7.3. Make address(), initialize(), and print() public member functions of the Registers class. 7.4. Add a public accessor method, get() which takes an int (one of the enums), and returns an int. If the parameter is out of range return 0. 7.4.1.Replace all accesses to the regs in other files with calls to get(). 7.5. Add a public mutator method, set(), which takes an int (one of the enums), another int, the value for the indicated register, and returns void. If the first parameter is out of range do nothing. 7.5.1.Replace all attempts to change the regs in other files with calls to set(). Note that code that used “+=” will now involve a call to set(), and get()! 8. Make the typedef Instruction a class with a default constructor, a destructor, an accessor method, and two mutator methods. You will now need an instruction.cpp file to hold all of the implementation code for these functions. 8.1. The default constructor should set info to NULL. This will be called when Reader creates its array of Instruction. 8.2. The destructor should use delete to de-allocate info if it is non-NULL. This will be called when the program terminates and destroys the array of Instruction in Reader. 8.3. The accessor method, get(), should return a const char*. Because it is a const, you will need to change some of the code that uses the return value. 8.4. One mutator method, setInfo(), should take a const char*, dynamically allocate enough space for the string, and then copy it into info. This will permit you to move your dynamic memory allocation in the Reader::read() function into this method. The function should return void. 8.5. The other mutator method, setAddress(), should take an int, and return void. Further specifications: 1.1.You may assume that all input will be valid, and not require any form of range checking. 1.2.Your Makefile file must contain five pairs of compiling lines, and one pair of linking lines. You must use g++ with the –g –Wall –ansi options for compiling and linking. You will lose one point for each warning. 1.3.You will find test?.c, test?.S, and my own executable in ~ssdavis/40/p3.

相关推荐