add Mult.asm
This commit is contained in:
		
							
								
								
									
										57
									
								
								projects/04/mult/Mult.asm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								projects/04/mult/Mult.asm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
// This file is part of www.nand2tetris.org
 | 
			
		||||
// and the book "The Elements of Computing Systems"
 | 
			
		||||
// by Nisan and Schocken, MIT Press.
 | 
			
		||||
// File name: projects/04/Mult.asm
 | 
			
		||||
 | 
			
		||||
// Multiplies R0 and R1 and stores the result in R2.
 | 
			
		||||
// (R0, R1, R2 refer to RAM[0], RAM[1], and RAM[2], respectively.)
 | 
			
		||||
//
 | 
			
		||||
// This program only needs to handle arguments that satisfy
 | 
			
		||||
// R0 >= 0, R1 >= 0, and R0*R1 < 32768.
 | 
			
		||||
 | 
			
		||||
// Put your code here.
 | 
			
		||||
 | 
			
		||||
// variable names are selfexplanatory
 | 
			
		||||
// itr temporary register at RAM[16]
 | 
			
		||||
// sum temporary register at RAM[17]
 | 
			
		||||
@itr
 | 
			
		||||
M=0
 | 
			
		||||
@sum
 | 
			
		||||
M=0
 | 
			
		||||
 | 
			
		||||
// loop declaration
 | 
			
		||||
// D = R1 - itr
 | 
			
		||||
// if 0 jump to @STOP
 | 
			
		||||
// else continue
 | 
			
		||||
    (LOOP)
 | 
			
		||||
@itr
 | 
			
		||||
D=M
 | 
			
		||||
@R1
 | 
			
		||||
D=D-M
 | 
			
		||||
@STOP
 | 
			
		||||
D;JEQ
 | 
			
		||||
 | 
			
		||||
// sum = R0 + sum
 | 
			
		||||
// itr = itr + 1
 | 
			
		||||
@R0
 | 
			
		||||
D=M
 | 
			
		||||
@sum
 | 
			
		||||
M=D+M
 | 
			
		||||
@itr
 | 
			
		||||
M=M+1
 | 
			
		||||
 | 
			
		||||
// back to loop declaration
 | 
			
		||||
@LOOP
 | 
			
		||||
0;JMP
 | 
			
		||||
 | 
			
		||||
// R2 = sum
 | 
			
		||||
    (STOP)
 | 
			
		||||
@sum
 | 
			
		||||
D=M
 | 
			
		||||
@R2
 | 
			
		||||
M=D
 | 
			
		||||
 | 
			
		||||
// loopy loop
 | 
			
		||||
    (END)
 | 
			
		||||
@END
 | 
			
		||||
0;JMP
 | 
			
		||||
		Reference in New Issue
	
	Block a user