
Concept explainers
Explanation of Solution
Trace out for given “Example 4.3”:
Tracing the program is the process of documenting the state of the various aspects of the execution of the program over assembly instruction. Every instruction has the process like fetch, store, and decode which are used to determine the desired outcome to execute the program.
This tracing has address, label, instruction, RTN, and values of each registers. The trace out for given code “example 4.3” is as follows:
Instruction: Load X
Step | RTN | PC | IR | MAR | MBR | AC |
(initial values) | 100 | - | - | - | - | |
Fetch | MARßPC | 100 | - | 100 | - | - |
IRßM[MAR] | 100 | 110C | 100 | - | - | |
PCßPC+1 | 101 | 110C | 100 | - | - | |
Decode | MARßIR[11-0] | 101 | 110C | 10C | - | - |
(Decode IR[15-12] | 101 | 110C | 10C | - | - | |
Get operand | MBRßM[MAR] | 101 | 110C | 10C | 000C | - |
Execute | ACßAC-MBR | 101 | 110C | 10C | 000C | 000C |
Instruction: Subt Y
Step | RTN | PC | IR | MAR | MBR | AC |
(initial values) | 101 | 110C | 10C | 000C | 000C | |
Fetch | MARßPC | 101 | 110C | 101 | 000C | 000C |
IRßM[MAR] | 101 | 410D | 101 | 000C | 000C | |
PCßPC+1 | 102 | 410D | 101 | 000C | 000C | |
Decode | MARßIR[11-0] | 102 | 410D | 101 | 000C | 000C |
(Decode IR[15-12] | 102 | 410D | 10D | 000C | 000C | |
Get operand | MBRßM[MAR] | 102 | 410D | 10D | 0014 | 000C |
Execute | ACßAC-MBR | 102 | 410D | 10D | 0014 | FFF8 |
Instruction: Skipcond 400
Step | RTN | PC | IR | MAR | MBR | AC |
(initial values) | 102 | 410D | 10D | 0014 | FFF8 | |
Fetch | MARßPC | 102 | 410D | 102 | 0014 | FFF8 |
IRßM[MAR] | 102 | 8400 | 102 | 0014 | FFF8 | |
PCßPC+1 | 103 | 8400 | 102 | 0014 | FFF8 | |
Decode | MARßIR[11-0] | 103 | 8400 | 400 | 0014 | FFF8 |
(Decode IR[15-12] | 103 | 8400 | 400 | 0014 | FFF8 | |
Get operand | Not necessary | 103 | 8400 | 400 | 0014 | FFF8 |
Execute | Do nothing | 103 | 8400 | 400 | 0014 | FFF8 |
Instruction: Jump Else
Step | RTN | PC | IR | MAR | MBR | AC |
(initial values) | 103 | 8400 | 400 | 0014 | FFF8 | |
Fetch | MARßPC | 103 | 8400 | 103 | 0014 | FFF8 |
IRßM[MAR] | 103 | 9108 | 103 | 0014 | FFF8 | |
PCßPC+1 | 104 | 9108 | 103 | 0014 | FFF8 | |
Decode | MARßIR[11-0] | 104 | 9108 | 108 | 0014 | FFF8 |
(Decode IR[15-12] | 104 | 9108 | 108 | 0014 | FFF8 | |
Get operand | Not necessary | 104 | 9108 | 108 | 0014 | FFF8 |
Execute | PCßIR[11-0] | 108 | 9108 | 108 | 000C | FFF8 |
Instruction: Load Y
Step | RTN | PC | IR | MAR | MBR | AC |
(initial values) | 108 | 9108 | 108 | 000C | FFF8 | |
Fetch | MARßPC | 108 | 9108 | 108 | 000C | FFF8 |
IRßM[MAR] | 108 | 110D | 108 | 000C | FFF8 | |
PCßPC+1 | 109 | 110D | 108 | 000C | FFF8 | |
Decode | MARßIR[11-0] | 109 | 110D | 10D | 000C | FFF8 |
(Decode IR[15-12] | 109 | 110D | 10D | 000C | FFF8 | |
Get operand | MBRßM[MAR] | 109 | 110D | 10D | 0014 | FFF8 |
Execute | ACßMBR | 109 | 110D | 10D | 0014 | 0014 |
Instruction: Subt X
Step | RTN | PC | IR | MAR | MBR | AC |
(initial values) | 109 | 110D | 10D | 0014 | 0014 | |
Fetch | MARßPC | 109 | 110D | 109 | 0014 | 0014 |
IRßM[MAR] | 109 | 410C | 109 | 0014 | 0014 | |
PCßPC+1 | 10A | 410C | 109 | 0014 | 0014 | |
Decode | MARßIR[11-0] | 10A | 410C | 10C | 0014 | 0014 |
(Decode IR[15-12] | 10A | 410C | 10C | 0014 | 0014 | |
Get operand | MBRßM[MAR] | 10A | 410C | 10C | 000C | 0014 |
Execute | ACßAC-MBR | 10A | 410C | 10C | 000C | 0008 |
Instruction: Store Y
Step | RTN | PC | IR | MAR | MBR | AC |
(initial values) | 10A | 410C | 10C | 000C | 0008 | |
Fetch | MARßPC | 10A | 410C | 10A | 000C | 0008 |
IRßM[MAR] | 10A | 210D | 10A | 000C | 0008 | |
PCßPC+1 | 10B | 210D | 10A | 000C | 0008 | |
Decode | MARßIR[11-0] | 10B | 210D | 10D | 000C | 0008 |
(Decode IR[15-12] | 10B | 210D | 10D | 000C | 0008 | |
Get operand | Not necessary | 10B | 210D | 10D | 000C | 0008 |
Execute | MBRßAC | 10B | 210D | 10D | 0008 | 0008 |
(Changes Y) | M[MAR]ßMBR | 10B | 210D | 10D | 0008 | 0008 |
Instruction: Halt
Step | RTN | PC | IR | MAR | MBR | AC |
(initial values) | 10B | 210D | 10D | 0008 | 0008 | |
Fetch | MARßPC | 10B | 210D | 10B | 0008 | 0008 |
IRßM[MAR] | 10B | 7000 | 10B | 0008 | 0008 | |
PCßPC+1 | 10C | 7000 | 10B | 0008 | 0008 | |
Decode | MARßIR[11-0] | 10C | 7000 | 000 | 0008 | 0008 |
(Decode IR[15-12] | 10C | 7000 | 000 | 0008 | 0008 | |
Get operand | Not necessary | 10C | 7000 | 000 | 0008 | 0008 |
(Changes Y) | Terminate program | 10C | 7000 | 000 | 0008 | 0008 |
Explanation:
From above tables, the register values is based on instruction and each register value being modified according to the micro operation. The new values are shaded in above table which is based on instruction execution.
Want to see more full solutions like this?
Chapter 4 Solutions
Essentials of Computer Organization and Architecture
- Task 3. i) Compare your results from Tasks 1 and 2. j) Repeat Tasks 1 and 2 for 500 and 5,000 elements. k) Summarize run-time results in the following table: Time/size n String StringBuilder 50 500 5,000arrow_forwardCan you please solve this without AIarrow_forward1. Create a Vehicle.java file. Implement the public Vehicle and Car classes in Vehicle.java, including all the variables and methods in the UMLS. Vehicle - make: String model: String -year: int + Vehicle(String make, String, model, int, year) + getMake(): String + setMake(String make): void + getModel(): String + setModel(String model): void + getYear(): int + set Year(int year): void +toString(): String Car - numDoors: int + numberOfCar: int + Car(String make, String, model, int, year, int numDoors) + getNumDoors(): int + setNumDoors (int num Doors): void + toString(): String 2. Create a CarTest.java file. Implement a public CarTest class with a main method. In the main method, create one Car object and print the object using System.out.println(). Then, print the numberOfCar. Your printing result must follow the example output: make Toyota, model=Camry, year=2022 numDoors=4 1 Hint: You need to modify the toString methods in the Car class and Vehicle class!arrow_forward
- CHATGPT GAVE ME WRONG ANSWER PLEASE HELParrow_forwardHELP CHAT GPT GAVE ME WRONG ANSWER Consider the following implementation of a container that will be used in a concurrent environment. The container is supposed to be used like an indexed array, but provide thread-safe access to elements. struct concurrent_container { // Assume it’s called for any new instance soon before it’s ever used void concurrent_container() { init_mutex(&lock); } ~concurrent_container() { destroy_mutex(&lock); } // Returns element by its index. int get(int index) { lock.acquire(); if (index < 0 || index >= size) { return -1; } int result = data[index]; lock.release(); return result; } // Sets element by its index. void set(int index, int value) { lock.acquire(); if (index < 0 || index >= size) { resize(size); } data[index] = value; lock.release(); } // Extend maximum capacity of the…arrow_forwardWrite a C program using embedded assembler in which you use your own function to multiply by two without using the product. Tip: Just remember that multiplying by two in binary means shifting the number one place to the left. You can use the sample program from the previous exercise as a basis, which increments a variable. Just replace the INC instruction with SHL.arrow_forward
- R languagearrow_forwardQuestion 1 (15 Points) Inheritance: In this question, we are going to create a new subclass of the SimpleGeometricObject class, named Triangle. Create a SimpleGeometricObject.java and Copy the source code of the SimpleGeometricObject class from the following link: https://liveexample.pearsoncmg.com/html/SimpleGeometricObject.html TASK 1: Create a Triangle class that extends the SimpleGeometricObject class in Eclipse, following the below UML diagram. + base:double = 5 + height:double = 10 Triangle + Triangle() + Triangle(newBase: double, newHeight: double) + getArea(): double + setBase(): void + setHeight(): void + getBase(): double + getHeight(): doublearrow_forwardQuestion 2 (10 Points): String vs. StringBuilder Create a Question2.java file and finish the following tasks: Task 1. a) Create a 1D array of integers to store 50 integers. b) Store values from 0 to 49 in the array you just created. c) Create a new String Object using no-arg constructor. d) Using for loop to add the array elements one by one to the String (one per loop iteration) Hint: to append an element to a String, use the + operator. e) Output the String on the console. Record and display a run-time it took to append all integers to the String (record run-time of 1.d.)). Please submit a screenshot. The screenshot should match the following example: 012345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 it took 196708 nanoseconds to append 50 integers to the String.| Hint: You can use the following statements to record run-time. long begin, end, time; // we will measure time it took begin = System.nanoTime(); //we measure in nanoseconds. // put…arrow_forward
- Database System ConceptsComputer ScienceISBN:9780078022159Author:Abraham Silberschatz Professor, Henry F. Korth, S. SudarshanPublisher:McGraw-Hill EducationStarting Out with Python (4th Edition)Computer ScienceISBN:9780134444321Author:Tony GaddisPublisher:PEARSONDigital Fundamentals (11th Edition)Computer ScienceISBN:9780132737968Author:Thomas L. FloydPublisher:PEARSON
- C How to Program (8th Edition)Computer ScienceISBN:9780133976892Author:Paul J. Deitel, Harvey DeitelPublisher:PEARSONDatabase Systems: Design, Implementation, & Manag...Computer ScienceISBN:9781337627900Author:Carlos Coronel, Steven MorrisPublisher:Cengage LearningProgrammable Logic ControllersComputer ScienceISBN:9780073373843Author:Frank D. PetruzellaPublisher:McGraw-Hill Education





