Difference between revisions of "Assembly Language Division"

From TRCCompSci - AQA Computer Science
Jump to: navigation, search
Line 10: Line 10:
 
  10 END:OUT R2,4
 
  10 END:OUT R2,4
 
  11    HALT
 
  11    HALT
 +
 +
Line 1 & 2 will get the two numbers to divide.
 +
 +
Line 3 will clear register 2 and make sure its set to zero.
 +
 +
Line 4 is the loop label and it will subtract the second number from the first.
 +
 +
Line 5 will increment register 2 to count the number of subtractions we make.
 +
 +
Line 6 compares register 0 with zero.
 +
 +
Line 7 if the compare is greater than we still have subtractions to make.
 +
 +
Line 8 if the compare was equal, then we have completed and the number divides exactly.
 +
 +
Line 9 is reached if the compare was less than zero, so the last subtraction was one too far, so minus 1 from register 2.
 +
 +
Line 10 is the end label and will output the answer.
 +
 +
Line 11 is the halt.

Revision as of 09:08, 14 January 2019

1      INP R0,2
2      INP R1,2
3      MOV R2,#0
4 LOOP:SUB R0,R0,R1
5      ADD R2,R2,#1
6      CMP R0,#0
7      BGT LOOP
8      BEQ END
9      SUB R2,R2,#1
10 END:OUT R2,4
11     HALT

Line 1 & 2 will get the two numbers to divide.

Line 3 will clear register 2 and make sure its set to zero.

Line 4 is the loop label and it will subtract the second number from the first.

Line 5 will increment register 2 to count the number of subtractions we make.

Line 6 compares register 0 with zero.

Line 7 if the compare is greater than we still have subtractions to make.

Line 8 if the compare was equal, then we have completed and the number divides exactly.

Line 9 is reached if the compare was less than zero, so the last subtraction was one too far, so minus 1 from register 2.

Line 10 is the end label and will output the answer.

Line 11 is the halt.