Chapter 4 Addressing modes

Slides:



Advertisements
Similar presentations
Chapter 4 Addressing modes CEG2400 Microcomputer Systems CEG2400 ch4 addressing modes v3a 1.
Advertisements

ARM versions ARM architecture has been extended over several versions.
1 Lecture 3: MIPS Instruction Set Today’s topic:  More MIPS instructions  Procedure call/return Reminder: Assignment 1 is on the class web-page (due.
Review of the MIPS Instruction Set Architecture. RISC Instruction Set Basics All operations on data apply to data in registers and typically change the.
Branches Two branch instructions:
1 ARM Movement Instructions u MOV Rd, ; updates N, Z, C Rd = u MVN Rd, ; Rd = 0xF..F EOR.
The 8051 Microcontroller and Embedded Systems
Embedded System Design Center Sai Kumar Devulapalli ARM7TDMI Microprocessor Load and store instruction.
COMP3221 lec-12-mem-II.1 Saeid Nooshabadi COMP 3221 Microprocessors and Embedded Systems Lecture 12: Memory Access - II
Elec2041 lec-11-mem-I.1 Saeid Nooshabadi COMP 3221 Microprocessors and Embedded Systems Lecture 11: Memory Access - I
Lecture 5 Sept 14 Goals: Chapter 2 continued MIPS assembly language instruction formats translating c into MIPS - examples.
Topics covered: ARM Instruction Set Architecture CSE 243: Introduction to Computer Architecture and Hardware/Software Interface.
8051 ASSEMBLY LANGUAGE PROGRAMMING
ARM Instructions I Prof. Taeweon Suh Computer Science Education Korea University.
Lecture 18 Last Lecture Today’s Topic Instruction formats
Topic 8: Data Transfer Instructions CSE 30: Computer Organization and Systems Programming Winter 2010 Prof. Ryan Kastner Dept. of Computer Science and.
Lecture 4: Advanced Instructions, Control, and Branching cont. EEN 312: Processors: Hardware, Software, and Interfacing Department of Electrical and Computer.
IT253: Computer Organization Lecture 4: Instruction Set Architecture Tonga Institute of Higher Education.
More on Assembly 1 CSE 2312 Computer Organization and Assembly Language Programming Vassilis Athitsos University of Texas at Arlington.
9/20/6Lecture 2 - Prog Model Architecture, Data Types and Addressing Modes.
Lecture 04: Instruction Set Principles Kai Bu
More on Assembly 1 CSE 2312 Computer Organization and Assembly Language Programming Vassilis Athitsos University of Texas at Arlington.
ARM-7 Assembly: Example Programs 1 CSE 2312 Computer Organization and Assembly Language Programming Vassilis Athitsos University of Texas at Arlington.
Lecture 6: Branching CS 2011 Fall 2014, Dr. Rozier.
Computer Organization Instructions Language of The Computer (MIPS) 2.
Assembly Variables: Registers Unlike HLL like C or Java, assembly cannot use variables – Why not? Keep Hardware Simple Assembly Operands are registers.
Intel Xscale® Assembly Language and C. The Intel Xscale® Programmer’s Model (1) (We will not be using the Thumb instruction set.) Memory Formats –We will.
Revision questions CENG2400 v.14b 1 CENG2400 Revision, Question 1 A system has an ARM processor with a 32-bit General Purpose Input Output (GPIO) module.
Writing Functions in Assembly
Chapter 15: Higher Level Constructs
Displacement (Indexed) Stack
ECE 3430 – Intro to Microcomputer Systems
ECE 3430 – Intro to Microcomputer Systems
Addressing Modes in Microprocessors
Data Transfers, Addressing, and Arithmetic
MIPS Instruction Set Advantages
Chapter 15: Higher Level Constructs
ECE 3430 – Intro to Microcomputer Systems
Assembly Language Programming of 8085
ARM Registers Register – internal CPU hardware device that stores binary data; can be accessed much more rapidly than a location in RAM ARM has.
ECE 3430 – Intro to Microcomputer Systems
The Cortex-M3/m4 Embedded Systems: Cortex-M3/M4 Instruction Sets
COMP2121: Microprocessors and Interfacing
Microprocessor and Assembly Language
RISC Concepts, MIPS ISA Logic Design Tutorial 8.
A Closer Look at Instruction Set Architectures
Microcomputer Programming
William Stallings Computer Organization and Architecture 8th Edition
Writing Functions in Assembly
The University of Adelaide, School of Computer Science
Assembly Lang. – Intel 8086 Addressing modes – 1
Computer Organization and Assembly Language (COAL)
CENG2400 Revision Q1a A system has an ARM processor with a 32-bit General Purpose Input Output (GPIO) module. Two on/off switches are connected to bit-3.
ARM Assembly Programming
Instructions - Type and Format
Chapter 15: Higher Level Constructs (C and assembly relation)
ECE232: Hardware Organization and Design
Instruction encoding We’ve already seen some important aspects of processor design. A datapath contains an ALU, registers and memory. Programmers and compilers.
68000 Architecture, Data Types and Addressing Modes
ARM Load/Store Instructions
Symbolic Instruction and Addressing
Lecture 06 Programming language.
Instruction encoding We’ve already seen some important aspects of processor design. A datapath contains an ALU, registers and memory. Programmers and compilers.
Microprocessor and Assembly Language
Overheads for Computers as Components 2nd ed.
8051 ASSEMBLY LANGUAGE PROGRAMMING
Branch instructions Branch : B{<cond>} label
Multiply Instructions
Introduction to Assembly Chapter 2
An Introduction to the ARM CORTEX M0+ Instructions
Presentation transcript:

Chapter 4 Addressing modes CEG2400 Microcomputer Systems CEG2400 ch4 addressing modes v7a

CEG2400 ch4 addressing modes v7a Objective In this lecture, you will learn some assembly operations for data transfer from CPU to memory / from memory to CPU CEG2400 ch4 addressing modes v7a

CEG2400 ch4 addressing modes v7a Overview Memory concept revision Data Transfer Instructions - LDR instruction (Load Address into Register) Ref: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0041c/Babbfdih.html Register-indirect addressing using load (LDR) / store (STR) Block copying CEG2400 ch4 addressing modes v7a

CEG2400 ch4 addressing modes v7a 1)Memory concept labels 32-bit Address (HEX) 8-bit data Program/Data Org 0000 0000 03 0000 0001 24 : TABLE1 0001 0000 12 0001 0001 3B 0001 0002 A4 0001 0003 34 0001 0004 B2 0001 0005 D2 TABLE2 0002 0000 0002 0001 6C Program Program code and data are saved in memory. They occupy different locations Four 8-bit data form a 32-bit word See appendix For big/little endian formats CEG2400 ch4 addressing modes v7a

CEG2400 ch4 addressing modes v7a 2) Data Transfer Instructions - LDR instruction (Load Address into Register) LDR r1, =adress_label It is a pseudo instruction (Combining several instructions) Details, see appendix for how it is actually implemented E.g. LDR r1, =TABLE1 If TABLE1 is at 0001 0000H, then r1 = 0001 0000H after the instruction is run. Similarity for r2 and TABLE 2. copy1 LDR r1, =TABLE1 ; r1 points to TABLE1 copy2 LDR r2, =TABLE2 ; r2 points to TABLE2 ……. TABLE1 …… ; <source of data> …… TABLE2 …… ; <destination of data> Ref: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0041c/Babbfdih.html CEG2400 ch4 addressing modes v7a

3) Register-indirect addressing using load (LDR) / store (STR) http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0041c/Babbfdih.html CEG2400 ch4 addressing modes v7a

How we can operate the data inside memory? In ARM architecture, data must place in register before performing basic operations You can’t perform operation directly to memory Data Data Register Register Memory Memory CEG2400 ch4 addressing modes v7a

Reason to use Load (LDR) / store (STR) Therefore, we need the operation to help us load the data from memory to register, and store the data from register to memory. CEG2400 ch4 addressing modes v7a

Data Transfer Instructions - single register load/store instructions Use a value in one register (called the base register) as a memory address [ ] and either loads the data value from that address into a destination register or stores the register value to memory (mem32[r1] means: r1 holds the address, mem32[r1] =data content): LDR r0, [r1] ; r0 := mem32[r1] ;(content in r1 is an address) STR r0, [r1] ; mem32[r1] := r0 This is called register-indirect addressing LDR r0, [r1] Because we are not accessing the data directly Address CEG2400 ch4 addressing modes v7a

Example : Data Transfer Instructions Use LDR copy LDR r1, =TABLE1 ; r1 points to TABLE1 LDR r2, =TABLE2 ; r2 points to TABLE2 LDR r0, [r1] ; load first value …. STR r0, [r2] ; and store it in TABLE2 ……. TABLE1 …… ; <source of data> …… TABLE2 …… ; <destination of data> CEG2400 ch4 addressing modes v7a

Exercise 4.1 Fill in the shaded areas. Address (H) Comments After instruction is run (hex) start All registers are rest to 0 here 0004 0000 (TABLE2) R0 R1 R2 0001 0000 copy LDR r1,=TABLE1 ;r1 points to TABLE1 LDR r2,=TABLE2 ;r2 points to TABLE2 LDR r0, [r1] ;load first value STR r0, [r2] ;and store it in TABLE2 : 0002 0000 TABLE1 12345678 ;<source of data> 0004 0000 TABLE2 00000063 ;<destination of data> CEG2400 ch4 addressing modes v7a

Block copy for two data: Data Transfer Instructions The following example copies data from TABLE1 to TABLE2 (show how to copy two values) copy LDR r1, =TABLE1 ; r1 points to TABLE1 LDR r2, =TABLE2 ; r2 points to TABLE2 LDR r0, [r1] ; load first value …. STR r0, [r2] ; and store it in TABLE2 ADD r1, r1, #4 ; add 4 to r1 ADD r2, r2, #4 ; add 4 to r2 LDR r0, [r1] ; load second value …. ….. TABLE1 …… ; <source of data> …… TABLE2 …… ; <destination of data> CEG2400 ch4 addressing modes v7a

CEG2400 ch4 addressing modes v7a Exercise 2 --page1 Block copy for N=5 data : Data Transfer Instructions Copy N=5 data from TABLE 1 to TABLE2 copy LDR r1, =TABLE1 ; TABLE1=0002 0000H LDR r2, =TABLE2 ; TABLE2=0004 0000H MOV r3,#0 ;setup counter at R3 loop1 LDR r0, [r1] ; load first value …. STR r0, [r2] ; and store it in TABLE2 ADD r1, r1, #4 ; add 4 to r1 ADD r2, r2, #4 ; add 4 to r2 ADD r3, r3, #1 ; increment counter CMP r3,#5 ; repeat N=5 BNE loop1 ; loop back when N<5 ….. TABLE1 …… ; <source of data> …… TABLE2 …… ; <destination of data> CEG2400 ch4 addressing modes v7a

CEG2400 ch4 addressing modes v7a Exercise 2 --page2, Fill in blacks (hex) for the loop after each time line 9 is executed After line 9 is run Time=1 Time=2 Time=3 Time=4 Time=5 R3 (Hex)= 1 2 3 4 5 R0 (Hex) 0000 00A1 R1 (Hex) 0002 0004 R2 (Hex) 0004 0004 Z (zero) of CPSR,Z=1 if result 0 else Z=0 Table 1, from 0002 0000- 0002 0013H 0000 00B2 0000 00C3 0000 00D4 0000 0055 Table 2, from 0004 0000- 0004 0013H 0000 0000 CEG2400 ch4 addressing modes v7a

4) Block copying: We will study these for block data copy LDR r0, [r1] ; register-indirect addressing LDR r0, [r1 , # offset] ; pre-indexed addressing LDR r0, [r1 , # offset]! ; pre-indexed, auto-indexing LDR r0, [r1], # offset ; post-indexed, auto-indexing CEG2400 ch4 addressing modes v7a

CEG2400 ch4 addressing modes v7a Use of pre-indexed addressing mode LDR r0, [r1, #offset] Base plus offset addressing pre-indexed addressing mode LDR r0, [r1, #4] ; r0 := mem32 [r1 + 4] r1 Unchanged effective address base address offset LDR r0, [r1, #4] ; r0 : = mem32 [r1 + 4] r1 will not be changed by pre-indexed addressing instructions CEG2400 ch4 addressing modes v7a

Pre-indexed addressing, LDR r0, [r1, #offset] Copy and copy2 (shown below) have the same effect copy LDR r1, =TABLE1 ; r1 points to TABLE1 LDR r2, =TABLE2 ; r2 points to TABLE2 LDR r0, [r1] ; load first value …. STR r0, [r2] ; and store it in TABLE2 ADD r1, r1, #4 ; step r1 onto next word ADD r2, r2, #4 ; step r2 onto next word LDR r0, [r1] ; load second value … STR r0, [r2] ; and store it Simple method copy2 LDR r1, =TABLE1 ; r1 points to TABLE1 LDR r2, =TABLE2 ; r2 points to TABLE2 LDR r0, [r1] ; load first value …. STR r0, [r2] ; and store it in TABLE2 LDR r0, [r1, #4] ; load second value … STR r0, [r2, #4] ; and store it Better method using pre-indexing CEG2400 ch4 addressing modes v7a

Pre-indexed with auto addressing mode LDR r0, [r1, #offset]! pre-indexed auto addressing mode, using (!), changes the pointer reg. (e.g. r1 here ) after used. LDR r0, [r1, #4]! ; r0 := mem32 [r1 + 4] r1 = r1+offset=r1+#4 base address offset effective address LDR r0, [r1, #4]! ; r0 : = mem32 [r1 + 4] ; r1 := r1 + 4 r1 will be changed by pre-indexed addressing instructions CEG2400 ch4 addressing modes v7a

CEG2400 ch4 addressing modes v7a Exercise 4.3 LDR r0, [r1, #4] ; r0 : = mem32 [r1 + 4] LDR r0, [r1, #4]! ; r0 : = mem32 [r1 + 4] ; r1 := r1 + 4 Copy LDR r1, =TABLE1 ; TABLE1=0002 0000 LDR r2, =TABLE2 ; TABLE2=0004 0000 LDR r0, [r1] ; load first value …. STR r0, [r2] ; and store it inTABLE2 LDR r0, [r1, #4] ; load second value STR r0, [r2, #4] ; and store it (all in hex) AfterLine r0 r1 r2 0002 0000-0002 0003 0002 0004-0002 0007 0004 0000- 0000 4003 0004 0004- 0004 0007 1 0000 0000 0002 0000 1357 2468 A123 B246 2 3 4 5 6 CEG2400 ch4 addressing modes v7a r1,r2 will NOT be changed by pre-indexed addressing instructions

CEG2400 ch4 addressing modes v7a Exercise 4.4 LDR r0, [r1, #4] ; r0 : = mem32 [r1 + 4] LDR r0, [r1, #4]! ; r0 : = mem32 [r1 + 4] ; r1 := r1 + 4 Copy LDR r1, =TABLE1 ; TABLE1=0002 0000 LDR r2, =TABLE2 ; TABLE2=0004 0000 LDR r0, [r1] ; load first value …. STR r0, [r2] ; and store it inTABLE2 LDR r0, [r1, #4]! ; load second value,r1 will change STR r0, [r2, #4]! ; and store it, r2 will change too (all in hex) After line r0 r1 r2 0002 0000-0002 0003 0002 0004-0002 0007 0004 0000- 0004 0003 0004 0004- 0004 0007 1 0000 0000 0002 0000 1357 2468 A123 B246 2 3 4 5 6 CEG2400 ch4 addressing modes v7a r1,r2 will be changed by pre-indexed addressing instructions

Data Transfer Instructions - post-indexed addressing Another useful form of the instruction is: This is called: post-indexed addressing - the base address is used without an offset as the transfer address, after which it is auto-indexed:(r1=r1+4) Using this, we can improve the copy program: LDR r0, [r1], #4 ; r0 : = mem32 [r1] ; then r1 := r1 + 4 copy LDR r1, =TABLE1 ; r1 points to TABLE1 LDR r2, =TABLE2 ; r2 points to TABLE2 loop LDR r0, [r1], #4 ; get TABLE1 1st word …. STR r0, [r2], #4 ; copy it to TABLE2 ??? ; if more, go back to loop …… TABLE1 …… ; < source of data > CEG2400 ch4 addressing modes v7a

Summary :Data Transfer Instructions (LDR-->LDRB) Size of data can be reduced to an 8-bit byte with: Summary of addressing modes: LDRB r0, [r1] ; r0 : = mem8 [r1] LDR r0, [r1] ; register-indirect addressing LDR r0, [r1 , # offset] ; pre-indexed addressing LDR r0, [r1 , # offset]! ; pre-indexed, auto-indexing LDR r0, [r1], # offset ; post-indexed, auto-indexing LDR r0, =address_label ; PC relative addressing CEG2400 ch4 addressing modes v7a

CEG2400 ch4 addressing modes v7a Self study programming exercise:;ex4_2400 ch4 of CENG2400. It is for your own revision purpose, no need to submit answers to tutors. ; User Initial Stack & Heap AREA |.text|, CODE, READONLY EXPORT __main __main ;clear flags memory_init ; set the memory content in table1 LDR r1, =Table1 LDR r2, =Table2 MOV r3,#0 MOV r0,#0x00 loop ADD r0,r0,#0x11 STR r0,[r1] ADD r1,r1,#4 ADD r3,r3,#1 CMP r3,#10 BNE loop NOP ex4_1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BL memory_reset LDR r1,=Table1 LDR r2,=Table2 LDR r0, [r1] STR r0, [r2] ;http://www.cse.cuhk.edu.hk/%7Ekhwong/www2/ceng2400/ex4_2400_qst.txt; 1) create a project based on this .s code ;2) In keil-ide, use project/rebuild all target files to build the project ;3) use Debug/run_to_cursor_line to run the top line of the program, ;4) use the single step mode to view the memory locations (in DEbug mode/view/memory_wndows)from 0x4000000 to 0x40000013, registers and cpsr after the execution of each statement. ;5) Explain the observations and results. ; declare variables New test12D AREA |.data|, DATA, READWRITE Table1 DCD 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1 ,0x1, 0x1 Table2 DCD 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1 ,0x1, 0x1 align ;------------------------------------------------------------- CEG2400 ch4 addressing modes v7a

Self study exercises (continue) BL memory_reset LDR r1,=Table1 LDR r2,=Table2 LDR r0,[r1] STR r0,[r2] LDR r0,[r1,#4] STR r0,[r2,#4] NOP ex4_4;;;;;;;; LDR r0,[r1,#4]! STR r0,[r2,#4]! memory_reset ; reset the content in ; table2 to be all 0 LDR r5,=Table2 MOV r6,#0 MOV r7,#0 loop2 STR r6,[r5] ADD r5,r5,#4 ADD r7,r7,#1 CMP r7,#10 BNE loop2 BX LR END Self study exercises (continue) ex4_2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BL memory_reset LDR r1,=Table1 LDR r2,=Table2 MOV r3, #0 loop1 LDR r0,[r1] STR r0,[r2] ADD r1,r1,#4 ADD r2,r2,#4 ADD r3,r3,#1 CMP r3,#5 BNE loop1 NOP CEG2400 ch4 addressing modes v7a

CEG2400 ch4 addressing modes v7a Summary Learned the addressing modes of the Arm processor CEG2400 ch4 addressing modes v7a

CEG2400 ch4 addressing modes v7a Appendices CEG2400 ch4 addressing modes v7a

CEG2400 ch4 addressing modes v7a Appendix 1: MOV MOV : Move MOV<suffix> <dest>, <op 1> dest = op_1 MOV loads a value into the destination register, from another register, a shifted register, or an immediate value. You can specify the same register for the effect of a NOP instruction, or you can shift the same register if you choose: MOV R0, R0 ; R0 = R0... NOP instruction MOV R0, R0, LSL#3 ; R0 = R0 * 8 If R15 is the destination, the program counter or flags can be modified. This is used to return to calling code, by moving the contents of the link register into R15: MOV PC, R14 ; Exit to caller MOVS PC, R14 ; Exit to caller preserving flags (not 32-bit compliant) CEG2400 ch4 addressing modes v7a

Appendix2: Data Transfer Instructions - ADR instruction How does the ADR instruction work? Address is 32-bit, difficult to put a 32-bit address value + opcode in a register in the first place Solution: Program Counter PC (r15) is often close to the desired data address value ADR r1, TABLE1 is translated into an instruction that adds or subtracts a constant to PC (r15), and puts the results in r1 This constant is known as PC-relative offset, and it is calculated as: addr_of_table1 - (PC_value + 8) Address opcode 00008FE4 E28F0004 ADR R0, table1 ; pseudo instruction ; now pc=r15= 00008FE4 Real instruction 00008FE4 E28F0004 ADD R0, R15, #4 ;real code 00008FF0 .table1 00008FF0 EQUS “Hello world !" By programmer CEG2400 ch4 addressing modes v7a

The use of the pseudo instruction ADR You write Address opcode 00008FE4 E28F0004 ADR R0, table1 ; pseudo instruction ; now pc=r15= 00008FE4 Real instruction (generated by the assembler) 00008FE4 E28F0004 ADD R0, R15, #4 ;real code 00008FF0 .table 00008FF0 EQUS “Hello world !" ---Explanation--- The location you want to enter into R0 is “.text”= 00008FF0 , which is the beginning of a string table. But you cannot place a 32-adress and some opcode into 32-bit Because ARM designers want to maintain each instruction is 32-bit long Put location – (PC+8)= 00008FF0-(00008FE4+8)=# 4 instead Note: # n =the actual number n (not an address) CEG2400 ch4 addressing modes v7a

CEG2400 ch4 addressing modes v7a End CEG2400 ch4 addressing modes v7a

CEG2400 ch4 addressing modes v7a Appendix Big and little endian CEG2400 ch4 addressing modes v7a