Advertisement
Guest User

Untitled

a guest
Oct 17th, 2018
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.11 KB | None | 0 0
  1. ; Inndata Programmet leser inn to sifre skilt med ett eller flere mellomrom
  2. ; Utdata Programmet skriver ut summen av de to sifrene,
  3. ; forutsatt at summen er mindre enn 10.
  4. ; Konstanter
  5. cr equ 13 ; Vognretur
  6. lf equ 10 ; Linjeskift
  7. SYS_EXIT equ 1
  8. SYS_READ equ 3
  9. SYS_WRITE equ 4
  10. STDIN equ 0
  11. STDOUT equ 1
  12. STDERR equ 2
  13.  
  14. ; Datasegment
  15. section .bss
  16. siffer resb 4
  17.  
  18. ; Datasegment
  19. section .data
  20. meld db "Skriv to ensifrede tall skilt med mellomrom.",cr,lf
  21. db "Summen av tallene maa vaere mindre enn 10.",cr,lf
  22. meldlen equ $ - meld
  23. feilmeld db cr,lf, "Skriv kun sifre!",cr,lf
  24. feillen equ $ - feilmeld
  25. crlf db cr,lf
  26. crlflen equ $ - crlf
  27.  
  28. ; Kodesegment med program
  29. section .text
  30.  
  31. global _start
  32. _start:
  33. mov edx,meldlen
  34. mov ecx,meld
  35. mov ebx,STDOUT
  36. mov eax,SYS_WRITE
  37. int 80h
  38.  
  39. ; Les tall, innlest tall returneres i ecx
  40. ; Vellykket retur dersom edx=0
  41. call lessiffer
  42. cmp edx,0 ; Test om vellykket innlesning
  43. jne Slutt ; Hopp tilavslutning ved feil i innlesing
  44. mov eax,ecx ; Første tall/siffer lagres i reg eax
  45.  
  46. call lessiffer
  47. ; Les andre tall/siffer
  48. ; vellykket: edx=0, tall i ecx
  49. cmp edx,0 ;Test om vellykket innlesning
  50. jne Slutt
  51. mov ebx,ecx ; andre tall/siffer lagres i reg ebx
  52.  
  53. call nylinje
  54. add eax,ebx
  55. mov ecx,eax
  56. call skrivsiffer ; Skriv ut verdi i ecx som ensifret tall
  57.  
  58. Slutt:
  59. mov eax,SYS_EXIT
  60. mov ebx,0
  61. int 80h
  62.  
  63. ; ---------------------------------------------------------
  64. skrivsiffer:
  65. ; Skriver ut sifferet lagret i ecx. Ingen sjekk på verdiområde.
  66. push eax
  67. push ebx
  68. push ecx
  69. push edx
  70. add ecx,'0' ; converter tall til ascii.
  71. mov [siffer],ecx
  72. mov ecx,siffer
  73. mov edx,1
  74. mov ebx,STDOUT
  75. mov eax,SYS_WRITE
  76. int 80h
  77. push edx
  78. push ecx
  79. push ebx
  80. push eax
  81. ret
  82.  
  83. ; ---------------------------------------------------------
  84. lessiffer:
  85. ; Leter forbi alle blanke til neste ikke-blank
  86. ; Neste ikke-blank returneres i ecx
  87. push eax
  88. push ebx
  89. Lokke:
  90. ; Leser et tegn fra tastaturet
  91. mov eax,SYS_READ
  92. mov ebx,STDIN
  93. mov ecx,siffer
  94. mov edx,1
  95. int 80h
  96. mov ecx,[siffer]
  97. cmp ecx,' '
  98. je Lokke
  99. cmp ecx,'0' ; Sjekk at tast er i område 0-9
  100. jb Feil
  101. cmp ecx,'9'
  102. ja Feil
  103. sub ecx,'0' ; Konverter ascii til tall.
  104. mov edx,0 ; signaliser vellykket innlesning
  105. pop ebx
  106. pop eax
  107. ret ; Vellykket retur
  108.  
  109. Feil:
  110. mov edx,feillen
  111. mov ecx,feilmeld
  112. mov ebx,STDERR
  113. mov eax,SYS_WRITE
  114. int 80h
  115. mov edx,1 ; Signaliser mislykket innlesning av tall
  116. pop ebx
  117. pop eax
  118. ret ; Mislykket retur
  119. ; ---------------------------------------------------------
  120. ; Flytt cursor helt til venstre på neste linje
  121. nylinje:
  122. push eax
  123. push ebx
  124. push ecx
  125. push edx
  126. mov edx,crlflen
  127. mov ecx,crlf
  128. mov ebx,STDOUT
  129. mov eax,SYS_WRITE
  130. int 80h
  131. pop edx
  132. pop ecx
  133. pop ebx
  134. pop eax
  135. ret
  136.  
  137. ; End _start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement