Uke 6 - C og assembly-programmering; bash scripting

Oppgaver til mandag 2. - fredag 6. feb

  1. (Oblig)
  2. (Oblig)
  3.  
    .globl sum 
    # C-signatur:int sum ()

    sum:                 # Standard

    mov   $2, %rcx       # 2 -> rcx, maks i løkke
    mov   $1, %rdx       # 1 -> rdx, tallet i Ã¸kes med for hver runde
    mov   $0, %rbx       # 0 -> rbx, variabelen i lagres i rbx
    mov   $0, %rax       # 0 -> rax, summen = S 

    # løkke
    start: # label
    add  %rdx, %rbx # rbx = rbx + rdx (i++) 
    add  $2, %rax   # rax = rax + rbx (S = S + 2)
    cmp  %rcx, %rbx # compare, er i = 2?
    jne  start      # Jump Not Equal til start:

    ret  # Verdien i rax returneres

  4. (Oblig)
  5. Man kan skrive til adresse 3 med en instruksjon siden tallet 3 ligger i R0 i dette tilfellet. Men for å skrive til adresse 2 må man først bruke en instruksjon på å legge tallet 2 i et register før man skriver til RAM. For å skrive til adresse 12 må man skrive enda mer kode med instruksjoner som adderer siden det største tallet som kan legges direkte inn i et register med MOVI er 3.
  6. groups
  7. (Oblig)
  8. (Oblig)
  9. (Oblig)
  10.  
    #! /bin/bash
    (( dtot=0 ))
    (( ftot=0 ))
    (( ltot=0 ))
    for fil in $(find .)
    do
        if [ -L "$fil" ]; then 
               (( ltot += 1 ))
        elif [ -f "$fil" ]; then 
               (( ftot += 1 ))
        elif [ -d "$fil" ]; then 
               (( dtot += 1 ))
        fi
    done
    echo Filer: $ftot
    echo Kataloger: $dtot
    echo Linker: $ltot



    Løsning uten Bash 2.x aritmetikk:

     
    #! /bin/bash
         dtot=0
         ftot=0
         ltot=0
         for fil in $(find .)
         do
             if [ -L "$fil" ]; then 
                    ltot=$(expr $ltot + 1)
             elif [ -f "$fil" ]; then 
                    ftot=$(expr $ftot + 1)
             elif [ -d "$fil" ]; then 
                    dtot=$(expr $dtot + 1)
             fi
         done
         echo Filer: $ftot
         echo Kataloger: $dtot
         echo Linker: $ltot

  11. (Oblig)
  12. chmod -R u+rwX,go+rX,go-w ~/www
    
  13. chmod -R a=r,u+w,a+X ~/www
    
    Først gis alt r, deretter gis mapper(men ikke filer) x ved hjelp av +X.
  14. (Oblig)
  15. (Oblig)
  16.  
    #! /bin/bash

    if [ $# -ne 2 ]
    then
        echo "Syntaks: $0 fra-endelse til-endelse"
        exit
    fi

    fra=$1
    til=$2

    for fil in *.$fra
    do 
       if [ -f $fil ]
       then
          name=$(basename $fil .$fra)
          mv $fil $name.$til
          echo "Endrer $fil til $name.$til"
          found=true
       fi
    done

    if [ ! $found ]
    then
        echo "Fant ingen filer med filendelse $fra"
    fi

  17. rename -n s/\.wav/\.mp3/ *.wav
    rename  s/\.wav/\.mp3/ *.wav
    
    
  18.  
    #! /bin/bash
    for fil in $(find .)
    do
       if [ -f $fil ]
       then
           res=$(grep $1 $fil)
          if [ "$res" != "" ]
          then
                echo "######### Fant $1 i fil $fil i følgende linje(r):"
                grep $1 $fil
          fi
       fi
    done

  19. #! /bin/bash
    
    uname -a
    grep MHz /proc/cpuinfo | uniq
    grep MemTotal /proc/meminfo  
    grep name /proc/cpuinfo  | uniq
    grep CODENAME /etc/*release
    grep DESC /etc/*release
    
  20. (Oblig)