So fix my code according to question: The Fibonacci sequence is a series of numbers n, where the k th number in the series is defined as nk = nk−1 + nk−2, and n0 = 0 and n1 = 1. The first 7 Fibonacci numbers are [0, 1, 1, 2, 3, 5, 8]. Write an x86 assembly program that displays one of the first 7 Fibonacci numbers. To receive full marks, your program should accept user input for the value of k. You program should then call a procedure that uses k as input and outputs the value nk. Solutions that hard code the Fibonacci sequence without calculation will receive no marks. Sample execution with user entering ‘5’: Enter a number (0-6): 5 The Fibonacci number of order 5 is 5. Code: data segment prompt db 'Enter a number (0-6): $' result_msg db 'The Fibonacci number of order $' fib_msg db ' is $' newline db 13, 10, '$' user_input db ? data ends stack1 segment stack db 100 dup(?) stack1 ends code segment assume cs:code, ds:data, ss:stack1 start: mov ax, data mov ds, ax mov ax, stack1 mov ss, ax input_loop: ; Display prompt mov ah, 09h lea dx, prompt int 21h ; Get user input mov ah, 01h int 21h sub al, '0' ; Convert ASCII to integer cmp al, 0 ; Validate input (0-6) jl input_loop ; If input < 0, ask again cmp al, 6 jg input_loop ; If input > 6, ask again mov user_input, al ; Store user input ; Call Fibonacci procedure call Fibonacci ; Display result message mov ah, 09h lea dx, result_msg int 21h ; Print user input (k) mov dl, user_input add dl, '0' mov ah, 02h int 21h ; Display "is" message mov ah, 09h lea dx, fib_msg int 21h ; Print Fibonacci number call PrintNum ; Print newline for formatting mov ah, 09h lea dx, newline int 21h ; Exit program mov ah, 4ch int 21h ;----------------------------------------------- ; Fibonacci Calculation ; Input: user_input (order) ; Output: AX (Fibonacci result) ;----------------------------------------------- Fibonacci: mov al, user_input ; Load k into AL cmp al, 0 je Fibonacci_Zero ; If k == 0, return 0 cmp al, 1 je Fibonacci_One ; If k == 1, return 1 ; Initialize for Fibonacci calculation mov si, 0 ; n_0 = 0 mov di, 1 ; n_1 = 1 mov cl, user_input ; Load user input into CL sub cl, 1 ; Adjust for loop (since we already have n_1) Fibonacci_Loop: mov ax, si ; ax = n_(k-2) add ax, di ; ax = n_(k-1) + n_(k-2) mov si, di ; n_(k-2) = n_(k-1) mov di, ax ; n_(k-1) = n_k dec cl ; Decrement counter jnz Fibonacci_Loop ; Repeat until counter is 0 mov ax, di ; The result (Fibonacci number) is in di ret Fibonacci_Zero: mov ax, 0 ; Return 0 for Fibonacci(0) ret Fibonacci_One: mov ax, 1 ; Return 1 for Fibonacci(1) ret ;----------------------------------------------- ; PrintNum Procedure ; Input: AX (number to print) ; Output: None (prints the number) ;----------------------------------------------- PrintNum: mov cx, 0 ; Initialize digit counter mov bx, 10 ; Base 10 for division ConvertLoop: xor dx, dx ; Clear DX for division div bx ; AX = AX / 10, DX = AX % 10 push dx ; Push remainder (digit) onto stack inc cx ; Increment digit count test ax, ax ; Check if AX == 0 jnz ConvertLoop ; If not, continue loop PrintLoop: pop dx ; Pop digit from stack add dl, '0' ; Convert digit to ASCII mov ah, 02h ; DOS interrupt to print a character int 21h ; Call DOS interrupt to print the character loop PrintLoop ; Repeat for all digits ret code ends end start