CS代写 CMPE 110 Prof. Renau

• Lab3 this week
• lab4 soon
•Must install WSL (Windows) or brew (OSX)

Copyright By PowCoder代写 加微信 powcoder

•Check video on google drive (riscv-video.mp4) to install
Annoucements
CMPE 110 Prof. Renau

•6.2-Assembly directives •6.3-compiling RISC-V baremetal
Last class
CMPE 110 Prof. Renau

•6.3-compiling RISC-V baremetal •6.4-C vs assembly
•6.6-C-array in assembly
•6.7-C-string in assembly
•6.8-C-function call in assembly •6.9-C-recursive call in assembly (stack)
Prof. Renau

• variables
• constants
• expressions
• comments
• function
• definition/call
• basic statements • if/while/for
• Variable scope
Prof. Renau

Expressions Operator Precedence
• Precedence can get tricky
•My suggestion: DO NOT COMPLICATE YOUR LIFE
•Unary higher precedence (!, ~) •* more precedence than +
•Use parenthesis otherwise
a || (b && c)
•Do not use modifying operators in an expression.
•Avoid things like: a = b++ + 3
CMPE 110 Prof. Renau

• gcc or clang
• https://learn.onlinegdb.com/
•More for teaching C (no RISC-V)
• https://godbolt.org/
•Can generate risc-v assembly and useful
C compiler
Prof. Renau

int myfun(int a) {
if (a == 2) {
return 33;
return 44; }
Function Definition
Prof. Renau

int myfun(int a, int b) {
return a + b; }
int main() {
int res = myfun(1,3);
Function Call
Prof. Renau

CMPE 110 Prof. Renau

#include
int main() {
int a = 1;
if (a == 2) {
printf(“never_called\n”);
printf(“hello world\n”);
Prof. Renau

#include
int main() {
int a = 1;
while (a < 3 ) { printf("hello world\n"); Prof. Renau #include
int main() {
for(int i=0;i<5;i++) { printf("hello world\n"); Prof. Renau #include
int main() {
for(int i=0;i<10;i++) { printf("i=%d hello world\n", i); for break/continue Prof. Renau #include
int fun1(int a) {
int b = a;
int a = 3;
printf(“1. a=%d\n”,a);
printf(“2. a=%d\n”,a);
int main() {
int c = fun1(a);
printf(“3. a=%d c=%d\n”,a,c);
Variable Scope
Prof. Renau

#include
int my_global = 3;
void my_fun() {
printf(“g=%d\n”,my_global); }
int main() {
int my_local=4;
printf(“l=%d g=%d\n”,my_local, my_global); my_global = 33;
Local vs Global variables
Prof. Renau

• int array_of_ints[100];
• char array_of_chars[13];
• char *array_of_chars2 = “Hello”; // 6 bytes 5 + zero end
CMPE 110 Prof. Renau

• C strings are zero terminated •“hello” becomes ‘h’ ‘e’ ‘l’ ‘l’ ‘o’ 0
#include
int main() {
char array[10] = “hello”;
char *ptr = “hello”;
printf(“my string is %s\n”,array); printf(“my string is %s\n”,ptr);
for(int i=0;i<8;i++) { printf("[%c] is [%d]\n", array[i], array[i]); } Prof. Renau Share notes and comments with the people next to you. You can prepare a question for the end of the break. 2 MINUTE THINKING BREAK CMPE 110 Prof. Renau • We have seen function calls •how are the local variables managed? Functions and Stacks CMPE 110 Prof. Renau Implementing Function Calls •A way to pass/return values to/from functions •A mix of registers and stack •A way to store local variables Calling function copy values into arguments call function get result from stack Called function execute code put result in ?? return Prof. Renau Stack Operation Before call During call After call Prof. Renau Where Does the Stack Reside? heap or BSS data Prof. Renau Simplistic Function Call int NoName(int a, int b) int w, x, y; .return y; } return value return address dynamic link bookkeeping int int int int int NoName NoName NoName NoName NoName Prof. Renau More Realistic Function Call • Do not keep everything in the stack •Pass some parameters through registers (a0,a1,a2...) •Keep the return address in a register (jal ra, ....) int fun(int a,int b, char c) { return a + b + c; int caller(int a) { a = fun(a<<2,11,22); return a + 300; fun: # @fun(int, int, char) add a0, a0, a1 add a0, a0, a2 caller: # @caller(int) addi sp, sp, -16 sw ra, 12(sp) slli a0, a0, 2 addi a1, zero, 11 addi a2, zero, 22 call fun(int, int, char) addi a0, a0, 300 lw ra, 12(sp) addi sp, sp, 16 Prof. Renau lw ra, 12(sp) addi sp, sp, 16 caller2: # @caller2(int) addi sp, sp, -16 # 4-byte Folded Reload More Realistic Function Call caller: # @caller(int) addi sp, sp, -16 int caller(int a) { b = fun(a<<2,11,22); return a + b; int caller2(int a) { b = fun(a<<2,11,22); return a + b; } # 4-byte Folded Spill sw ra, 12(sp) slli a0, a0, 2 addi a1, zero, 11 addi a2, zero, 22 call fun(int, int, char) addi a0, a0, 300 sw ra, 12(sp) sw s0, 8(sp) mv s0, a0 slli a0, a0, 2 addi a1, zero, 11 addi a2, zero, 22 call fun(int, int, char) add a0, a0, s0 lw s0, 8(sp) # 4-byte Folded Reload lw ra, 12(sp) # 4-byte Folded Reload addi sp, sp, 16 ret Prof. Renau # 4-byte Folded Spill # 4-byte Folded Spill Function and Scope int foo(int x, int y) { int z = x + (y++); return z; int main(void) { int a = 6; int b = foo(33, b); Return address Prof. Renau int foo(int x, int y) { int z = x + (y++); return z; int main(void) { int a = 6; int b = foo(33, b); Function and Scope Return address Return address Prof. Renau int factorial(int n) { return n*factorial(n-1); Prof. Renau Share notes and comments with the people next to you. You can prepare a question for the end of the break. 2 MINUTE THINKING BREAK CMPE 110 Prof. Renau • Finding problems in a problem and fix them • Scientific process. Create a hypothesis, check it • Tools for C • debuggers • Methodologies •Test Driven Development •Continuous Integration (CI) Prof. Renau • Linux/WSL: gdb/lldb • OSX: lldb • online: https://learn.onlinegdb.com/ • Commands: •b •step vs next Prof. Renau Test Driven Development (or Behavioral Driven Development) • Test driven development (TDD/BDD) •Starts writing test, then goes to write code to make test pass • Simple rules! •It does not work unless you test it •Testing must be automated (CI) •Use assertions • Some free source • http://jodypaul.com/SWE/TD/TestDebug.html Prof. Renau •6.3-compiling RISC-V baremetal •6.4-C vs assembly •6.6-C-array in assembly •6.7-C-string in assembly •6.8-C-function call in assembly •6.9-C-recursive call in assembly (stack) CMPE 110 Prof. Renau •7-Datapath (2 days) •7.1-Mem + PC + ALU (COD 4.3) •7.2-ALU control (COD 4.4) •7.3-datapath showcase RISC-V instructions Next Class Prof. Renau 程序代写 CS代考 加微信: powcoder QQ: 1823890830 Email: powcoder@163.com