ble,a L5 add %o0,%g2,%o0 L3: retl nop MIPS-I (SGI spinoff) assembleris sumto: li $3, 0 li $2, 0 blt $4, $0, L3 L5: addu $3, $3, $2 addu $2, $2, 1 ble $2, $4, L5 L3: move $2, $3 Jr $31 Intel 386, 486, Pentium _sumto: pushl %ebp movl %esp,%ebp movl 8(%ebp),%ecx xorl %eax,%eax xorl %edx,%edx cmpl %ecx,%eax .align 2 L5: addl %edx,%eax incl %edx cmpl %ecx,%edx L3: eave ret FORTRAN INTEGER FUNCTI0N sumto(n) isum = 0 DO i 10 = 0,n isum = isum + i 10 CONTINUE sumto = isum RETURN END COBOL PROCEDURE SUMTO USING N, Answer. Begin. PERFORM VARYING LoopCount FROM 0 BY 1 UNTIL LoopCount GREATER THAN N
L5: add %g2,1 ,%g2 ; i = i + 1. cmp %g2,%g3 ; Kui i<=n ... ble,a L5 ; ... mine L5 add %o0,%g2,%o0 ; ,aga enne sum = sum + i. L3: retl ; Valmis... nop ; ,aga enne ära tee midagi! ITK 2007, Kalev Pihl Sissejuhatus informaatikasse 12 Sumto ja Intel 386, 486, Pentium, ... •386 on vähe registreid, argument saadetakse hariliku mälu kaudu. Resultaat saadetakse registris %edx. _sumto: pushl %ebp ; Loome ''framepointer’’-i movl %esp,%ebp ; movl 8(%ebp),%ecx ; Võta n. xorl %eax,%eax ; sum = 0 xorl %edx,%edx ; i = 0 cmpl %ecx,%eax ; Kui i>n ... jg L3 ; ... mine L3 .align 2 L5: addl %edx,%eax ; sum = sum + i incl %edx ; i = i+1 cmpl %ecx,%edx ; Kui i<=n ... jle L5 ; ... mine L5 L3: leave ; Taasta ebp. ret ; Valmis! ITK 2007, Kalev Pihl Sissejuhatus informaatikasse 13 FORTRAN INTEGER FUNCTI0N sumto(n) isum = 0 DO i 10 = 0,n isum = isum + i 10 CONTINUE sumto = isum RETURN END ITK 2007, Kalev Pihl Sissejuhatus informaatikasse 14 LISP