%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: