gcm.s
上传用户:wecan5
上传日期:2021-07-24
资源大小:529k
文件大小:1k
源码类别:

模拟服务器

开发平台:

C/C++

  1. ;*********** WINDLX Ex.1: Greatest common measure *************
  2. ;*********** (c) 1991 G黱ther Raidl   *************
  3. ;*********** Modified 1992 Maziar Khosravipour   *************
  4. ;------------------------------------------------------------------------
  5. ; Program begins at symbol main
  6. ; requires module INPUT
  7. ; Read two positive integer numbers from stdin, calculate the gcm
  8. ; and write the result to stdout
  9. ;------------------------------------------------------------------------
  10. .data
  11. ;*** Prompts for input
  12. Prompt1: .asciiz  "First Number:"
  13. Prompt2: .asciiz  "Second Number: "
  14. ;*** Data for printf-Trap
  15. PrintfFormat: .asciiz  "gcM=%dnn"
  16. .align 2
  17. PrintfPar: .word PrintfFormat
  18. PrintfValue: .space 4
  19. .text
  20. .global main
  21. main:
  22. ;*** Read two positive integer numbers into R1 and R2
  23. addi r1,r0,Prompt1
  24. jal InputUnsigned ;read uns.-integer into R1
  25. add r2,r1,r0 ;R2 <- R1
  26. addi r1,r0,Prompt2
  27. jal InputUnsigned ;read uns.-integer into R1
  28. Loop: ;*** Compare R1 and R2
  29. seq r3,r1,r2 ;R1 == R2 ?
  30. bnez r3,Result
  31. sgt r3,r1,r2 ;R1 > R2 ?
  32. bnez r3,r1Greater
  33. r2Greater: ;*** subtract r1 from r2
  34. sub r2,r2,r1
  35. j Loop
  36. r1Greater: ;*** subtract r2 from r1
  37. sub r1,r1,r2
  38. j Loop
  39. Result:  ;*** Write the result (R1)
  40. sw PrintfValue,r1
  41. addi r14,r0,PrintfPar
  42. trap 5
  43. ;*** end
  44. trap 0