Addressing Modes The methods used in machine instructions to identify the location of an operand. ITCS 3181 Logic and Computer Systems 2015 B. Wilkinson slides3.ppt Modification date: March 16, 2015 1 General details Almost always, one operand is held in a register. Addressing mode refers to the other operand. Various addressing modes provided for different purposes. Effective address – the actual address of the operand after all address computations of the addressing mode have been performed. In assembly language, different notations are used to specify addressing mode. 2 Size of data transfer Memory organized as set of bytes (8 bits). A 32-bit processor would have 32-bit registers. May be several sizes of transfer allowed: For 8 bit transfers -- from memory to least significant 8 bits of register or vice versa. 32 bits from four consecutive memory locations to full 32 bits of register or vice versa. 3 Size of data transfer Size of transfer needs to be specified. In assembly language, different operation mnemonics or different notations used to specify size of transfer. Example ADD means add 32 bit numbers ADDB means add 8 bit numbers 4 Fundamental Addressing Modes • Direct Addressing (also called Absolute Addressing) • Immediate Addressing • Register (Direct) Addressing • Register Indirect Addressing 5 Direct (or Absolute) Addressing The operand is in memory and the memory address of the operand is held in instruction: Instruction O peratio n Memo ry add ress Memo ry location Op erand This was the method used to describe instruction formats previously. 6 Direct (Absolute) Addressing Example LD R2,[100] ;R2=contents of memory with address 100 Means a comment Processor Instruction LD 2 100 Registers Memory 100 R2 7 Another Direct (Absolute) Addressing Example ST [100],R2 ;memory whose address is 100 = R2 Processor Instruction ST 2 100 Registers Memory 100 R2 Mnemonic for LD and ST instruction may be MOV (move) depending upon manufacturer’s notation, see later 8 Indicating size of data transfer Using a mnemonic - example LD means load 32 bit number to register ST store 32 bit number to memory LB means load 8 bit number to register SB store 8 bit number to memory Size may be indicated in other ways. 9 Immediate Addressing The operand is held in the instruction: Instruction Operation Operand i.e. immediately available at end of instruction 10 Immediate Addressing Example MOV R2,123 ;R2 = 123 Processor Instruction MOV 2 123 Registers R2 11 Immediate addressing used in compiled code Useful for constants. For example: High level code Assembly language statements int x = 123; MOV R1,123 a = b + 34; ADD R3, R4, 34 12 Register Direct Addressing The operand is held in a register which is specified in instruction. Instruction O peratio n Reg ister n o. Register Op erand 13 Register (direct) Addressing Example MOV R3, R2 ;R3 = R2 Processor Instruction MOV 3 2 Registers R3 R2 14 Register direct addressing used in compiled code Useful for integer variables. For example: High level code Assembly language statements x = y; MOV R1,R2 a = b + c; ADD R3, R4, R5 15 Register Indirect Addressing Operand held in memory. Address of operand location held in a register that is specified in instruction. Instru ction O peratio n Reg ister n o. Reg ister Memo ry add ress Memo ry location Op erand Useful for pointers and accessing different memory locations such as list of consecutive locations. Contents of register can be incremented after each access to point to the next location. 16 Register Indirect Addressing Example LD R3,[R2] ;R3=contents of memory, address in R2 [ ] read as contents of memory Processor Instruction LD 3 Registers Memory 120 Transfer Points to R3 R2 2 Points to Points to 120 In this example, R2 holds the number 120 For clarity here and later, omitted that memory transfer has 32 bits (4 consecutive bytes) if 32 bit registers. 17 Example of Register indirect addressing used in compiled code In C, for pointers. High level code Assembly language statements int *b; int a; // ptr, a pointer, say using register R1 // a, integer say in memory location 120 b = &a; // b = address of a b MOV R1,120 120 a 120 *b = 123; // location pointed by b = 123 ST [R1],123 18 Register Indirect Addressing plus Offset Similar to register indirect addressing except an offset held in the instruction is added to register contents to form the effective address: Instruction Operation Register no. Address Register Offset + Operand Memory location 19 Register Indirect Addressing Plus Offset Example LD R3,100[R2] ;R3=contents of memory, address ;in R2 + 100 Processor Instruction LD 3 Registers Memory 220 2 100 Points to Transfer Points to In this example R2 holds the number 120 R3 R2 120 + 20 Register Indirect Addressing Variation Index Register Addressing Register indirect addressing where register seen as an “index” into a list (one dimensional array). Register holds number of locations from starting point (first item in list). Starting point given in instruction. 21 Index Register Addressing Example char a[N]; int x, i; Memory x = a[i]; C code i R2 100 Instruction 3 2 1 0 a[i] Assembly language LB R1,100[R2] a[0] Load byte Here, compiler uses R1 for x, R2 for i and starting address for array a is location 100. a[] assumed character array. If a[] is an integer array, would use LD and need to multiply index by 4. 22 Implied Addressing Some operations have an implicit location for the operand and its address need not be specified. We will come across such operations later. 23 Specifying addressing mode in machine instruction Can be specified: • Within operation field (or is implied in operation) or • In a separate mode field 24 Addressing Mode Specified in Separate Field Instruction Operation Addressing mode Actual encoding can be more complex that this. 25 Size of Transfer Specified in Separate Field Instruction Operation Size of transfer Again, this detail is not shown in the following. Actual encoding can be much more complex that this (e.g. Intel processors highly complex). 26 Questions 27