Concept explainers
For a function with prototype
long decoda2(long x, long y, long z);
GCC generates the following assembly code:
Parameters x, y, and z are passed in registers %rdi, %rsi, and %rdx. The code stores the return value in register %rax.
Write C code for decode2 that will have an effect equivalent to the assembly code shown.
Explanation of Solution
Given assembly code:
x in %rdi, y in %rsi and z in %rdx
decode2:
subq %rdx, %rsi
imulq %rsi, %rdi
movq %rsi, %rax
salq $63, %rax
sarq $63, %rax
xorq %rdi, %rax
ret
Load Effective Address:
- The load effective address instruction “leaq” is a variant of “movq” instruction.
- The instruction form reads memory to a register, but memory is not been referenced at all.
- The first operand of instruction is a memory reference; the effective address is been copied to destination.
- The pointers could be generated for later references of memory.
- The common arithmetic operations could be described compactly using this instruction.
- The operand in destination should be a register.
Data movement instructions:
- The different instructions are been grouped as “instruction classes”.
- The instructions in a class performs same operation but with different sizes of operand.
- The “Mov” class denotes data movement instructions that copy data from a source location to a destination.
- The class has 4 instructions that includes:
- movb:
- It copies data from a source location to a destination.
- It denotes an instruction that operates on 1 byte data size.
- movw:
- It copies data from a source location to a destination.
- It denotes an instruction that operates on 2 bytes data size.
- movl:
- It copies data from a source location to a destination.
- It denotes an instruction that operates on 4 bytes data size.
- movq:
- It copies data from a source location to a destination.
- It denotes an instruction that operates on 8 bytes data size.
- movb:
Comparison Instruction:
- The “CMP” instruction sets condition code according to differences of their two operands.
- The working pattern is same as “SUB” instruction but it sets condition code without updating destinations.
- The zero flag is been set if two operands are equal.
- The ordering relations between operands could be determined using other flags.
- The “cmpl” instruction compares values that are double word.
Unary and Binary Operations:
- The details of unary operations includes:
- The single operand functions as both source as well as destination.
- It can either be a memory location or a register.
- The instruction “incq” causes 8 byte element on stack top to be incremented.
- The instruction “decq” causes 8 byte element on stack top to be decremented.
- The details of binary operations includes:
- The first operand denotes the source.
- The second operand works as both source as well as destination.
- The first operand can either be an immediate value, memory location or register.
- The second operand can either be a register or a memory location.
Corresponding C code:
// Define method decode
long decode(long x, long y, long z)
{
// Declare variable
long tmp = y - z;
//Return
return (tmp * x)^(tmp << 63 >> 63);
}
Explanation:
- The register “%rdi” has value for “x”, register “%rsi” has value for “y” and register “%rdx” has value for “z”.
- The details of assembly code is shown below:
- The instruction “subq %rdx, %rsi” performs operation “y - z” and stores result in register “%rsi”.
- The statement “long tmp = y - z” corresponds to C code.
- The instruction “imulq %rsi, %rdi” multiplies result of operation with “x” and stores result in register “%rdi”.
- The statement “(tmp * x)” corresponds to C code.
- The instruction “movq %rsi, %rax” moves value in register “%rsi” to register “%rax”.
- The instruction “salq $63, %rax” performs left shift on value in register “%rax”.
- The statement “tmp << 63” corresponds to C code.
- The instruction “sarq $63, %rax” performs right shift on value in register “%rax”.
- The statement “tmp << 63 >> 63” corresponds to C code.
- The instruction “xorq %rdi, %rax” performs “XOR” operation on values in registers “%rax” and “%rdi”.
- The statement “return (tmp * x)^(tmp << 63 >> 63)” corresponds to C statement.
- The instruction “subq %rdx, %rsi” performs operation “y - z” and stores result in register “%rsi”.
Want to see more full solutions like this?
Chapter 3 Solutions
Computer Systems: A Programmer's Perspective (3rd Edition)
Additional Engineering Textbook Solutions
Database Concepts (8th Edition)
Degarmo's Materials And Processes In Manufacturing
Starting Out with C++: Early Objects (9th Edition)
Starting Out with C++ from Control Structures to Objects (9th Edition)
Starting Out with Java: From Control Structures through Data Structures (4th Edition) (What's New in Computer Science)
Java: An Introduction to Problem Solving and Programming (8th Edition)
- 2. Jane, Jill, and Jenny have formed a band consisting of 3 instruments. (a) If each of them can play all 3 instruments, how many different arrangements are possible? (b) What if Jane can play all 3 instruments, but Jill and Jenny can each play only piano and drums?arrow_forward4. A person has 9 friends, of whom 5 will be invited to a party. (a) How many choices are there if 2 of the friends are feuding and will not attend together? (b) How many choices if 2 of the friends will only attend together?arrow_forward5. There are 3 people in a room, and we are curious whether two of them have their birthday in the same month. We record the triplet that describes the month of birthday for each person. E.g., (Oct, Jan, Jul) is one possible triplet/outcome. (Since each month applies to a specific person, (Oct, Jan, Jul) is not the same as (Jan, Jul, Oct), so order is important.) (a) How many possible outcomes are there? (b) In how many of these outcomes do all three people have their birthday in different months? (c) In how many of these outcomes do at least two people have their birthday in the same month?arrow_forward
- 1. We have 8 blocks, of which 4 are green, 2 are red, 1 is white, and 1 is black. If we put the blocks in a line, how many arrangements are possible?arrow_forward3. (a) In how many ways can 3 cats and 3 dogs sit in a row? (b) In how many ways can 3 cats and 3 dogs sit in a row if the cats and the dogs are each to sit together? (c) In how many ways if only the cats must sit together? (d) In how many ways if no two animals of the same type are allowed to sit together?arrow_forwardthe gate level and the transistor level for a certain circuit are given below. Select from the given options for each space the variable name such that the transistor level design matches the gate level design. $1 => S2= M- W $3= |S4 = $5= J -R S1. S2- R S5 S3 S4arrow_forward
- Given that W, L. and tox are scaled with a scaling factor J, Vth and Vad are scaled with a scaling factor P Taking these scaling factors into consideration what is the scaling factor for metric X that equals loN C where loN is the on current of the transistor and C is the gate capacitance of the transistor. O p²/j2 O 1/P O J/P O 1/J2 O P/J2 O 1/(JP) O 1/p2 O P/J O 1/J2 O None of the other optionsarrow_forwardpython Tasks 7 • Task 1: Add a new class 'Moon` that inherits from `CelestialBody' and has an additional attribute `parent_planet. Write a method to display the moon's details along with its parent planet. • Task 2: Modify the 'Galaxy' class to calculate the total mass of all celestial bodies it contains. Implement a method `total_mass() for this purpose. • Task 3: Create a class 'BlackHole` that inherits from `Celestial Body` and adds properties like event_horizon_radius' and 'spins. Implement a method to display black hole details. • Task 4: Develop a simulation where a user can create multiple galaxies and display their celestial bodies in a hierarchical format using inheritance. 10/06/1446arrow_forwardPlease solve q2arrow_forward
- self.sAge = age super().__init_("Rahul", age) # inheriting the properties of def displayInfo(self): print(self.sName, self.sAge) obj = Student("Mayank", 23) obj.display() obj.displayInfo() parent class we created the object 'obj' of the child class. When we called the constructor of the child class 'Student', it initialized the data members to the values passed during the object creation. Then using the super() function, we invoked the constructor of the parent class. Asst.L. Manar Hamza Bashaa 2024-2arrow_forwardObject-oriented programming tion defines a new type of that class. Lec 7: Static Members Object-Oriented Programming Assignment: Create a class named StudentRecords and add a static variable named records, which is a list shared among all objects of the class. Then add a method named add_record that takes a student's name as input and appends it to the shared records list.arrow_forwardpython Tasks 6 • Task 1: Develop a Student Profile class with private attributes for `name` and __ grades` (a list of grades), and methods to add a grade and calculate the average. • Task 2: Create a `Playlist class that stores song titles in a private list, with methods to add a song, remove a song, and display the current playlist. • Task 3: Implement a `Temperature Sensor class with a private `_temperature attribute, and methods to set and get the temperature in both Celsius and Fahrenheit. • Task 4: Build a Library Book class with private attributes for the title and availability status; include methods to check out, return, and display the book's availability ⚫Task 5(homework): Create a 'Counter` class with a private _ count attribute, and include get_count()` and `set_count(value)` methods to access and modify it. Ensure set_count only accepts non-negative integers, and add increment()', decrement(), and reset()` methods for control.arrow_forward
- Computer Networking: A Top-Down Approach (7th Edi...Computer EngineeringISBN:9780133594140Author:James Kurose, Keith RossPublisher:PEARSONComputer Organization and Design MIPS Edition, Fi...Computer EngineeringISBN:9780124077263Author:David A. Patterson, John L. HennessyPublisher:Elsevier ScienceNetwork+ Guide to Networks (MindTap Course List)Computer EngineeringISBN:9781337569330Author:Jill West, Tamara Dean, Jean AndrewsPublisher:Cengage Learning
- Concepts of Database ManagementComputer EngineeringISBN:9781337093422Author:Joy L. Starks, Philip J. Pratt, Mary Z. LastPublisher:Cengage LearningPrelude to ProgrammingComputer EngineeringISBN:9780133750423Author:VENIT, StewartPublisher:Pearson EducationSc Business Data Communications and Networking, T...Computer EngineeringISBN:9781119368830Author:FITZGERALDPublisher:WILEY