Advertisement
Guest User

Untitled

a guest
Jan 16th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.52 KB | None | 0 0
  1. # v171215
  2.  
  3. #########################################
  4. # Vorgabe: read_email
  5. #########################################
  6. # $a0: buffer
  7. # $v0: number of characters read
  8.  
  9. read_email:
  10. move $t0, $a0
  11.  
  12. # read mail from disk
  13. li $v0, 13
  14. la $a0, input_file
  15. li $a1, 0
  16. li $a2, 0
  17. syscall
  18.  
  19. # save fd
  20. move $t1, $v0
  21.  
  22. # read to buffer
  23. li $v0, 14
  24. move $a0, $t1
  25. move $a1, $t0 # address of buffer
  26. li $a2, 4096
  27. syscall
  28.  
  29. move $t0, $v0
  30.  
  31. # close file
  32. li $v0, 16
  33. move $a0, $t1 # fd
  34. syscall
  35.  
  36. move $v0, $t0
  37.  
  38. jr $ra
  39.  
  40. #########################################
  41. # Vorgabe: write_email
  42. #########################################
  43. # $a0: buffer
  44. # $a1: number of characters to write
  45. # $a2: truncate file
  46.  
  47. write_email:
  48. addi $sp, $sp, -16
  49. sw $ra, 0($sp)
  50. sw $s0, 4($sp)
  51. sw $s1, 8($sp)
  52. sw $s2, 12($sp)
  53.  
  54. move $s0, $a0
  55. move $s1, $a1
  56.  
  57. # open file
  58. li $v0, 13
  59. la $a0, output_file
  60.  
  61. bne $zero, $a2, write_email_trunc
  62. j write_email_notrunc
  63. write_email_trunc:
  64. li $a1, 0x241 # mode O_WRONLY | O_CREAT | O_TRUNC
  65. j write_email_else
  66.  
  67. write_email_notrunc:
  68. li $a1, 0x441 # mode O_WRONLY | O_CREAT | O_APPEND
  69.  
  70. write_email_else:
  71. li $a2, 0x1a4
  72. syscall # fd in $v0
  73.  
  74. move $s2, $v0 # save fd
  75.  
  76. li $v0, 15 # write to file
  77. move $a0, $s2
  78. move $a1, $s0
  79. move $a2, $s1
  80. syscall
  81.  
  82. # close file
  83. li $v0, 16
  84. move $a0, $s2
  85. syscall
  86.  
  87. lw $ra, 0($sp)
  88. lw $s0, 4($sp)
  89. lw $s1, 8($sp)
  90. lw $s2, 12($sp)
  91. addi $sp, $sp, 16
  92. jr $ra
  93.  
  94.  
  95. #########################################
  96. # Aufgabe 3: Ausgabe
  97. #########################################
  98. # a0: buffer
  99. # a1: buffer length
  100. # a2: relative position of subject
  101. # a3: spam flag
  102.  
  103. print_email:
  104. ### Register gemass Konventionen sichern
  105. addi $sp, $sp, -20
  106. sw $ra, 0($sp)
  107. sw $s0, 4($sp)
  108. sw $s1, 8($sp)
  109. sw $s2, 12($sp)
  110. sw $s3, 16($sp)
  111.  
  112. ### hier implementieren
  113.  
  114. move $s0, $a0
  115. move $s1, $a1
  116. move $s2, $a2
  117. move $s3, $a3
  118.  
  119. beq $s3, 0, no_spam
  120. move $a0, $s0
  121. move $a1, $a2
  122. li $a3, 0
  123. jal write_email
  124.  
  125. la $a0, spam_flag
  126. lw $a1, spam_flag_length
  127. li $a3, 0
  128. jal write_email
  129.  
  130. sub $s1, $s1, $s2
  131. add $s0, $s0, $s2
  132.  
  133. move $a0, $s0
  134. move $a1, $s1
  135. li $a3, 0
  136. jal write_email
  137. j end_write
  138.  
  139. no_spam:
  140.  
  141. move $a0, $s0
  142. move $a1, $s1
  143. li $a3, 0
  144. jal write_email
  145. j end_write
  146.  
  147. end_write:
  148. ### gesicherte Register wieder herstellen
  149. lw $ra, 0($sp)
  150. lw $s0, 4($sp)
  151. lw $s1, 8($sp)
  152. lw $s2, 12($sp)
  153. lw $s3, 16($sp)
  154. addi $sp, $sp, 20
  155. jr $ra
  156.  
  157.  
  158. #########################################
  159. #
  160.  
  161. #
  162. # data
  163. #
  164.  
  165. .data
  166.  
  167. input_file: .asciiz "C:\Users\jheis\Desktop\Rorg\email1"
  168. output_file: .asciiz "output"
  169. email_buffer: .space 4096
  170.  
  171. spam_flag: .asciiz "[SPAM] "
  172. spam_flag_length: .word 7
  173.  
  174. #
  175. # main
  176. #
  177.  
  178. .text
  179. .globl main
  180.  
  181. main:
  182. # Register sichern
  183. addi $sp, $sp, -12
  184. sw $ra, 0($sp)
  185. sw $s0, 4($sp)
  186. sw $s1, 8($sp)
  187.  
  188. # E-Mail einlesen
  189. la $a0, email_buffer
  190. jal read_email
  191.  
  192. la $a0, email_buffer
  193.  
  194. # Groesse
  195. move $a1, $v0
  196.  
  197. # Position des Subjekts
  198. li $a2, 292
  199.  
  200. # Spam
  201. li $a3, 1
  202.  
  203. # E-Mail ausgeben
  204. jal print_email
  205.  
  206. # Register wieder herstellen
  207. lw $ra, 0($sp)
  208. lw $s0, 4($sp)
  209. lw $s1, 8($sp)
  210. addi $sp, $sp, 12
  211. jr $ra
  212.  
  213. #
  214. # end main
  215. #
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement