Shift Instructions:
Shift instructions are used to shift the bits of a binary number either left or right. They are commonly used in digital circuits and assembly language programming for tasks such as multiplication and division by powers of 2, as well as bit manipulation.
Example: Logical Shift Left (LSL) Instruction
Suppose we have a binary number 10101010
, and we want to perform a logical shift left by 2 positions:
Original number: 10101010
Shifted left by 2: 10101000
Subroutine Call and Return Instructions:
Subroutine call and return instructions are used to call and return from subroutines or functions. When a subroutine is called, the program execution jumps to the subroutine’s address and starts executing its instructions. Once the subroutine is complete, the program returns to the instruction immediately after the subroutine call.
Example: Subroutine Call and Return
Main Program:
1. CALL subroutine
2. Continue execution
Subroutine:
1. Perform subroutine tasks
2. Return to the main program
After subroutine return:
3. Continue execution after the subroutine call
Addressing Modes:
Addressing modes specify how the operands of an instruction are located or determined. Two common addressing modes are indirect addressing and index addressing.
Indirect Addressing:
In indirect addressing, the operand of an instruction is a memory address, and the actual operand value is stored in the memory location pointed to by that address.
Example Instruction: LOAD R1, (A)
Diagram:
Instruction: LOAD R1, (A)
Operand: (A)
Address: A
Value at A: 1000 (Assuming A contains the memory address where the operand is stored)
Index Addressing:
In index addressing, the operand of an instruction is a memory address, and the actual operand value is stored in the memory location calculated by adding an index value to that address.
Example Instruction: LOAD R1, A + X
Diagram:
Instruction: LOAD R1, A + X
Operand: A + X
Address: A
Index: X
Value at A: 1000 (Assuming A contains the base memory address)
Index Value: 10 (Assuming X contains the index value)
Effective Address: 1000 + 10 = 1010
Value at Effective Address: 0110
In index addressing, the effective address is calculated by adding the index value to the base address, and the operand value is fetched from that memory location.