; Title: CISS 360 Programming Assignment 2
;------------------------------------------------------------
; Description: This program asks user to enter a number (n) and
; it computes the sum of 1^2 + 2^2 + 3^2 +....+ n^2 and displays
; the sum.
;------------------------------------------------------------
; Programmer: Prajwal Shrestha
; Professor: Ronald J. Hart
;------------------------------------------------------------
; Date/Time: Tuesday, February 01, 2011 8:11 PM
;------------------------------------------------------------
.586
.MODEL FLAT
INCLUDE console_io.h ; header file for console input/output
.STACK 4096 ; reserve 4096-byte (1024 DWORD) stack
;------------------------------------------------------------
; Input/Output Facility
;------------------------------------------------------------
; Macro Operand
;
; put_ch DWORD/Reg (Displays character in parameter)
; get_ch None (Loads character from keyboard into EAX)
; put_str BYTE (Displays string beginning at given address)
; put_i DWORD/Reg (Displays signed integer value in parameter)
; put_u DWORD/Reg (Displays unsigned integer value in parameter)
; put_fp REAL4/Reg (Displays float value in parameter)
; get_i DWORD (Loads signed integer entered at keyboard into parameter)
; get_u DWORD (Loads unsigned integer entered at keyboard into parameter)
; get_fp REAL4 (Loads float entered at keyboard into parameter)
; get_str BYTE (Loads string entered at keyboard into parameter)
;------------------------------------------------------------
.DATA ;****************************************************
;* Data Section *
;****************************************************
prompt1 BYTE "Enter integer, n: ",0
prompt2 BYTE ", ",0
prompt3 BYTE " ",0
n DWORD 0
sum DWORD 0
value DWORD 0
sum_str BYTE "Sum of integer, n^2!: ",0
newline DWORD 10
.CODE ;****************************************************
;* Code Section *
;****************************************************
_MainProc PROC ; start of main program
rerun_main:
mov sum, 0 ; moving 0 into sum so that when we rerun the instuctions then it won't have previous sum!
put_ch newline ; for the newline
put_ch newline ; for the newline
put_str prompt1 ; prompt for the integer value
get_i n ; user input saved into n DWORD memory location.
mov ecx, n ; moving the value of n into accumulator register ecx
mov eax, 1 ; moving 1 into eax
loop_it:
mov value, eax ; move eax into value
mov ebx, eax ; move value of eax into ebx
imul ebx, value ; multiply value with ebx and put it in ebx
add sum, ebx ; adding ebx to sum and putting it in sum
put_i sum ; prints out the sum
cmp ecx, 1 ; ecx = 1 ?
je indenting ; if yes, then goto indenting
put_str prompt2 ; indenting the output only
indenting:
put_str prompt3 ; special display out for last element in the sum for indenting only!
inc eax ; adding eax by 1
loop loop_it ; loops back to loop_it untill ecx = 0
put_ch newline ; for the newline
put_ch newline ; for the newline
put_str sum_str ; displaying the message declared in "sum_str"
put_i sum ; outputting the sum value onto screen
put_ch newline ; for the newline
main_done:
done ; display completion/do-again message
cmp eax, 0 ; EAX = 0?
je rerun_main ; yes, go run program again
xor eax, eax ; exit with return code 0
ret
_MainProc ENDP
;------------------------------------------------------------
proc_name PROC
push ebp ; save base pointer
mov ebp, esp ; establish stack frame
;; push registers used by this proc
;; proc code inserted here
;; pop registers used by this proc
pop ebp ; restore base pointer
ret
proc_name ENDP
;----------------------------------------------------------------------
stat_flags MACRO
fstsw ax ; FPU status word to AX
sahf ; condition code bits to flags
ENDM
;----------------------------------------------------------------------
END ; end of source code
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.