Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Project #1 part 2
- ; Algorithmic Program
- TAB EQU 09h ;Tab
- .data
- msgAskA BYTE "Please enter value for A: ",0
- msgAskB BYTE "Please enter value for B: ",0
- msgAskC BYTE "Please enter value for C: ",0
- msgAskLen BYTE "Please enter value for Length: ",0
- msgAskWid BYTE "Please enter value for Width: ",0
- msgShowA BYTE "Value of A is: ", 0
- msgShowB BYTE "Value of B is: ", 0
- msgShowC BYTE "Value of C is: ", 0
- msgShowD BYTE "Value of D is: ", 0
- msgShowE BYTE "Value of E is: ", 0
- msgShowF BYTE "Value of F is: ", 0
- msgShowG BYTE "Value of G is: ", 0
- msgShowH BYTE "Value of H is: ", 0
- perm1 BYTE "Perimeter equals to: ", 0
- area1 BYTE "Area equals to : ",0
- rat1 BYTE "Ratio is : ",0
- msgQuot BYTE "...Quotient: ",0
- msgRem BYTE "...Remainder: ",0
- A_v SQWORD 0
- B_v SQWORD 0
- C_v SQWORD 0
- D_v SQWORD 0
- E_v SQWORD 0
- F_v SQWORD 0
- G_v SQWORD 0
- H_v SQWORD 0
- Length_v QWORD 0
- Width_v QWORD 0
- Perimeter QWORD 0
- Area QWORD 0
- ;;ratio QWORD 0 DELETED, SPLIT INTO QUOTIENT AND REMAINDERA
- Quotient QWORD 0
- Remainder QWORD 0
- ;Calling procedures
- WriteString proto
- Crlf proto
- ReadInt64 PROTO
- WriteInt64 PROTO
- ExitProcess PROTO
- .code
- main PROC
- ;msgShow the user to enter value for A
- mov rdx, OFFSET msgAskA
- call WriteString
- call ReadInt64
- mov A_v, rax ;store it in memory
- ;msgShow the user to enter value for B
- mov rdx, OFFSET msgAskB
- call WriteString
- call ReadInt64
- mov B_v, rax ;store it in memory
- ;msgShow the user to enter value for C
- mov rdx, OFFSET msgAskC
- call WriteString
- call ReadInt64
- mov C_v, rax ;store it in memory
- ;Display A
- mov rdx, OFFSET msgShowA
- call WriteString
- mov rax, A_v
- call WriteInt64
- call crlf
- ;Display B
- mov rdx, OFFSET msgShowB
- call WriteString
- mov rax, B_v
- call WriteInt64
- call crlf
- ;Display C
- mov rdx, OFFSET msgShowC
- call WriteString
- mov rax, C_v
- call WriteInt64
- call crlf
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;MOVED asking for length and width till after A-H stuff
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;D= A+B+C
- ;;; mov rax, A_v ;rax = A
- ;;; mov rax, B_v ;rax = B ERROR
- mov rax, A_v ;A
- add rax, B_v ;A+B
- add rax, C_v ;A+B+C
- mov D_v, rax ;D = A+B+C
- mov rdx, OFFSET msgShowD
- call WriteString
- mov rax, D_v
- call WriteInt64
- call crlf
- ;E = A – B – C + D
- mov rax, A_v ;rax = A
- sub rax, B_v ; rax = A-B
- sub rax, C_v ;rax = A – B – C
- add rax, D_v;rax = A – B – C + D
- mov E_v, rax ; E = A – B – C + D
- mov rdx, OFFSET msgShowE
- call WriteString
- mov rax, E_v
- call WriteInt64
- call crlf
- ;F = A – (B – C);
- Mov rax, B_v ;rax = B
- sub rax, C_v ;rax = B-C
- sub rax, A_v; rax = A – (B – C)
- mov F_v, rax; F = A – (B – C)
- mov rdx, OFFSET msgShowF
- call WriteString
- mov rax, F_v
- call WriteInt64
- call crlf
- ;G= 5B + 7A – 8C
- imul rax, B_v, 5
- imul rbx, A_v, 7
- imul rcx, C_v, 8
- add rax, rbx
- sub rax, rcx
- mov G_v, rax ; G= 5B + 7A – 8C
- mov rdx, OFFSET msgShowG
- call WriteString
- mov rax, G_v
- call WriteInt64
- call crlf
- ;H = – ( – A + 2B – C + D).
- mov rax, B_v
- add rax, rax ; 2B
- sub rax, C_v; 2B- C
- add rax, D_v ; 2B - C + D
- sub rax, A_v ; – A + 2B – C + D
- neg rax
- mov H_v, rax ; H = – ( – A + 2B – C + D)
- mov rdx, OFFSET msgShowH
- call WriteString
- mov rax, H_v
- call WriteInt64
- call crlf
- ;************************************
- ; 2b. Length,width
- ;************************************
- ;msgShow the user to enter Length
- mov rdx, OFFSET msgAskLen
- call WriteString
- call ReadInt64
- mov Length_v, rax ;store it in memory
- ;msgShow the user to enter Width
- mov rdx, OFFSET msgAskWid
- call WriteString
- call ReadInt64
- mov Width_v, rax ;store it in memory
- ;Perimeter
- ;;; mov rax, Length_v ;rax = Length CONVERTED TO IMUL
- ;;; add rax, rax ; 2*Length
- ;;; add rax, Width_v ; 2*Length + Width CONVERTED TO IMUL
- ;;; add rax, Width_v ; 2*Length + 2*Width
- imul rax, Length_v, 2
- imul rbx, Width_v, 2
- add rax, rbx ;Perimeter = 2*Length + 2*Width
- mov Perimeter, rax
- ;Display perimeter
- mov rdx, OFFSET perm1
- call WriteString
- mov rax, Perimeter
- call WriteInt64
- call crlf
- ;;;
- ;;;No idea what you trying to do with loop
- COMMENT !
- ;Area = Length*Width
- mov rax, 0 ; rax = 0
- mov rcx, Length_v
- LOOP7:
- add rax, Width_v ; rax = Length*Width
- loop LOOP7
- mov Area, rax ;Area = Length*Width
- !
- ;;;FIX
- ;Area
- mov rax, Length_v
- mul Width_v ;Area= length*width
- mov Area, rax ;store area
- ;Display area
- mov rdx, OFFSET area1
- call WriteString
- mov rax, Area
- call WriteInt64
- call crlf
- ; Ratio = Area/ Perimeter
- ;;;
- ;;;idiv rax DELETED (was dividing RAX by RAX)
- ;;;
- ;clear rdx,rax prior to division
- xor rdx, rdx
- xor rax, rax
- mov rax, Area
- div Perimeter ;area/perimeter
- mov Quotient, rax
- mov Remainder, rdx
- ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- ; Div: quotient stored in RAX
- ; remainder stored in RDX
- ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- ;Display quotient and remainder
- mov rdx, OFFSET rat1 ;"Ratio is : "
- call WriteString
- call Crlf
- mov rdx, OFFSET msgQuot
- call WriteString ;"Quotient: "
- mov rax, Quotient
- call WriteInt64
- call Crlf
- mov rdx, OFFSET msgRem
- call WriteString ;"Remainder: "
- mov rax, Remainder
- call WriteInt64
- call Crlf
- call ExitProcess
- main endp
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement