CS计算机代考程序代写 compiler assembly assembler Microsoft PowerPoint – Week 10 2021

Microsoft PowerPoint – Week 10 2021

Week 10
Start at 12:05 as per usual

Outline

• Running instructions on AVR Hardware
• Jump/Branch

• Programming in assembly

Jump

• In Assembly:
Label_location:  Add R8 R9


JMP label_location

Activity 4

Branch

• What instruction needs to be executed before a branch?

• How far can you branch?

• What does it do?

Programming AVR

Normal programming procedure

• On Computer:
• Start IDE (integrated development environment)
• Write program in Arduino C
• Compile
• Send executable to board via USB

Normal programming procedure

• On Computer:
• Start IDE (integrated development environment)
• Write program in Arduino C
• Compile
• Send executable to board via USB

• On Board (if you could)
• Continually listening to USB
• Takes executable, puts into program memory
• Jump to program

Today you forgot your compiler

Programming in Assembly

• We have covered AVR architecture
• We have covered AVR instructions

• Today:
• Understand how to write an assembly program.

Assembly programs

• Remove all conventional program structures/concepts
• Class
• Methods
• Public
• Private
• Inheritance 
• …

• Why?

Writing assembly code

• Need to know architecture
• Need to know ISA

• Create assembly program using same IDE
• Give to assembler

• (form of compiler)
• Much simpler
• Take instructions, covert to machine code

• Generate executable
• Send to USB
• Run on board

Writing assembly code

• We will talk about
• Defining Data
• Labels
• Stack/Register management
• Examples

Assembly Programs

Assembly Programs

All of your data
To be stored where?

Assembly Programs

Your program
To be stored where?

Assembly Programs

Why global

Assembly Programs

Is main the only global we might want?

Assembly Programs

Your first 
label to 
jump to

Assembly Programs

Go back 
from 
subroutine

.section .data

• .byte 0xAB, 12, 0b11010010, ‘a’

• How does this look in program memory?

• Where does it store it in program memory?

.section .data

• .byte 0xAB, 12, 0b11010010, ‘a’
• .space 5, 0 

What does it look like?

.section .data

• .byte 0xAB, 12, 0b11010010, ‘a’
• .space 5,0
• .byte 0x01, 0x02

• .byte 0xAB, 12, 0b11010010, ‘a’
• .space 5
• .byte 0x01, 0x02

What is the difference?

.section .data

• .byte 0 vs .space 0
• Any difference?

.section .data

• .byte 0 vs .space 0
• Any difference?
• No

.section .data

• .byte vs .space 
• Any difference?

.section .data

• .ascii ‘hello’

• What does it look like?

• .asciz ‘hi’ (.string ‘hi’ )

• What does it look like?

.section .data

• .asciz “0”

• How do you differentiate between 0 and end of string

Activity 1

.section .data

• .section .data
• a: .byte 3, 1, 2, 3

• What is this?

.section .data

• .section .data
• a: .byte 3, 1, 2, 3

• What is this?
• 4 byte array, values 3,1,2,3
• 3 byte array, with values 1,2,3

Activity 2

Activity 2

• Row major vs column major

Writing assembly programs

• Hard!
• You need to know/choose underlying data structure

• Not clear just looking at memory what is happening
• Give you some idea:

1. Understanding Assembly: Activity 3 week 8
2. Writing Assembly

Writing assembly programs

• How do you access data?
• Subject for addressing modes 
• But give short intro here:

• Look up AVR code
• (http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel‐0856‐ AVR‐Instruction‐Set‐
Manual.pdf ) 

• (https://canvas.sydney.edu.au/courses/17907/pages/week‐8?module_item_id=577689 )

Example

• How do you translate (written in some high‐level language) this to 
assembly (start with .section .data):
• A = 10
• B = [1, 2, 4, 10]
• …
• P = A
• Q = P+1
• …
• B[0] = P+Q
• B[1] = Q‐P+1

Writing assembly programs: Labels and 
Memory
• Uses:

1. Use 1: Data Memory (address for variables)
2. Use 2: Program Memory (destinations for JMP/Branch)

Labels

Use 1: Data Memory (address for variables)
• (appears both in memory and data section in code. Why?)

Labels

Use 1: Data Memory (address for variables)
• (appears both in memory and data section in code. Why?)
• Used in LDS, SDS (describe, same instruction)
• Can access with lo, hi

Labels

Use 1: Data Memory (address for variables)
• (can appear in memory/data section)
• Used in LDS, SDS (describe, same instruction)
• Can access with lo, hi

• If have following code:
l1:
l2: .byte 1

What do l1/l2 point to?

Labels

• Use 2: Program Memory 
• Destinations for JMP/Branch
• Subroutine calls
Recap why use branch vs JMP?

Activity 3

Subroutines

• How do I pass parameters to a function?

Subroutines

• To run a subroutine, you need to know:
• It’s address
• What variables are passed in
• What variables/results are returned

Subroutines

• To run a subroutine, you need to know:
• It’s address
• What variables are passed in
• What variables/results are returned

• To run, subroutines need

Subroutines

• To run a subroutine, you need to know:
• It’s address
• What variables are passed in
• What variables/results are returned

• To run, subroutines need registers/stack:

Subroutines

• To run a subroutine, you need to know:
• It’s address
• What variables are passed in
• What variables/results are returned

• To run, subroutines need registers/stack:
• To make life easy for the calling program

• Any data held in registers/stack in calling program should be the same before/after
• (except the result)

• To make life easy for the subroutine
• It should be free to use all registers/stack

• Who should be in charge?

Subroutines

• Who should be in charge?

• AVR compiler has some arbitrary rules:
https://canvas.sydney.edu.au/courses/17907/pages/8‐dot‐4‐stack‐and‐
register‐management?module_item_id=577848

Subroutines

• Who should be in charge?

• AVR compiler has some arbitrary rules:
• Registers must obey following policy:

https://canvas.sydney.edu.au/courses/17907/pages/8‐dot‐4‐stack‐and‐
register‐management?module_item_id=577848

• Stack must be unchanged.
• Can you still use it?

Subroutines

• Calling function:
• What do I need to do to any values in registers I want to retain?

• Subroutine:
• What do I need to do if I want to use registers?

Activity 4

Addressing modes

Addressing Modes

• What are they?
• How microprocessor accesses operands for 1 instruction
• May contain additional features (pre/post increment)

• Why have pre‐post increment as special instructions?

Addressing Modes

• What are they?
• How microprocessor accesses operands for 1 instruction
• May contain additional features (pre/post increment)

• Why have pre‐post increment as special instructions?

• Every microprocessor may have slightly different addressing mode
• Computer architecture decision
• Standard modes

• Case study: AVR
• 7 Addressing Modes

Understanding addressing modes

Understanding addressing modes

Understanding addressing modes

Easy right?

Understanding addressing modes

• Where are my operands
• How do I find the address of my operands

Understanding addressing modes

• Where are my operands
• How do I find the address of my operands

• ADD, SUBI, STS (r, label), LD (R, X/Y/Z)

Understanding addressing modes

• All we care about:

Addressing Mode 1: Register Direct

• Sample Instruction: 
• Where is the operand?
• Where is the address of the operand?

Addressing Mode 2: Immediate

• Sample Instruction: 
• Where is the operand?
• Where is the address of the operand?

Activity 1

• Reverse engineer

• How does it work in the datapath

Addressing Mode 3: Data Direct

• Sample Instruction: 
• Where is the operand?
• Where is the address of the operand?

Activity 2

Addressing Mode 4: Data Indirect

• Sample Instruction: 
• Where is the operand?
• Where is the address of the operand?

Addressing Mode 4: Data Indirect

• Sample Instruction: 
• Where is the operand?
• Where is the address of the operand?

X/Y/Z must be pre‐loaded with 
correct address

Addressing Mode 4: Data Indirect

• Sample Instruction: 
• Where is the operand?
• Where is the address of the operand?

Ldi R27, hi8(label)
Ldi r26, lo8(label)

X/Y/Z must be pre‐loaded with 
correct address

Addressing Mode 4: Data Indirect

• Sample Instruction: 
• Where is the operand?
• Where is the address of the operand?

Ldi R27, hi8(label)
Ldi r26, lo8(label)

X/Y/Z must be pre‐loaded with 
correct address

Does order matter? How do I remember X/Y/Z?

Addressing Mode 5: Data Indirect (with Post‐
increment)
• Sample Instruction: 
• Where is the operand?
• Where is the address of the operand?

Addressing Mode 6: Data Indirect (with Pre‐
increment)
• Sample Instruction: 
• Where is the operand?
• Where is the address of the operand?

Addressing Mode 7: Data Indirect (with 
Displacement)
• Sample Instruction: 
• Where is the operand?
• Where is the address of the operand?