JAVA and C programming examples and advices. Tips about computing. Also few MIPS examples and advices about assembly.
.data
msg1:.asciiz "Give a number : "
.text
.globl main
main:
li $v0,4
la $a0,msg1
syscall
li $v0,5
syscall
add $a0,$v0,$zero
jal fib
add $a0,$v0,$zero
li $v0,1
syscall
li $v0,10
syscall
fib:
#a0=a
#if (a==0) return 0;
#if (a==1) return 1;
# int x($t1),y($t2),z($t3),i($t4);
# for (x=0,y=0,z=1,i=1;i<a;i++) {
# x=y+z;
# y=z;
# z=x; }
# return(x);
addi $t0,$zero,1
beqz $a0,return0
beq $a0,$t0,return1
#arxikopiisi
add $t1,$zero,$zero
add $t2,$zero,$zero
addi $t3,$zero,1
addi $t4,$zero,1
loop:
bge $t4,$a0,endloop
add $t1,$t2,$t3
add $t2,$zero,$t3
add $t3,$zero,$t1
addi $t4,$t4,1
j loop
endloop:
add $v0,$zero,$t1
jr $ra
return0:
add $v0,$zero,$zero
jr $ra
return1:
addi $v0,$zero,1
jr $ra
.data
msg1:.asciiz "Give a number: "
.text
.globl main
main:
li $v0,4
la $a0,msg1
syscall #print msg
li $v0,5
syscall #read an int
add $a0,$v0,$zero #move to $a0
jal fib #call fib
add $a0,$v0,$zero
li $v0,1
syscall
li $v0,10
syscall
fib:
#a0=y
#if (y==0) return 0;
#if (y==1) return 1;
#return( fib(y-1)+fib(y-2) );
addi $sp,$sp,-12 #save in stack
sw $ra,0($sp)
sw $s0,4($sp)
sw $s1,8($sp)
add $s0,$a0,$zero
addi $t1,$zero,1
beq $s0,$zero,return0
beq $s0,$t1,return1
addi $a0,$s0,-1
jal fib
add $s1,$zero,$v0 #s1=fib(y-1)
addi $a0,$s0,-2
jal fib #v0=fib(n-2)
add $v0,$v0,$s1 #v0=fib(n-2)+$s1
exitfib:
lw $ra,0($sp) #read registers from stack
lw $s0,4($sp)
lw $s1,8($sp)
addi $sp,$sp,12 #bring back stack pointer
jr $ra
return1:
li $v0,1
j exitfib
return0 : li $v0,0
j exitfib
import java.lang.String;
public class time_example {
public static void print_num(){
for(int i = 0 ; i<=1000 ; i++) {
System.out.print(i+" ");
}
System.out.println();
}
public static void main(String args[]) {
long start,end;
start = 0; end = 0;
start = System.currentTimeMillis();
print_num();
end = System.currentTimeMillis();
System.out.println("Elapsed time (approximately)
in milliseconds = " +(end-start));
start = System.nanoTime();
print_num();
end = System.nanoTime();
System.out.println("Elapsed time (approximately)
in nanoseconds = " +(end-start));
}
}
0 1 2 3 4 5 ... 995 996 997 998 999 1000
Elapsed time (approximately) in milliseconds = 47
0 1 2 3 4 5 ... 995 996 997 998 999 1000
Elapsed time (approximately) in nanoseconds = 193986945
fibonacci(n) = fibonacci(n-1) + fibonacci(n-2) n>=2
fibonacci(0) = 0
fibonacci(1) = 1
#include <stdio.h>
int fibonacci(int y){
if (y==0) return 0;
if (y==1) return 1;
return( fibonacci(y-1)+fibonacci(y-2) );
}
int fibonacci2(int a) {
if (a==0) return 0;
if (a==1) return 1;
int x,y,z,i;
for (i=1,x=0,y=0,z=1;i<a;i++) {
x=y+z;
y=z;
z=x;
}
return(x);
}
int main() {
int x;
printf("Give an integer ");
scanf("%d",&x);
printf("Fibonacci of %d is %d ",x,fibonacci(x));
printf("\nFibonacci2 of %d is %d ",x,fibonacci2(x));
exit (0);
}
Give an integer: 30
Fibonacci of 30 is 832040
Fibonacci2 of 30 is 832040
.data
str1: .asciiz "Give integer X from 1 to 20 "
str2: .asciiz "Give integer Y from 0 to 5 "
errormsg: .asciiz "Out of range.\n"
nline: .asciiz "\n"
result1: .asciiz " raised to "
result2: .asciiz " gives: "
.text
error:
li $v0,4 #print string1
la $a0,errormsg
syscall
beq $s2,$zero,getX
j getY
.globl main
main:
addi $s0,$zero,21 #s0=21
addi $s1,$zero,6 #s1=6
getX:
addi $s2,$zero,0 #s2=0 to input x and 1 to input y
li $v0,4
la $a0,str1
syscall #print string1
li $v0,5
syscall #read int
slt $s3,$v0,$s0 #$s3=($v0<$s0) if(x<21) $s1=1
beq $s3,$zero,error #if $s3=0 goto error
blez $v0,error #if ($v0<=0) goto error
move $t0,$v0
getY:
addi $s2,$zero,1
li $v0,4
la $a0,str2
syscall #print string2
li $v0,5
syscall #read int
slt $s3,$v0,$s1 #$s3=($v0<$s1) if(x<6) $s3=1
beq $s3,$zero,error #if $s3=0 goto error
bltz $v0,error #if ($v0<0) goto error
move $t1,$v0
beq $t1,$zero,else #if (t1=0) t2=1, t1=y,t2=result
addi $t2,$zero,1
addi $s4,$zero,0
loop: #if s4<t1
slt $s5,$s4,$t1 #$s5=($s4<$t1) if(x<21) $s5=1
beq $s5,$zero,printresult
#if $s1=0 goto printresult(s4=t1)
mul $t2,$t2,$t0 #t2=t2*t0
addi $s4,$s4,1
j loop
else:
addi $t2,$zero,1
j printresult
printresult:
li $v0,1
move $a0,$t0
syscall #print X
li $v0,4
la $a0,result1
syscall #print " raised to "
li $v0,1
move $a0,$t1
syscall #print Y
li $v0,4
la $a0,result2
syscall #print " gives "
li $v0,1
move $a0,$t2
syscall #print result(t2)
li $v0,10
syscall #exit
#include <stdio.h>
/*
power recursive
return x^y
*/
int power(int x,int y){
if (y==0) return 1;
if (y==1) return x;
return( x*power(x,y-1) );
}
/*
power not recursive
return x^y
*/
int power2(int x,int y) {
if (y==0) return 1;
if (y==1) return x;
int result,i;
for (i=0,result=1;i<y;i++) {
result = result * x;
}
return(result);
}
int main() {
int x,y;
do{
printf("Give integer X from 1 to 20 : ");
scanf("%d",&x);
}
while( x>20 || x<1 );
do{
printf("Give integer Y from 0 to 5 : ");
scanf("%d",&y);
}
while( x>20 || x<1 );
printf("%d raised to %d gives %d \n",x,y,power(x,y));
printf("%d raised to %d gives %d ",x,y,power2(x,y));
exit (0);
}
Please give integer X from 1 to 20: 2
Please give integer Y from 0 to 5: 5
X raised to Y gives: 32
#include <stdio.h>
int main() {
int x,i;
do{
printf("Please give an integer from 1 to 20 : ");
scanf("%d",&x);
}
while( x>20 || x<1 );
for (i=1;i<=x;i++) {
printf("%d\n",i);
}
exit(0);
}
.data
str1: .asciiz " Please give an integer from 1 to 20 : "
errormsg: .asciiz " Out of range (1-20). \n"
nline: .asciiz "\n" #new line
.text
error:
li $v0,4
la $a0,errormsg
syscall #print error msg
j get
.globl main # label "main" must be global
main:
addi $s0,$zero,21 #s0=21
get:
li $v0,4
la $a0,str1
syscall #print string1
li $v0,5
syscall #read int
slt $s1,$v0,$s0 #$s1=($v0<$s0) if(x<21) $s1=1
beq $s1,$zero,error #if $s1=0 goto error
blez $v0,error #if ($v0<=0) goto error
move $t0,$v0
add $t1,$0,$0
loop:
addi $t1,$t1,1 #$t1++
li $v0,1
move $a0,$t1
syscall #print int
li $v0,4
la $a0,nline
syscall #print nline
slt $t2,$t1,$t0 #$t2=($t1<$t0)
bnez $t2,loop #if $t2!=0 goto loop
li $v0,10 #exit program
syscall
Please give an integer from 1 to 20: 35 Out of range (1-20).
Please give an integer from 1 to 20: -5 Out of range (1-20).
Please give an integer from 1 to 20: 5
1
2
3
4
5
------------------
---- Counter ----
------------------
LIBRARY IEEE;
USE ieee.std_logic_1164.all;
ENTITY counter1 IS
port(clk,reset: in std_logic;
result : out std_logic_vector(1 to 4));
End counter1;
Architecture structural of counter1 IS
COMPONENT Dflipflop
port(resetn,D,Clock : in std_logic;
Q1,Q2 : out std_logic);
End Component;
COMPONENT andn
generic( N:integer:=4);
PORT (x : IN STD_LOGIC_VECTOR(1 TO N);
f : OUT STD_LOGIC);
end component;
component orn
generic( N:integer:=4);
port (x : std_logic_vector(1 to N);
f : out std_logic);
end component;
Signal da1,da2,inputa,db1,db2,inputb,dc1,dc2,
inputc,dd1,dd2,inputd:std_logic;
Signal x1,x2,x5,x6,x7,x8,x9,x12,
x13,x14 : std_logic_vector(1 to 2);
Signal x3,x4,x10,x11 : std_logic_vector(1 to 3);
SIGNAL N : std_logic_vector(1 to 10);
Begin
x1<=da1&dc2;
x2<=da1&dd2;
x3<=da2&dc1&dd1;
x4<=N(1)&N(2)&N(3);
G4: andn generic map(2) port map(x1,N(1));
G5: andn generic map(2) port map(x2,N(2));
G6: andn generic map(3) port map(x3,N(3));
G7: orn generic map(3) port map(x4,inputa);
x5<=da1&dc2;
x6<=dc1&dd2;
x7<=N(4)&N(5);
G8: andn generic map(2) port map(x5,N(4));
G9: andn generic map(2) port map(x6,N(5));
G10: orn generic map(2) port map(x7,inputb);
x8<=dc2&dd1;
x9<=da2&dc1;
x10<=db1&dc1&dd2;
x11<=N(6)&N(7)&N(8);
G11: andn generic map(2) port map(x8,N(6));
G12: andn generic map(2) port map(x9,N(7));
G13: andn generic map(3) port map(x10,N(8));
G14: orn generic map(3) port map(x11,inputc);
x12<=dc2&dd2;
x13<=db1&dd2;
x14<=N(9)&N(10);
G15: andn generic map(2) port map(x12,N(9));
G16: andn generic map(2) port map(x13,N(10));
G17: orn generic map(2) port map(x14,inputd);
G0: dflipflop port map(reset,inputa,clk,da1,da2);
G1: dflipflop port map(reset,inputb,clk,db1,db2);
G2: dflipflop port map(reset,inputc,clk,dc1, dc2);
G3: dflipflop port map(reset,inputd,clk,dd1,dd2);
result(1)<=inputa;
result(2)<=inputb;
result(3)<=inputc;
result(4)<=inputd;
End structural;
vlib work
vmap work work
vcom counter1.vhd
vsim counter1
force clk 0 0, 1 10 -repeat 20
force reset 1 0
add wave /counter1/*
run 250
do counter.do
---------------------
---- D Flip Flop ----
---------------------
LIBRARY IEEE;
USE ieee.std_logic_1164.all;
Entity Dflipflop IS
Port(resetn,D,clock :in std_logic;
Q1,Q2 : out std_logic);
End Dflipflop;
ARCHITECTURE behavior OF Dflipflop IS
BEGIN
p1: PROCESS (resetn,D,Clock)
BEGIN
IF resetn = '0' then
Q1<='0';
Q2<='1';
ELSIF Clock'EVENT AND Clock = '1' THEN
Q1 <= D;
Q2 <= NOT D;
END IF;
END PROCESS p1;
END behavior;
------------------------
--- OR gate n-input ---
------------------------
LIBRARY IEEE;
USE ieee.std_logic_1164.all;
ENTITY orn IS
GENERIC (n : INTEGER := 4);
PORT (x : IN STD_LOGIC_VECTOR(1 TO n);
f : OUT STD_LOGIC);
END orn;
ARCHITECTURE dataflow OF orn IS
SIGNAL tmp : STD_LOGIC_VECTOR(1 TO n);
BEGIN
tmp <= (OTHERS => '0');
f <= '0' WHEN x = tmp ELSE '1';
END dataflow;
------------------------
----- AND n-input -----
------------------------
LIBRARY IEEE;
USE ieee.std_logic_1164.all;
ENTITY andn IS
GENERIC (n : INTEGER := 4);
PORT (x : IN STD_LOGIC_VECTOR(1 TO n);
f : OUT STD_LOGIC);
END andn;
ARCHITECTURE dataflow OF andn IS
SIGNAL tmp : STD_LOGIC_VECTOR(1 TO n);
BEGIN
tmp <= (OTHERS => '1');
f <= '1' WHEN x = tmp ELSE '0';
END dataflow;