Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Jun 2nd, 2011  |  syntax: ASM (NASM)  |  size: 0.96 KB  |  views: 209  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. %include "asm_io.inc"
  2.  
  3. segment .data
  4.  
  5.         prompt1 db "Bitte n (>=0) für die Ackermann-Berechnung eingeben: ",10,0
  6.         prompt2 db "Bitte m (>=0) für die Ackermann-Berechnung eingeben: ",10,0
  7.         prompt3 db "Das Ergebniss ist: ",0
  8.         promptError db "n und m müssen beide >= 0 sein",10,0
  9.         n dd 0
  10.         m dd 0
  11.        
  12. segment .bss
  13.  
  14. segment .data
  15.         global asm_main
  16. asm_main:
  17.         ENTER 0,0                               ;setup Routine
  18.         PUSHA
  19.         MOV eax, prompt1                ;ask for n
  20.         CALL print_string
  21.         CALL read_int
  22.         CMP eax, 0                              ;check n
  23.         JL inputError
  24.         MOV ebx, eax
  25.         MOV eax, prompt2                ;ask for m
  26.         CALL print_string
  27.         CALL read_int
  28.         CMP eax, 0                              ;check m
  29.         JL inputError
  30.         PUSH ebp
  31.         PUSH ebx                                ;push n
  32.         PUSH eax                                ;push m
  33.  
  34. ackermann:
  35.         MOV [n], [ebp+4]
  36.         MOV [m], [ebp+8]
  37.         CMP [n], 0
  38.         JE b1
  39.         CALL ackermann
  40.         POP [m]
  41.         POP [n]
  42.         POP ebp
  43. end:
  44.         POPA
  45.         MOV eax, 0                              ;return Value for C-driver
  46.         LEAVE
  47.         RET
  48.        
  49. inputError:                                     ;n or m was <0
  50.         MOV eax, promptError
  51.         CALL print_string
  52.         JMP end
  53.        
  54. b1: