Assignment Unit 7
Assignment Unit 7
// for loop
//
// J=5
// for(i=1; i<5; i++) {
// j--
// }
//
//Assembler Language
// Problem 2
// if - then - else
//
// i=4
// if (i < 5) then
// j = 3
// else
// j = 2
//Assembler Language
// i = address RAM[0]
// j = address RAM[1]
//
//PC
// initialize variable i with value of 4
@4 //0 load value 4 into A register
D=A //1 move value of A register to D register
@0 //2 load memory address 0
M=D //3 move value of D register to address 0
//
// test if i < 5
@0 //4 load memory address 0
D=M //5 move value in memory to D register
@5 //6 load value 5 to A register
D=A-D //7 subtract D register from A register
@12 //8 load program counter address
D;JGT //9 execute a jump if D > 0
@18 //10 load program counter address
D;JLE //11 execute a jump if D <= 0
//
// if i < 5, initialize j = 3
@3 //12 load value 3 into A register
D=A //13 move value of A register to D register
@1 //14 load memory address 1
M=D //15 move value of D register to address 1
@24 //16 load program counter address
0;JMP //17 execute a jump to end program
//
// else, initialize j = 2
@2 //18 load value 2 into A register
D=A //19 move value of A register to D register
@1 //20 load memory address 1
M=D //21 move value of D register to address 1
@24 //22 load program counter address
0;JMP //23 execute a jump to end program
// Problem 3
//while loop
// i = 0
// j = 0
// while(i==0) {
// j++
// if j = 5 then
// i = j
// }
//
//Assembler Language
// Problem 4
// load and traverse an array
// A[0] =5
// A[1]=4
// A[2]=3
// A[3]=2
// A[4]=1
// A[5]=0
//
// for (i=0; i<=5; i++) {
if A[i] == 0 then
A[i] = 5;
// }
//
//Assembler Language
//PC
// initialize the array with 5 values
@5 //0 load value of 5 into A register
D=A //1 move A to D register
@0 //2 load memory address 0
M=D //3 move value of D register to address 0
@4 //4 load value of 4 into A register
D=A //5 move value of A to D register
@1 //6 load memory address 1
M=D //7 move D register to address 1
@3 //8 load value of 3 into A register
D=A //9 move A to D register
@2 //10 load memory address 2
M=D //11 move D register to address 2
@2 //12 load value of 2 into A register
D=A //13 move A to D register
@3 //14 load memory address 3
M=D //15 move D register to address 3
@1 //16 load value of 1 into A register
D=A //17 move A to D register
@4 //18 load memory address 4
M=D //19 move D register to address 4
@0 //20 load value of 0 into A register
D=A //21 move A to D register
@5 //22 load memory address 5
M=D //23 move D register to address 5
//
// initialize i variable with value of 1
@0 //24 load value of 0 into A register
D=A //25 move A to D register
@10 //26 load memory address 10
M=D //27 move D register to address 10
//
// test i to make sure it is still less than 6
@10 //28 load address 10
D=M //29 move value in address to D register
@6 //30 load value of 6 into A register
D=D-A //31 subtract D register from A register and store in D
@48 //32 load program counter 48 - end of loop
D;JGE //33 execute a jump if i is 6
//
// test A[i] to see if it is == 0
@10 //34 load address 10
A=M //35 move the value in address 10 to A register
D=M //36 move Memory to D register where we test for 0
@44 //37 load program counter with
D;JNE //38 jump if not equal to 0
//
// if the value of A[i] == 0 then assign 5 to it
@5 //39 load value of 5 to A register
D=A //40 move to D register
@10 //41 load address 10 (location of variable i)
A=M //42 move the value in address 10 to A register
M=D //43 move D register to memory
//
// increment the value of i variable
@10 //44 load memory address 10
M=M+1 //45 increment Memory address and store in D
@28 //46 load address 28 (beginning of loop)
D;JMP //47 jump to beginning of the loop
@50 //48 load program counter 50
D;JMP //49 execute unconditional Jump