0% found this document useful (0 votes)
3 views

Assignment Unit 7

The document outlines four programming problems and their solutions in assembler language. Each problem demonstrates different programming constructs such as loops and conditional statements, with corresponding assembler code provided for each. The problems include decrementing a variable in a for loop, using if-then-else statements, implementing a while loop, and traversing an array with conditional assignments.

Uploaded by

InvincibleReine
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views

Assignment Unit 7

The document outlines four programming problems and their solutions in assembler language. Each problem demonstrates different programming constructs such as loops and conditional statements, with corresponding assembler code provided for each. The problems include decrementing a variable in a for loop, using if-then-else statements, implementing a while loop, and traversing an array with conditional assignments.

Uploaded by

InvincibleReine
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

// Problem 1

// for loop
//
// J=5
// for(i=1; i<5; i++) {
// j--
// }
//
//Assembler Language

//j = address RAM[0]


//i = address RAM[1]
//
//PC comments
@5 //0 load value 5 into A register
D=A //1 move value of A register to D register
@0 //2 load memory address 0
M=D //3 move register D to address 0
@5 //4 load value 5 to A register
D=A-D //5 subtract D register from A register
@1 //6 load value 1 to A register
D=D+A //7 add value A to D register
@1 //8 load memory address 1
M=D //9 move register D to address 1
@1 //10 load memory address 1
D=M //11 move value in address 1 to D register
@5 //12 load value 5 to A register
D=A-D //13 subtract D register from A register
@0 //14 load memory address 0
M=D //15 move value in address 0 to D register
@20 //16 load program counter address 20
D;JLE //17 execute a jump to address 20 if i is 5
@5 //18 load program counter address 5
0;JMP //19 execute a jump to address 5

// 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

//i = address RAM[0]


//j = address RAM[1]
//
//PC
@0 //0 load value 0 into A register
D=A //1 move value of A into D register
@0 //2 load memory address 0
M=D //3 move value of D into address 0
//
// initilize variable j with value of 0
@0 //4 load value 0 into A register
D=A //5 move value of A into D register
@1 //6 load memory address 1
M=D //7 move value of D into address 1
//
// loop while i = 0
@1 //8 load memory address 1
D=M //9 move value of address 1 into D register
@1 //10 load memory address 1
D=D+1 //11 add 1 to value of D
@1 //12 load memory address 1
M=D //13 move value of D into address 1
@5 //14 load value 5 into A register
D=A-D //15 subtract value of D from A
@8 //16 load program counter address
D;JGT //17 execute a jump if D < 5
//
// end loop at j = 5
@1 //18 load memory address 1
D=M //19 move value in address into D register
@0 //20 load memory address 0
M=D //21 move value of D into address 0

// 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

You might also like