110 likes | 226 Views
Computer Architecture. Lecture 3 C and Assembly. Intro to Assembly Language MIPS and Intel. Variables and Constants int count = 10 , I, j, k; count .word 10 i .word j .word. Count DD 10 i DD ? j DD ?. Byte size variables. char sum = 1, total= 5; char uni[10] =“university”;.
E N D
Computer Architecture Lecture 3 C and Assembly
Intro to Assembly LanguageMIPS and Intel • Variables and Constants int count = 10, I, j, k; count .word 10 i .word j .word Count DD 10 i DD ? j DD ?
Byte size variables char sum = 1, total= 5; char uni[10] =“university”; sum .byte 1 total .byte 5 uni .byte “u”,”n”, “i” etc; sum db 1 total db 5 uni db “u”,”n”, “i” etc;
Strings string str (“hello world”); str .asciiz “hello world” str db “hello world”
Arrays int age[100]; age .word 0:100 ; 100 words initialized to zero age dw 100 dup(0); 100 words initialized to zero
Assignment count = count +1; .data #Data Part count .word 10 //MIPS Assembly .text # Code part main: la R1, count # (load address works in spim) #R1 has address of count lw R2, 0(R1) # R2 has the value of count addi R2, R2, 1 # Increment sw R2, 0(R1) # Save count, if need be
Another Example i = age[20] +age[0] + count; .data age .word 0:100 ; 100 words initialized to zero .text main: la R3, age #R3 has base address of age; lw R4, 80[R3] #20 * 4 = 80, R4 = age[20] lw R5, 0(R3) #R5 = age[0] add R4, R4, R5 # add R4, R4, R2 #R2 had value of count above
Control (WHILE) count = 0; while (count < 21) { age[count] = age[count+1]; count = count+1; ;count need not assigned a memory location } la R6, age ;R6 = address of age[0] addi R2, R0, 0 ; R2 = count = 0 lable1: mul R4, R2, 4 ; R4 has address of countth element add R5, R6, R4 :R4= count *4 lw R7, 4(R5) ;R7 = age[count+1] sw R7, 0(R5) ; age[count] = R7 addi R2, R2, 1 ; Count = count +1; slti R8, R2, 21 ; R8 = 1 if count<21 bnez R8, label1
For Statement Total = 0; For (i= 0; i<100; i ++) { total = age[i] + total;} la R1, age #R1 has address of count la R22, Total lw R2, 0(R1) # R2 has the value of count addi R5, R0, 0 # i = 0 ; R5 is i addi R15, R0, 0 # R15 is running sum addi R10, R0, 100 # R10 = 100 Xy: slt R11,R5,R10 # check R5 is R5 < R10 (R10 is count) be R11, R0, lable # loop until mul R6, R5, 4 # R6 has address of ith element of age add R6, R6, R1 # R4 = address of age lw R20, 0(R6) #R20 = age[i] add R15, R15, R20 # total = total + age[i] sw R15, 0(R22) # R22 is address of total addi R5,R5,1 # i = i+1; b Xy: # Unconditional branch lable:
IF … then if (count == max) { I = 5;} else { I = 20;} Instructions after if #assume R4 has the value of count, R7 has value of MAX and I is R5 bne R4, R7, else addi R5, R0, 5 b exit else: addi R5, R0, 20 exit: Instructions after if
Classifying Instruction Set Architectures • Stack • Register- Register • Register – Memory • Accumulator • Memory – Memory