Dr.
Hanal ABUZANAT
                     1
         There are many addressing modes, but the most
          common are easy to master and represent most
          instructions in most programs.
          the most common addressing modes:
          ◦   Register addressing
          ◦   immediate addressing
          ◦   direct addressing
          ◦   simple forms of indirect addressing
          ◦   Stack addressing is also used with
               the PUSH and POP instructions
               as a way to link a program to its procedures or functions.
           Program flow instructions are either:
          ◦ unconditional or conditional.
          Conditional program flow instructions are the “if”
          statements of assembly language.
                                                                                                  2
Brey: The Intel Microprocessors, 7e             Dr. Hanal ABUZANT, An-Najah national university
     are presents with the MOV instruction because it is
      the most common instruction in a program.
      MOV really moves nothing.
     MOV copies the source into the destination.
                                                                                        3
Brey: The Intel Microprocessors, 7e   Dr. Hanal ABUZANT, An-Najah national university
             copies the second operand (source) to the first
              operand (destination).
             the source operand can be an immediate value,
              general-purpose register or memory location.
             the destination register can be a general-purpose
              register, or memory location.
             both operands must be the same size, which can
              be a byte or a word.
                                                                                          4
Brey: The Intel Microprocessors, 7e     Dr. Hanal ABUZANT, An-Najah national university
             these types of operands are supported:
              MOV          REG, memory
              MOV          memory, REG
              MOV          REG, REG
              MOV          memory, immediate
              MOV          REG, immediate
             REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL,
              DI, SI, BP, SP.
              memory: [BX], [BX+SI+7], variable, etc...
              immediate: 5, -24, 3Fh, 10001101b, etc...
                                                                                                 5
Brey: The Intel Microprocessors, 7e            Dr. Hanal ABUZANT, An-Najah national university
                                                                                        6
Brey: The Intel Microprocessors, 7e   Dr. Hanal ABUZANT, An-Najah national university
                Immediate
     MOV CX,1234H
     MOV BX,76AFH
                                         Register
                                                          MOV          AX,BX
                                                          MOV          AH,AL
                                      Immediate
                                                                                                7
Brey: The Intel Microprocessors, 7e           Dr. Hanal ABUZANT, An-Najah national university
     to access memory we can use these four registers:
      BX, SI, DI, BP.
     combining these registers inside [ ] symbols, we
      can get different memory locations.
     these combinations are supported (addressing
      modes):                     [SI]
                                       [BX + SI]                                     [BX + SI + d8]
                                                      [DI]
                                       [BX + DI]                                     [BX + DI + d8]
                                                      d16 (variable
D8: 8 bit signed immediate             [BP + SI]                                     [BP + SI + d8]
                                                      offset only)
displacement (ex: 22, 55h,-1, etc..)   [BP + DI]                                     [BP + DI + d8]
                                                      [BX]
d16:16 bit signed immediate
displacement (ex: 300, 5517h,-259,
etc..).                                [SI + d8]      [BX + SI + d16]
                                                                                     [SI + d16]
                                       [DI + d8]      [BX + DI + d16]
                                                                                     [DI + d16]
                                       [BP + d8]      [BP + SI + d16]
                                                                                     [BP + d16]
                                       [BX + d8]      [BP + DI + d16]
                                                                                     [BX + d16]
                                                                                                      8
Brey: The Intel Microprocessors, 7e                Dr. Hanal ABUZANT, An-Najah national university
•you can form all valid combinations by taking only one item from each column or
skipping the column by not taking anything from it.
•as you see BX and BP never go together.
•SI and DI also don't go together.
•here are an examples of a valid addressing modes:
[BX+5] , [BX+SI] , [DI+BX-4]
                                                                                                 9
Brey: The Intel Microprocessors, 7e            Dr. Hanal ABUZANT, An-Najah national university
     by default DS segment register is used for all
      modes except those with BP register, for these SS
      segment register is used.
     Ex: let's assume that: DS = 100, BX = 30, SI = 70.
     The following addressing mode: [BX + SI] + 25
      is calculated by processor to this physical address:
      100 * 16 + 30 + 70 + 25 = 1725.
                                             In Decimal.
     MOV AX, WORD PTR [array]              You must do
                                                                              it in hex
             16bit memory             offset
                  data
                                                                                                 10
Brey: The Intel Microprocessors, 7e            Dr. Hanal ABUZANT, An-Najah national university
     the value in segment register (CS, DS, SS, ES) is
      called a segment.
     the value in memory addressing register (BX, SI, DI,
      BP) is called an offset.
EXample
     Let DS contains value 1234h
     SI contains the value 7890h
     it can be also recorded as 1234:7890.
     The physical address will be:
                      ◦ 1234h * 10h + 7890h = 19BD0h.
                                                                                             11
Brey: The Intel Microprocessors, 7e        Dr. Hanal ABUZANT, An-Najah national university
Figure 3–5 The operation of the MOV AL,[1234H] instruction when DS=1000H .
• This instruction transfers a copy contents of
  memory location 11234H into AL.
    – the effective address is formed by adding
      1234H (the offset address) and 10000H
      (the data segment address of 1000H times
      10H) in a system operating in the real mode
     The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,
     Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions                 Copyright ©2009 by Pearson Education, Inc.
     Architecture, Programming, and Interfacing, Eighth Edition                        Upper Saddle River, New Jersey 07458 • All rights reserved.
     Barry B. Brey
             Let DS contains value 1234h
             SI contains the value 7890h
             it can be also recorded as 1234:7890.
             The physical address will be:
              ◦ 1234h * 10h + 7890h = 19BD0h.
                                                                                        13
Brey: The Intel Microprocessors, 7e   Dr. Hanal ABUZANT, An-Najah national university
                                                                                        14
Brey: The Intel Microprocessors, 7e   Dr. Hanal ABUZANT, An-Najah national university
                                                                                        15
Brey: The Intel Microprocessors, 7e   Dr. Hanal ABUZANT, An-Najah national university
                                                                                        16
Brey: The Intel Microprocessors, 7e   Dr. Hanal ABUZANT, An-Najah national university
                                                                                        17
Brey: The Intel Microprocessors, 7e   Dr. Hanal ABUZANT, An-Najah national university
             .model small
             org 100h
         
         
             ; add your code here
         
             .data        ;num offset = 102h
             num dw 10,10b,10h,'A',65
               arr db 1,2,3,4,5
             .code
             mov ax,10
             mov ax,w.[10ch]
                                                                                           18
Brey: The Intel Microprocessors, 7e      Dr. Hanal ABUZANT, An-Najah national university
             mov ax, word ptr ali[0]
             mov al, b.array[1]
             mov bx, offset ali[0]
                                                                                          19
Brey: The Intel Microprocessors, 7e     Dr. Hanal ABUZANT, An-Najah national university
             org 100h
             .data
             array dw 4 dup(654h)
             ali db 29h,4,110b,'A','0'
             ;mm db 3 dup(?)
             ahmad db 'ahmad'
             .code
             mov si,3
             mov ax, word ptr ali[0]
             mov al, b.array[1]
             mov bx, offset ali[0]
             lea di, ali
             mov ax, word ptr [bx] ; ali[0]
             mov bl, ali[1]
             mov bh,0
             mov b.array[bx+si],bl
                                                                                                 20
Brey: The Intel Microprocessors, 7e            Dr. Hanal ABUZANT, An-Najah national university
                          .data
      array dw 4 dup(654h)
                                      Define data segment and store the
     ali db 29h,4,110b,'A','0'
                                      values of array, ali, ahmad inside it
           ;mm db 3 dup(?)
          ahmad db 'ahmad'
                         .code              Store in stack value 16bit
                    mov si,3
                   mov ax,10
                       push si         Store the value of BX to memory
                      push ax         Data segment has the same address
              mov [0fffch],bx                     of top stack
                        pop si
                       pop ax
             mov bx,[0fffch]           restore from stack value 16bitre
      mov ax, word ptr ali[0]
          mov al, b.array[1]
         mov bx, offset ali[0]
                                              As mov di, offset ali[0]
             mov cx, w.ali[1]
                     lea di, ali
mov ax, word ptr [bx] ; ali[0]
               mov bl, ali[1]
                    mov bh,0
                                                                                            21
Brey: The Intel Microprocessors, 7e       Dr. Hanal ABUZANT, An-Najah national university
        The stack plays an important role in all
         microprocessors.
         ◦ holds data temporarily and stores return addresses used
           by procedures
        Stack memory is LIFO (last-in, first-out) memory
         ◦ describes the way data are stored and removed from the
           stack
Brey: The Intel Microprocessors, 7e   Dr. Hanal ABUZANT, An-Najah national university
             Store and restore general register:
              ◦   PUSH AX
              ◦   PUSH EAX
              ◦   POP AX
              ◦   POP EAX
             Store and restore the flags
              ◦ PUSHF
              ◦ POPF
             Store and restore all registers:
             Pusha
             Popa
                                                                                         23
Brey: The Intel Microprocessors, 7e    Dr. Hanal ABUZANT, An-Najah national university
        Data are placed on the stack with a PUSH
         instruction; removed with a POP instruction.
        Stack memory is maintained by two registers:
         ◦ the stack pointer (SP or ESP)
         ◦ the stack segment register (SS)
        Whenever a word of data is pushed onto the
         stack, the high-order 8 bits are placed in the
         location addressed by SP – 1.
         ◦ low-order 8 bits are placed in the location addressed by
           SP – 2
Brey: The Intel Microprocessors, 7e    Dr. Hanal ABUZANT, An-Najah national university
        The SP is decremented by 2 so the next word is
         stored in the next available stack location.
         ◦ the SP/ESP register always points to an area of memory
           located within the stack segment.
        In protected mode operation, the SS register holds
         a selector that accesses a descriptor for the base
         address of the stack segment.
        When data are popped from the stack, the low-
         order 8 bits are removed from the location
         addressed by SP.
         ◦ high-order 8 bits are removed; the SP register is
           incremented by 2
Brey: The Intel Microprocessors, 7e    Dr. Hanal ABUZANT, An-Najah national university
             The SS (stack segment) and the SP are added
              to form an address in the stack.
              The stack is an area of memory that
              functions as a last-in, first-out (LIFO)
              memory.
             LIFO means if a 1 followed by a 2 are placed
              on the stack the 2 comes out of the stack
              first, followed by the 1.
             PUSH: is used to store data on the stack
             POP: is used to remove data from the stack
              Push and pop for words or doubleword
                                                                                        26
Brey: The Intel Microprocessors, 7e   Dr. Hanal ABUZANT, An-Najah national university
                                                                                        27
Brey: The Intel Microprocessors, 7e   Dr. Hanal ABUZANT, An-Najah national university
                                                                                        28
Brey: The Intel Microprocessors, 7e   Dr. Hanal ABUZANT, An-Najah national university
                                         The old value of SP
                                      The new value of SP= SP-2
                                                                                                         29
Brey: The Intel Microprocessors, 7e                    Dr. Hanal ABUZANT, An-Najah national university
                                      The new value of SP=sp+2
                                                                    The old value of SP
                                                                                                              30
Brey: The Intel Microprocessors, 7e                         Dr. Hanal ABUZANT, An-Najah national university
           Required
         instructions
                                                                                        31
Brey: The Intel Microprocessors, 7e   Dr. Hanal ABUZANT, An-Najah national university
          org 100h
          ;jmp start
          .data
          num db 12h,25h,23
          n dd 12345678h
          nam db 'a','b','c','ahmad’
          .code
          ;start:
          mov bx,0A10h
          mov ax,11
          push ax
          mov cx,1011H
          push cx
          mov ax,0
          pop ax
          mov ax, w.[num+1]
          MOV w.num,5
          mov bh, num
          mov bx, offset num
          mov dx, [n+1]
          mov cl, nam[3]
          mov cl, nam[4]
          mov cl, nam[5]
          mov dl, nam[BX+6]
                                                                                          32
Brey: The Intel Microprocessors, 7e     Dr. Hanal ABUZANT, An-Najah national university