lecture 2 presented by dr. shazzad hosain asst. prof. eecs, nsu

16
Lecture 2 Presented By Dr. Shazzad Hosain Asst. Prof. EECS, NSU

Upload: bridget-berry

Post on 17-Dec-2015

221 views

Category:

Documents


4 download

TRANSCRIPT

Lecture 2

Presented ByDr. Shazzad Hosain

Asst. Prof. EECS, NSU

Road Map

• Real Mode Memory Addressing• Array, Loop and Accessing Memory

Real Mode Memory Addressing• The first 1MB memory is Real memory or the

Conventional memory

16 bit Segment registers

***

Segment 1

Segment 2

Segment n

0000hCS

8000hDS

A000hSS

1MB

offset

1. 1 MB requires 20 bit address2. Each segment is 64 KB3. Offset address is 16 bit or 2 byte4. Actual address = segment address + offset address

Real Mode Memory Addressing

• Real mode operation allows to address 1MB of memory space – even for the Pentium microprocessor

• This first 1MB memory is called the real memory or the conventional memory

• A combination of segment and offset address access the real memory

• Segment registers contains the beginning address of any 64KB memory segment

• The offset address selects the any location within the 64KB memory space

Segment Plus Offset Determines Address

From Intel Microprocessor

To get the real address1. Pad 0H at the end of segment register2. Add the offset value

1. Since each segment is 64 K, the offset address can take maximum of FFFFH

2. Once, the beginning address is found in segment registers, ending address is calculated by adding FFFFH with the value of segment register after padding 0H after it.

10000H F000H1F000H

CS = 1000HOffset = F000H

12340H 245FH1479FH

DS = 1234HOffset = 245FH

Default Segment and Offset Registers

1. If CS = 1400H and IP/EIP = 1200 H2. The microprocessor access instruction from

14000 H+ 1200H = 15200H.

Figure 2-4: A memory system showing the placement of four memory segments

Suppose1. 1000H bytes of code2. 190H bytes of data3. 200H bytes of stack

Figure 2-5

Allowsrelocation

Road Map

• Real Mode Memory Addressing• Array, Loop and Accessing Memory

Array, Loop and Accessing Memory

DATA DW 50 ; DATA is a word with value 50DATA1 DW 50 DUP (?) ; array of 50 uninitialized words DATA2 DW 50 DUP (0) ; array of 50 words initialized with 0

50DATA

DATA1

DATA20 1 2 3 490 0 0 0 0

MOV CX, 10 ; loop countXYZ:

; statements; statementsLOOP XYZ

MOV AX, 1020hMOV AX, [1020h]MOV [AX], 20

AX

1020h1021h

0000h0001h

1021h

Accessing memory

Example Program 1

.MODEL SMALL

.DATADATAS DB 50 DUP (?) ; setup array of 50 bytes

.CODE ; start of code segment

.STARTUP ; start of program

MOV AX, 1MOV CX, 50 ; load counter with 50MOV BX, OFFSET DATAS ; address of DATAS array

AGAIN:MOV [BX], AX ; save values to array positionsINC AX ; increment AX to next valuesINC BX ; increment BX to next elementsLOOP AGAIN ; repeat 50 times.EXIT ; exit to DOSEND ; end program

Write a program that will initialize 50 bytes array with values 1 to 50

1 2 3 4 5 500 1 2 49

Example Program 2

.MODEL SMALL

.DATADATAS DB 50 DUP (?) ; setup array of 50 bytes

.CODE ; start of code segment

.STARTUP ; start of program

MOV AX, 1MOV CX, 50 ; load counter with 50MOV BX, OFFSET DATAS ; address of DATAS array

AGAIN:MOV [BX], AX ; save values to array positionsINC AX ; increment AX to next valuesINC BX ; increment BX to next elementsLOOP AGAIN ; repeat 50 times.EXIT ; exit to DOSEND ; end program

Write a program that will initialize 50 bytes array in the following form

50 49 47 10 1 2 49

50

DEC decrement

Example Program 2, Alternate Way

.MODEL SMALL

.DATADATAS DB 50 DUP (?) ; setup array of 50 bytes

.CODE ; start of code segment

.STARTUP ; start of program

MOV AX, 1MOV DI, 49MOV CX, 50 ; load counter with 50MOV BX, OFFSET DATAS ; address of DATAS array

AGAIN:MOV [BX+DI], AX ; save values to array positionsINC AX ; increment AX to next valuesDEC DI ; decrement DILOOP AGAIN ; repeat 50 times.EXIT ; exit to DOSEND ; end program

Write a program that will initialize 50 bytes array in the following form

50 49 47 10 1 2 49

Example 3Move array element 10H into array element 20H

**** ***** ***0 1 2 16 32

.MODEL SMALL

.DATAArray DB 16 DUP (?) ; setup array

DB 29HDB 30 DUP (?).CODE.STARTUP ; start of program

MOV BX, OFFSET ARRAY ; address of ARRAYMOV DI, 10H ; address element 10HMOV AL, [BX + DI] ; get element 10HMOV DI, 20H ; address element 20HMOV [BX+DI], AL ; save in element 20H.EXIT ; exit to DOSEND ; end program

****0 1 2 15

29H

16 17 32

****

Example 3-7: Intel Microprocessors - by Brey

ARRAY

Example 3, Alternate WayMove array element 10H into array element 20H

****0 1 2 15

29H

16 17 32

****

Example: 3-8, Brey

ARRAY

DATA Addressing

Modes: Figure 3-2: by Brey

References

• Section 2-2, Intel Microprocessors – by Brey• Ch 3, Intel Microprocessors – by Brey• Ch 6, 10 Assembly Language Programming –

by Charls Marut