Upload
mohammad-bilal-mirza
View
111
Download
9
Embed Size (px)
DESCRIPTION
Assembly Language Programming - CS401 Power Point Slides Lecture 08
Citation preview
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]