Presentation is loading. Please wait.

Presentation is loading. Please wait.

Addressing Modes & Assembler Directives. Addressing Modes in Microprocessor 8086/8088 The different ways in which a processor can access data are called.

Similar presentations


Presentation on theme: "Addressing Modes & Assembler Directives. Addressing Modes in Microprocessor 8086/8088 The different ways in which a processor can access data are called."— Presentation transcript:

1 Addressing Modes & Assembler Directives

2 Addressing Modes in Microprocessor 8086/8088 The different ways in which a processor can access data are called “Addressing Modes”. Types of Addressing Modes: (1)Data Addressing Modes (2)Program-Memory Addressing Modes (3)Stack-Memory Addressing Modes

3 An addressing mode means the method by which an operand can be specified in a register or a memory location 8086/8088 provide a seven Addressing Modes: (1)Register Addressing (2)Immediate Addressing (3)Direct Addressing (4)Register Indirect Addressing (5)Base–Plus–Index Addressing (6)Register Relative Addressing (7)Base Relative–Plus–Index Addressing 1- Data Addressing Modes in Microprocessor 8086/8088

4 8-bit OP CODEOPERAND 1 byte 1 to 2 byte An opcode is a short of“operation code” An opcede is a singe instruction can be executed by the CPU. In machine language it is a binary or hexadecimal value such as B7 loaded into the instruction register. In assembly language mnemonic form an opcode is a command such asMOV or ADD or JMP. Example: MOV AX, 1000H; MOV is the opcode. ; AX (register) is an operand. Operands are manipulated by the opcode.In this example, the operands are the register AX and the value 1000H. Opcode and Operand in Microprocessor 8086/8088

5 Register Addressing Mode Transfers a copy of a byte or word from the source register or memory location to the destination register or memory location. Use of registers to hold the data to be manipulated Memory is not accessed when this addressing mode is executed Example: MOVBX, DX; copy the contents of DX into BX MOVES, AX ADDAL, BH MOV AL,CX ; copy the contents of AX into ES ; add the contents of BH to contents of AL ;its not allowed Source and destination must have the same size.

6 Register Addressing Mode

7 Transfers the source, an immediate byte or word of data, into the destination register or memory location The source operand is a constant The operand comes immediately after the opcode For this reason, this addressing mode executes quickly Immediate addressing mode can be used to load information into any of the registers except the segment registers and flag registers. Immediate Addressing Mode

8 Example: MOVAX, 2550H MOV CX, 625 MOVBL, 40H ; move 2550H into AX ; load the decimal value 625 into CX ; load 40H into BL The data must first be moved to a general-purpose register and then to the segment register. Example: MOV AX, 2550H MOV DS, AX MOV DS, 0123H ; illegal instruction!

9 Immediate Addressing Mode

10 Direct Addressing Mode Moves a byte or word between a memory location and a register. The data is in some memory location(s) and the address of the data in memory comes immediately after the instruction This address is the offset address Example: MOV AX, [2400]; move contents of DS:2400H into AX The physical address is calculated by combining the contents of offset location 2400 with DS

11 Example: Find the physical address of the memory location and its contents after the execution of the following, assuming that DS = 1512H. AL, 3BH [3518], ALMOV Solution: First 3BHis copied into AL, Then in line two, the contents of AL are moved to logical address DS:3518 which is 1512:3518. Shifting DS left and adding it to the offset gives the physical address of 18638H (15120H + 3518H = 18638H). After the execution of the second instruction, the memory location with address 18638H will contain the value 3BH. Direct Addressing Mode

12

13 Register Indirect Addressing Mode Transfers a byte or word between a register and a memory location addressed by an index or base register The address of the memory location where the operand resides is held by a register The registers used for this purpose are SI, DI, and BX They must be combined with DS in order to generate the 20-bit physical address.

14 Register Indirect Addressing Mode Example: MOV AX, [BX] ;moves into AX the contents of the memory location pointed to by DS:BX,1000:1234 The physical address is calculated as 1000x10+1234=11234H The same rules apply when using register SI or DI. Example: MOV CL, [SI] MOV [DI], AH ; move contents of DS:SI into CL ; move contents of AH into DS:DI

15 Register Indirect Addressing Mode Example: Assume that DS = 1120, SI = 2498, and AX = 17FE Show the contents of memory locations after the execution of MOV [SI], AX; move contents of AX into DS:SI Solution: The contents of AX are moved into memory locations with logical address DS:SI and DS:SI + 1; The physical address starts at DS (shifted left) + SI = 13698. According to the little endian convention, Low address 13698H contains FE, the low byte, High address 13699H will contain 17, the high byte.

16 Register Indirect Addressing Mode

17 Base-Plus-Index Addressing Mode Transfers a byte or word between a register and the memory location addressed by a base register (BP or BX) plus an index register (DI or SI). Combining based and indexed addressing modes. One base register and one index register are used. Examples: MOV [BX+DI], CL; move contents of CL into DS:BX+DI Physical Address = DS x 10 + BX+DI MOV CH, [BX+SI]; move contents of the DS:BX+SI into CH Physical Address = DS x 10 + BX+SI MOV AH, [BP+DI]; move contents of the SS:BP+SI into AH Physical Address = SS x 10 + BP+DI MOV [BP+SI], AL; move contents of AL into SS:BP+SI Physical Address = SS x 10 + BP+SI

18 Base-Plus-Index Addressing Mode

19 Register Relative Addressing Mode Moves a byte or word between a register and the memory location addressed by an index or base register plus a displacement. The data in a segment of memory are addressed by adding the displacement to the contents of a base or an index register (BP, BX, DI, or SI). Examples: MOV AX, [BX+4]; move contents of DS:BX+4 into AX Physical Address = DS x 10 + BX+4 MOV CH, [SI+5]; move contents of the DS:SI+5 into CH Physical Address = DS x 10 +SI+5 MOV AH, [DI+1]; move contents of the DS:DI+1 into AH Physical Address = DS x 10 + DI+1 MOV [BP+2], AL; move contents of AL into SS:BP+2 Physical Address = SS x 10 + BP + 2

20 Register Relative Addressing Mode  Example:  Assume that DS = 4500, SS = 2000, BX = 2100, SI = 1486, DI = 8500, BP= 7814, and AX = 2512. Show the exact physical memory location where AX is stored in each of the following. All values are in hex. 1 MOV [BX+20], AX 2 MOV [SI+10], AX 3 MOV [DI+4], AX 4 MOV [BP+12], AX  Solution: Physical Address = segment reg. x 10 + (offset reg.) + displacement 1- DS:BX+20 2-DS:SI+10 3-DS:DI+4 4- SS:BP+12 location 47120 = (12) and 47121 = (25) location 46496 = (12) and 46497 = (25 ) location 4D504 = (12) and 4D505 = (25) location 27826 = (12) and 27827 = (25)

21 Register Relative Addressing Mode

22 Base Relative-Plus-Index Addressing Mode The base relative-plus-index addressing mode is similar to the base-plus-index addressing mode, but adds a displacement besides using a base register and an index register to form the memory address. This type of addressing mode often addresses a two-dimensional array of memory data. The data in a segment of memory are addressed by adding the displacement to the contents of a base and an index register (BP, BX, DI, or SI). Examples: MOV [BX+DI+1], AX; move contents of AX into DS:BX+DI+1 Physical Address = DS x 10 + BX+DI+1H MOV AX, [BX+SI+10]; move contents of the DS:BX+SI+10 into AX Physical Address = DS x 10 + BX+SI+10H

23 Base Relative-Plus-Index Addressing Mode MOV AH, [BP+DI+3]; move contents of the SS:BP+SI+3 into AH Physical Address = SS x 10 + BP+DI+3H MOV [BP+SI+6], AL; move contents of AL into SS:BP+SI+6 Physical Address = SS x 10 + BP+SI+6 MOV AX, FILE[BX+DI]; move contents of the DS:FILE+BX+DI into AX Physical Address = DS x 10 + BX+DI+FILE MOV LIST[BP+SI+4], DH ; move contents of DH into SS:LIST+BP+SI+4 Physical Address = SS x 10 +LIST+ BP+SI+4

24 Base Relative-Plus-Index Addressing Mode

25 Segment RegisterCSDSESSS Offset RegisterIPSI, DI, BX SP, BP Offset Registers for Various Segments The following Table provides a summary of the offset registers that can be used with the four segment registers of the 8086/8088.

26 2- Program-Memory Addressing Modes in Microprocessor 8086/8088 Program memory-addressing modes, used with the JMP and CALL instructions, consist of three distinct forms: 1- Direct Program Memory Addressing 2- Relative Program Memory Addressing 3- Indirect Program Memory Addressing These three addressing forms uses the JMP instruction to illustrate their operation.

27 3- Stack-Memory Addressing Modes in Microprocessor 8086/8088 The stack plays an important role in all microprocessors. It holds data temporarily and stores return addresses for procedures. The stack memory is a LIFO (last-in, first-out) memory, which describes the way that data are stored and removed from the stack. Data are placed onto the stack with a PUSH instruction and removed with a POP instruction. The CALL instruction also uses the stack to hold the return address for procedures and a RET (return) instruction to remove the return address from the stack.

28 Stack Addressing Operand is (implicitly) on top of stack e.g. ADDPop top two items from stack and add and push

29 Assembler directives and basic steps of ALP

30 ASSEMBLER DIRECTIVES ● Assembly language: low-level languages for programming computers, microprocessors, microcontrollers, and other IC ● Assembler Directive: a statement to give direction to the assembler to perform task of the assembly process.  control the organization of the program  provide necessary information to the assembler to understand ALPs and generate necessary machine codes  Indicate how an operand or a section of the program is to be processed by the assembler  Consists of two types of statements: instructions and directives  Instructions: translated to the machine code by the assembler  Directives are not translated to the machine codes

31 Important terms and rules ● SYMBOLS: to signify different components of the ALP (assembly Language Program)  Symbols consist of following characters:-  Upper case & lower case alphabets: A to Z; a to z  Digits: 0 to 9  Special characters: $, ?, @, _ (underscore)  No distinction between an uppercase and lowercase letter  A hexadecimal no. starting with A to F must begin with “0” (zero) ; otherwise will be taken as a symbol ● VARIABLE: these are symbols whose values can be varied while running a program  Names of variables: should be meaningful to make program maintenance easy  A variable can use: A to Z; a to z; 0 to 9; @; _ (underscore)  Digit can not be used as 1 st character of an Assembler variable ● CONSTANT: these are symbols whose values can not be varies while running a program  A numeric constant may be a binary, decimal or hexadecimal number.  Symbols B, D & H must be used at the end of a binary, decimal and hexadecimal number, respectively.

32 Important Assembler Directives of the 8086 Microprocessor ● Data declaration directives: DB, DW, DD, DQ, DT ● ASSUME ● END directives ● EQU Directive ● PROC ● ORG ● SEGMENT ● GROUP, INCLUDE, EVEN, ALIGN ● EXTRN, PUBLIC, ● TYPE, PTR, ● LENGTH, OFFSET ● NAME, LABEL, SHORT, GLOBAL

33 Data declaration directives 1. DB - The DB directive is used to declare a BYTE -2-BYTE variable - A BYTE is made up of 8 bits. ● examples:  PRICES DB 49H, 98H, 29H; Declare array of 3 bytes named PRICES and initialize them with specified values  TEMP DB 100 DUP (?); Set aside 100 bytes of storage in memory and give it the name TEMP. But leave the 100 bytes un-initialized 2. DW - The DW directive is used to declare a WORD type variable - A WORD occupies 16 bits or (2 BYTE). ● examples:  WORDS DW 1234H, 3456H; Declares an array of 2 words and initialize them with the specified values 3. DD - The DD directive is used to declare a DWORD - A DWORD double word is made up of 32 bits =2 Word's or 4 BYTE. ● examples:  ARRAY DD 25629261H; This will define a double word named ARRAY and initialize the double word with the specified value when the program is loaded into memory to be run. The low word, 9261H, will be put in memory at a lower address than the high word.

34 Data declaration directives (cont.) ● DQ (DEFINE QUADWORD) The DQ directive is used to tell the assembler to declare a variable 4 words in length or to reserve 4 words of storage in memory.  Example: BIG_NUMBER DQ 243598740192A92BH; This will declare a variable named BIG_NUMBER and initialize the 4 words set aside with the specified number when the program is loaded into memory to be run. ● DT (DEFINE TEN BYTES) The DT directive is used to tell the assembler to declare a variable, which is 10 bytes in length or to reserve 10 bytes of storage in memory.  Example: PACKED_BCD DT 11223344556677889900 This will declare an array named PACKED_BCD, which is 10 bytes in length. It will initialize the 10 bytes with the values 11, 22, 33, 44, 55, 66, 77, 88, 99, and 00 when the program is loaded into memory to be run. The statement RESULT DT 20H DUP (0) will declare an array of 20H blocks of 10 bytes each and initialize all 320 bytes to 00 when the program is loaded into memory to be run.

35 ASSUME DIRECTIVE ● ASSUME Directive - The ASSUME directive is used to tell the assembler that the name of the logical segment should be used for a specified segment. The 8086 works directly with only 4 physical segments: a Code segment, a data segment, a stack segment, and an extra segment. Example: ● ASSUME CS:CODE ;This tells the assembler that the logical segment named CODE contains the instruction statements for the program and should be treated as a code segment. ● ASSUME DS:DATA ;This tells the assembler that for any instruction which refers to a data in the data segment, data will found in the logical segment DATA.

36 End directive ● END - End Program ● ENDP - End Procedure ● ENDS - End Segment ● END – it signifies the end of the program module  The assembler will ignore any statement after an END directive ● ENDP - indicates the end of a procedure  Syntax: Procedure_name ENDP ● ENDS - indicates the end of a logical segment  Syntax: Segment_name ENDS

37 Equate (EQU) Directive ● EQU - This EQU directive is used to give a name to some value or to a symbol. Each time the assembler finds the name in the program, it will replace the name with the value or symbol you given to that name. ● Example:  FACTOR EQU 03H ; you has to write this statement at the starting of your program  later in the program you can use this as follows :  ADD AL, FACTOR ; When it codes this instruction the assembler will code it as ADDAL, 03H ;The advantage of using EQU in this manner is, if FACTOR is used many no of times in a program and you want to change the value, all you had to do is change the EQU statement at beginning, it will changes the rest of all.

38 PROC (Procedure) Directive ● PROC - The PROC directive is used to identify the start of a procedure. The term near or far is used to specify the type of the procedure. ● Example:  SMART PROC FAR ; This identifies that the start of a procedure named as SMART and instructs the assembler that the procedure is far.  SMART ENDP ; This PROC is used with ENDP to indicate the break of the procedure.

39 ORG (ORIGIN) ● ORG Changes the starting offset address of the data in the data segment. As an assembler assembles a section of a data declarations or instruction statements, it uses a location counter to keep track of how many bytes it is from the start of a segment at any time. ● The location counter is automatically set to 0000 when assembler starts reading a segment. ● The ORG directive allows you to set the location counter to a desired value at any point in the program. Example:  The statement ORG 2000H tells the assembler to set the location counter to 2000H.

40 SEGMENT ● SEGMENT directive : to indicate the start of a logical segment ● Syntax: Segment_name SEGMENT ● Additional terms are often added to a SEGMENT directive statement to indicate some special way in which we want the assembler to treat the segment. Example:  CODE SEGMENT WORD ; tells the assembler that we want the content of this segment located on the next available word (even address) when segments are combined and given absolute addresses.  Without this WORD addition, the segment will be located on the next available paragraph (16-byte) address, which might waste as much as 15 bytes of memory.  The statement CODE SEGMENT PUBLIC tells the assembler that the segment may be put together with other segments named CODE from other assembly modules when the modules are linked together.

41 GROUP, INCLUDE, EVEN, ALIGN ● GROUP - used to group the logical segments named after the directive into one logical group segment. ● INCLUDE - used to insert a block of source code from the named file into the current source module. ● EVEN - instructs the assembler to increment the location of the counter to the next even address if it is not already in the even address.  If the word is at even address 8086 can read a memory in 1 bus cycle. If the word starts at an odd address, the 8086 will take 2 bus cycles to get the data.  A series of words can be read much more quickly if they are at even address. When EVEN is used the location counter will simply incremented to next address and NOP instruction is inserted in that incremented location. ● ALIGN: Memory array is stored in word boundaries. Example:  ALIGN 2 means storing from an even address

42 EXTRN, PUBLIC ● EXTRN : used to tell the assembler that the name or labels following the directive are in some other assembly module.  For example, if you want to call a procedure, which in a program module assembled at a different time from that which contains the CALL instruction, you must tell the assembler that the procedure is external. The assembler will then put this information in the object code file so that the linker can connect the two modules together.  For a reference to externally named variable, you must specify the type of the variable, as in the statement EXTRN DIVISOR: WORD. The statement EXTRN DIVIDE: FAR tells the assembler that DIVIDE is a label of type FAR in another assembler module. Name or labels referred to as external in one module must be declared public with the PUBLIC directive in the module in which they are defined. ● PUBLIC - The PUBLIC directive is used to instruct the assembler that a specified name or label will be accessed from other modules. ● Example:  PUBLIC DIVISOR, DIVIDEND ;these two variables are public so these are available to all modules. If an instruction in a module refers to a variable in another assembly module, we can access that module by declaring as EXTRN directive.

43 TYPE, PTR(POINTER) ● TYPE - instructs the assembler to determine the type of a variable and determines the number of bytes specified to that variable. Example:  Byte type variable – assembler will give a value 1 Word type variable – assembler will give a value 2 Double word type variable – assembler will give a value 4 ADD BX, TYPE WORD_ ARRAY ; hear we want to increment BX to point to next word in an array of words. ● PTR (POINTER) : used to assign a specific type to a variable or a label. It is necessary to do this in any instruction where the type of the operand is not clear. Example:  INC [BX]; It will not know whether to increment the byte pointed to by BX. We use the PTR operator to clarify how we want the assembler to code the instruction.  INC BYTE PTR [BX] ; This statement tells the assembler that we want to increment the byte pointed to by BX.  INC WORD PTR [BX] ; This statement tells the assembler that we want to increment the word pointed to by BX. The PTR operator assigns the type specified before PTR to the variable specified after PTR.

44 LENGTH, OFFSET ● LENGTH : tells the assembler to determine the number of elements in some named data item, such as a string or an array. ● Example:  MOV CX, LENGTH STRING1; This will determine the number of elements in STRING1 and load it into CX. If the string was declared as a string of bytes, LENGTH will produce the number of bytes in the string. If the string was declared as a word string, LENGTH will produce the number of words in the string. ● OFFSET : tells the assembler to determine the offset or displacement of a named data item (variable), a procedure from the start of the segment, which contains it. ● Example:  MOV BX, OFFSET PRICES; It will determine the offset of the variable PRICES from the start of the segment in which PRICES is defined and will load this value into BX.

45 NAME, LABEL, SHORT, GLOBAL ● NAME : used to give a specific name to each assembly module when programs consisting of several modules are written. ● LABEL : As an assembler assembles a section of a data declarations or instruction statements, it uses a location counter to be keep track of how many bytes it is from the start of a segment at any time.  If the label is going to be used as the destination for a jump or a call, then the label must be specified as type near or type far. ● SHORT The SHORT operator is used to tell the assembler that only a 1 byte displacement is needed to code a jump instruction in the program. The destination must in the range of – 128 bytes to +127 bytes from the address of the instruction after the jump. Example: JMP SHORT NEARBY_LABEL ● GLOBAL (DECLARE SYMBOLS AS PUBLIC OR EXTRN) : can be used in place of a PUBLIC directive or in place of an EXTRN directive. For a name or symbol defined in the current assembly module, the GLOBAL directive is used to make the symbol available to other modules.  Example: GLOBAL DIVISOR This statement makes the variable DIVISOR public so that it can be accessed from other assembly modules. 

46 8086 Programming using Assembler Directives ● Basic structure of a program: Name_data segment SEGMENT Data declaration statement 1 : Data declaration statement n DATA ENDS Name_codeseg SEGMENT ASSUME CS:CODE, DS:DATA, ES:EXTRA, SS: STACK START: Program line 1 : Program line n Name_codeseg ENDS END START


Download ppt "Addressing Modes & Assembler Directives. Addressing Modes in Microprocessor 8086/8088 The different ways in which a processor can access data are called."

Similar presentations


Ads by Google