%include "asm_io.inc"
segment .data
prompt1 db "Bitte n (>=0) für die Ackermann-Berechnung eingeben: ",10,0
prompt2 db "Bitte m (>=0) für die Ackermann-Berechnung eingeben: ",10,0
prompt3 db "Das Ergebniss ist: ",0
promptError db "n und m müssen beide >= 0 sein",10,0
n dd 0
m dd 0
segment .bss
segment .data
global asm_main
asm_main:
ENTER 0,0 ;setup Routine
PUSHA
MOV eax, prompt1 ;ask for n
CALL print_string
CALL read_int
CMP eax, 0 ;check n
JL inputError
MOV ebx, eax
MOV eax, prompt2 ;ask for m
CALL print_string
CALL read_int
CMP eax, 0 ;check m
JL inputError
PUSH ebp
PUSH ebx ;push n
PUSH eax ;push m
ackermann:
MOV [n], [ebp+4]
MOV [m], [ebp+8]
CMP [n], 0
JE b1
CALL ackermann
POP [m]
POP [n]
POP ebp
end:
POPA
MOV eax, 0 ;return Value for C-driver
LEAVE
RET
inputError: ;n or m was <0
MOV eax, promptError
CALL print_string
JMP end
b1: