Assembly Language Programming - CS401 Power Point Slides Lecture 08.ppt

27
CS-401 Computer Architecture & Assembly Language Programming Lecture-8 Addressing Modes Branching

description

Assembly Language Programming - CS401 Power Point Slides Lecture 08

Transcript of Assembly Language Programming - CS401 Power Point Slides Lecture 08.ppt

  • CS-401Computer Architecture & Assembly Language ProgrammingLecture-8Addressing Modes Branching

  • In the Last LectureWe discussed memory addresses

  • Addressing ModesOffset Addressing

    ; Default segment = dsmov ax, [0x1234]; word movemov ah, [0x1234]; byte movemov byte[0x1234], 10mov word[0x1234], 10

  • Addressing ModesBase Addressing

    ; Default segment = dsmov ax, [bx]mov byte [bx], 10mov word [bx], 10; Default segment = ssmov ax, [bp]mov byte [bp], 10mov word [bp], 10

  • Addressing ModesIndex Addressing

    ; Default segment = dsmov ax, [si]mov byte [di], 10mov word [si], 10

  • Addressing Modes

    Base + Offset Addressing

    ; Default segment = dsmov ax, [bx+0x0100]mov byte [bx+0x100], 10mov word [bx+0x100], 10

    ; Default segment = ssmov byte [bp+0x10], 10mov word [bp+0x100], 10

  • Addressing Modes

    Index + Offset Addressing

    ; Default segment = dsmov ax, [si+0x0100]mov byte [di+0x100], 10mov word [di+0x100], 10mov byte [si+0x10], 10mov word [si+0x0100], 10

  • Addressing Modes

    Base + Index Addressing

    ; Default segment = dsmov ax, [bx+si]mov byte [bx+si], 10mov word [bx+di], 10

    ; Default segment = ssmov byte [bp+si], 10mov word [bp+di], 10

  • Addressing Modes

    Base + Index + Offset Addressing

    ; Default segment = dsmov ax, [bx+si+0x0100]mov byte [bx+si+0x0100], 10mov word [bx+di+0x0100], 10

    ; Default segment = ssmov byte [bp+si+0x0100], 10mov word [bp+di+0x0100], 10

  • Addressing Modes General Form

    [base + index + offset]

  • Illegal AddressingExample

    moval, [bl] ; Address cannot be 8-bit; has to be 16-bit

  • Illegal addressing

  • Illegal AddressingExample

    movax, [bx-si] ; Registers cannot be ; subtracted

  • Illegal AddressingExample

    movax, [bx+bp] ; Two bases cannot be ; used in one addressing

  • Illegal AddressingExample

    movax, [si+di] ; Two indices cannot be ; used in one addressing

  • Physical Address Calculation[cs:bx+si+0x0700]BX = 0x0100SI = 0x0200CS = 0x1000Effective Address =EA= Base + Index + OffsetEA= 0x0100 + 0x0200 + 0x0700 = 0x0A00Physical Address = Segment*0x10+EA = 0x1000*0x10+0xA00 = 0x10A00

  • Physical Address Calculation[bx+0x7000]BX = 0x9100DS = 0x1500Effective Address =EA= Base + Index + Offset = 0x9100 + 0x0000 + 0x07000 = 0x10100; 17-bits ! = 0x0100; Segment wrap ; around

  • Physical Address Calculation[bx+0x7000]BX = 0x9100DS = 0x1500Effective Address =EA= 0x0100; Segment wrap ; aroundPhysical Address= Segment*0x10+EA= 0x1500*0x10+0x100= 0x15100

  • Physical Address Calculation[bx+0x0100]BX = 0x0100DS = 0xFFF0Effective Address = EA= Base + Index + Offset = 0x0100 + 0x0000 + 0x0100 = 0x0200Physical Address = Segment*0x10+EA= 0xFFF0*0x10+0x0200= 0x100100 ; 21-bits != 0x00100 ; memory wrap ; around

  • CMP

    Subtracts the source (src) from destination (dest) Does not change contents of src or dest.Affects AF,CF,OF,PF,SF and ZF.The relation is of destination to source.

  • Conditional Jumpsjz;jump if zero[ZF=1]Jnz ;jump if not zero[ZF=0]

    Examplecmpax, bx jzlabel1

  • Conditional Jumpsje;jump if equal[same as jz]Jne ;jump if not equal[same as jnz]

  • Conditional Jumpsjc;jump if carry[CF=1]Jnc ;jump if not carry[CF=0]

    Exampleaddax, bx jclabel1 subax, bx jnclabel1

  • Conditional Jumpsja;jump if above[ZF = 0 and CF=0]jb ;jump if below[CF=1]unsigned integers

    jl;jump if less[SF OF=0]jg ;jump if greater[ZF = 0 and SF=OF]signed integers

  • Conditional Jumpsjae;jump if above or equaljbe ;jump if below or equaljge ;jump if greater or equaljle ;jump if less or equaljno ;Jump if not overflowjns ; Jump if not sign

  • Renamed Conditional JumpsJNBE JAJNB JAEJNAE JBJNA JBEJZ JEJNLE JGJNL JGEJNGE JLJNG JLEJNZ JNEJPO JNPJPE JP

  • Conditional Jumpsjcxz;jump if the cx register is zero [cx=0]