Advertisement
axyd

asm 64 p1

May 17th, 2017
351
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.36 KB | None | 0 0
  1. ; Project #1 part 2
  2. ; Algorithmic Program
  3.  
  4. TAB         EQU 09h     ;Tab
  5.  
  6. .data
  7. msgAskA     BYTE    "Please enter value for A: ",0
  8. msgAskB     BYTE    "Please enter value for B: ",0
  9. msgAskC     BYTE    "Please enter value for C: ",0
  10. msgAskLen   BYTE    "Please enter value for Length: ",0
  11. msgAskWid   BYTE    "Please enter value for Width: ",0
  12. msgShowA    BYTE    "Value of A is: ", 0
  13. msgShowB    BYTE    "Value of B is: ", 0
  14. msgShowC    BYTE    "Value of C is: ", 0
  15. msgShowD    BYTE    "Value of D is: ", 0
  16. msgShowE    BYTE    "Value of E is: ", 0
  17. msgShowF    BYTE    "Value of F is: ", 0
  18. msgShowG    BYTE    "Value of G is: ", 0
  19. msgShowH    BYTE    "Value of H is: ", 0
  20. perm1       BYTE    "Perimeter equals to: ", 0
  21. area1       BYTE    "Area equals to : ",0
  22. rat1        BYTE    "Ratio is : ",0
  23. msgQuot     BYTE    "...Quotient: ",0
  24. msgRem      BYTE    "...Remainder: ",0
  25. A_v         SQWORD  0
  26. B_v         SQWORD  0
  27. C_v         SQWORD  0
  28. D_v         SQWORD  0
  29. E_v         SQWORD  0
  30. F_v         SQWORD  0
  31. G_v         SQWORD  0
  32. H_v         SQWORD  0
  33. Length_v    QWORD   0
  34. Width_v     QWORD   0
  35. Perimeter   QWORD   0
  36. Area        QWORD   0
  37. ;;ratio     QWORD   0   DELETED, SPLIT INTO QUOTIENT AND REMAINDERA
  38. Quotient    QWORD   0
  39. Remainder   QWORD   0
  40.  
  41. ;Calling procedures
  42.  
  43. WriteString proto
  44. Crlf proto
  45. ReadInt64 PROTO
  46. WriteInt64 PROTO
  47. ExitProcess PROTO
  48.  
  49. .code  
  50.  main PROC
  51.  
  52. ;msgShow the user to enter value for A
  53.     mov rdx, OFFSET msgAskA
  54.     call WriteString
  55.     call ReadInt64
  56.     mov A_v, rax ;store it in memory
  57.  
  58.     ;msgShow the user to enter value for B
  59.     mov rdx, OFFSET msgAskB
  60.     call WriteString
  61.     call ReadInt64
  62.     mov B_v, rax ;store it in memory
  63.  
  64.     ;msgShow the user to enter value for C
  65.     mov rdx, OFFSET msgAskC
  66.     call WriteString
  67.     call ReadInt64
  68.     mov C_v, rax ;store it in memory
  69.  
  70. ;Display A
  71.     mov rdx, OFFSET msgShowA
  72.     call WriteString
  73.     mov rax, A_v
  74.     call WriteInt64
  75.     call crlf
  76. ;Display B
  77.     mov rdx, OFFSET msgShowB
  78.     call WriteString
  79.     mov rax, B_v
  80.     call WriteInt64
  81.     call crlf
  82. ;Display C
  83.     mov rdx, OFFSET msgShowC
  84.     call WriteString
  85.     mov rax, C_v
  86.     call WriteInt64
  87.     call crlf
  88.  
  89. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  90. ;;;MOVED asking for length and width till after A-H stuff
  91. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  92.  
  93. ;D= A+B+C
  94. ;;; mov rax, A_v ;rax = A      
  95. ;;; mov rax, B_v ;rax = B       ERROR
  96.     mov rax, A_v    ;A
  97.     add rax, B_v    ;A+B
  98.     add rax, C_v    ;A+B+C
  99.     mov D_v, rax    ;D = A+B+C
  100.  
  101.     mov rdx, OFFSET msgShowD
  102.     call WriteString
  103.     mov rax, D_v
  104.     call WriteInt64
  105.     call crlf
  106.    
  107.  
  108. ;E = A – B – C + D
  109.     mov rax, A_v ;rax = A
  110.     sub rax, B_v ; rax = A-B
  111.     sub rax, C_v ;rax =  A – B – C
  112.     add rax, D_v;rax = A – B – C + D
  113.     mov E_v, rax ; E =  A – B – C + D
  114.  
  115.     mov rdx, OFFSET msgShowE
  116.     call WriteString
  117.     mov rax, E_v
  118.     call WriteInt64
  119.     call crlf
  120.    
  121.  
  122. ;F = A – (B – C);
  123.     Mov rax, B_v ;rax = B
  124.     sub rax, C_v ;rax = B-C
  125.     sub rax, A_v; rax = A – (B – C)
  126.     mov F_v, rax; F = A – (B – C)
  127.  
  128.     mov rdx, OFFSET msgShowF
  129.     call WriteString
  130.     mov rax, F_v
  131.     call WriteInt64
  132.     call crlf
  133.  
  134. ;G= 5B + 7A – 8C
  135.     imul rax, B_v, 5
  136.     imul rbx, A_v, 7
  137.     imul rcx, C_v, 8
  138.     add rax, rbx
  139.     sub rax, rcx
  140.     mov G_v, rax ; G= 5B + 7A – 8C
  141.  
  142.     mov rdx, OFFSET msgShowG
  143.     call WriteString
  144.     mov rax, G_v
  145.     call WriteInt64
  146.     call crlf  
  147.  
  148. ;H =( – A + 2B – C + D).
  149.     mov rax, B_v
  150.     add rax, rax ; 2B
  151.     sub rax, C_v; 2B- C
  152.     add rax, D_v ; 2B - C + D
  153.     sub rax, A_v ; – A + 2B – C + D
  154.     neg rax
  155.     mov H_v, rax ;  H =( – A + 2B – C + D)
  156.  
  157.     mov rdx, OFFSET msgShowH
  158.     call WriteString
  159.     mov rax, H_v
  160.     call WriteInt64
  161.     call crlf
  162.  
  163. ;************************************
  164. ;           2b. Length,width
  165. ;************************************
  166.     ;msgShow the user to enter Length
  167.     mov rdx, OFFSET msgAskLen
  168.     call WriteString
  169.     call ReadInt64
  170.     mov Length_v, rax ;store it in memory
  171.  
  172.     ;msgShow the user to enter Width
  173.     mov rdx, OFFSET msgAskWid
  174.     call WriteString
  175.     call ReadInt64
  176.     mov Width_v, rax ;store it in memory
  177.    
  178.  
  179. ;Perimeter
  180. ;;; mov rax, Length_v ;rax = Length     CONVERTED TO IMUL
  181. ;;; add rax, rax ; 2*Length
  182. ;;; add rax, Width_v ; 2*Length + Width     CONVERTED TO IMUL
  183. ;;; add rax, Width_v ; 2*Length + 2*Width
  184.     imul rax, Length_v, 2
  185.     imul rbx, Width_v, 2
  186.     add rax, rbx            ;Perimeter = 2*Length + 2*Width
  187.     mov Perimeter, rax
  188.  
  189. ;Display perimeter
  190.     mov rdx, OFFSET perm1
  191.     call WriteString
  192.     mov rax, Perimeter
  193.     call WriteInt64
  194.     call crlf
  195.  
  196. ;;;
  197. ;;;No idea what you trying to do with loop
  198. COMMENT !
  199.     ;Area = Length*Width
  200.     mov rax, 0 ; rax = 0
  201.     mov rcx, Length_v
  202. LOOP7:
  203.     add rax, Width_v ; rax = Length*Width
  204.     loop LOOP7
  205.     mov Area, rax ;Area = Length*Width
  206. !
  207. ;;;FIX
  208.  
  209. ;Area
  210.     mov rax, Length_v
  211.     mul Width_v             ;Area= length*width
  212.     mov Area, rax           ;store area
  213. ;Display area
  214.     mov rdx, OFFSET area1
  215.     call WriteString
  216.     mov rax, Area
  217.     call WriteInt64
  218.     call crlf
  219.  
  220. ; Ratio = Area/ Perimeter
  221. ;;;
  222. ;;;idiv rax     DELETED (was dividing RAX by RAX)
  223. ;;;
  224.  
  225. ;clear rdx,rax prior to division
  226. xor rdx, rdx
  227. xor rax, rax
  228.     mov rax, Area
  229.     div Perimeter           ;area/perimeter
  230.  
  231.     mov Quotient, rax
  232.     mov Remainder, rdx
  233. ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  234. ;   Div: quotient stored in RAX
  235. ;        remainder stored in RDX
  236. ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  237. ;Display quotient and remainder
  238.     mov rdx, OFFSET rat1    ;"Ratio is : "
  239.     call WriteString
  240.     call Crlf
  241.  
  242.     mov rdx, OFFSET msgQuot
  243.     call WriteString        ;"Quotient: "
  244.     mov rax, Quotient
  245.     call WriteInt64
  246.     call Crlf
  247.  
  248.     mov rdx, OFFSET msgRem
  249.     call WriteString        ;"Remainder: "
  250.     mov rax, Remainder
  251.     call WriteInt64
  252.     call Crlf
  253.  
  254.     call ExitProcess
  255. main endp
  256. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement