90 likes | 213 Views
This tutorial focuses on Load/Store instructions in a simulator, presenting both a summary and practical exercises. It covers various loading formats, such as `ldq`, `ldbu`, and `ldl`, emphasizing the proper address alignment for different loads and stores. The tutorial also includes code examples that demonstrate how to load values into registers and store register values back to memory, alongside specific instructions that cannot be executed. Exercises provide hands-on experience with memory operations, enabling learners to visualize register changes and memory contents.
E N D
OutLine of Tutorial 5 • Summary of Load/Store instructions • Exercises reading memory in Simulator • Exercises writing code
Summary of Load/Store instructions • Format • Opcode regA, displacement(regB) • displacement is less than 16 bit • Code like “ldq regA, label” won’t be executed in the Simulator, it needs to be replaced by following code • ldiq regA, label; • ldq regA, (regA) • vitual memory = displacement + value of regB
Summary of Load/Store instructions • Load instructions in Simulator • ldbu: • filling remaining bytes in register with 0 • ldwu: • filling remaining bytes in register with 0 • Memory address has to be multiple of 2 • ldl • filling remaining bytes in register with signed bit • Memory address has to be multiple of 4 • ldq • Memory address has to be multiple of 8 • lda • Load the memory address rather than the value
Summary of Load/Store instructions • Store instruction in Simulator • stb: • stw: • Memory address has to be multiple of 2 • stl • Memory address has to be multiple of 4 • stq • Memory address has to be multiple of 8
Get answer using Simulator, Exercise 1 following code is in example 5 Show the contents of memory and the labels data{ value0: asciiz "ab"; value1: byte 0x12; value2: long 0x3456; value3: quad 0x87654321; } With above memory allocated, indicate how the contents of registers are changed by following instructions, and which instructions can’t be executed ldiq $t0, value0; ldq $t1, ($t0); ldwu $t2, 4($t0); lda $t3, 3($t0); ldbu $t2, ($t3); ldl $t3, 8($t0); ldl $t4, 6($t0); ldq $t5, 4($t0);
Continue exercise 1 Continue with above exercise, indicate how the contents of registers are changed by following instructions, and which instructions can’t be executed stq $t1, ($t0); stb $t2, 1($t0); stw $t3, 2($t0); stl $t3, 8($t0); ldiq $t0, value2; stq $t3, ($t0); stl $t3, 2($t0);
Get answer using Simulator, Exercise 2 following code is in example 6 Show the contents of memory and the labels data{ align quad; value0: asciiz "ab"; align word; value1: byte 0x12; align long; value2: word 0x3456; value3: long 0x7890; } With above memory allocated, indicate how the contents of registers are changed by following instructions, and which instructions can’t be executed ldiq $t0, value0; ldq $t1, ($t0); ldwu $t2, 4($t0); lda $t3, 3($t0); ldbu $t2, ($t3); ldl $t3, 8($t0); ldl $t4, 6($t0); ldq $t5, 4($t0);
Continue exercise 2 Continue with above exercise, indicate how the contents of registers are changed by following instructions, and which instructions can’t be executed stq $t1, ($t0); stb $t2, 1($t0); stw $t3, 2($t0); stl $t3, 8($t0); ldiq $t0, value2; stq $t3, ($t0); stl $t3, 2($t0);
Exercise 3: add code to example 7 Write code to load value0,value1,value2,value3 to register t1,t2,t3,t4 Write code to store values in register t1,t2,t3,t4 in memory label value0,value1,value2,value3