Ассемблер: Far и возврат из процедур

Мне необходимо написать программу, состояющую из двух модулей. При этом точку входа разместить в первом модуле, затем передать управление во второй, где ввести символ и вернуть управление обратно в первый. в первом, соответственно, вывести букву и завершить программу.

Вот мой код:

file1

EXTRN input_char: far

s_seg SEGMENT para STACK 'STACK'
    db 100 dup(0)
s_seg ENDS

d_seg SEGMENT para public 'DATA'
    Char   db   (?)
d_seg ENDS

c_seg_1 SEGMENT para public 'CODE'
    assume CS:c_seg_1, DS:d_seg

New_Line: 
    mov ah, 2
    mov dl, 13
    int 21h
    mov dl, 10
    int 21h
    ret


PRINT_BIG_CHAR:
    mov Char, al
    sub Char, 32

    call New_Line

    mov dl, Char
    mov ah, 2
    int 21h

    ret


main:   

    mov ax, d_seg
    mov ds, ax

    call input_char
    call PRINT_BIG_CHAR

    mov ax, 4c00h
    int 21h

c_seg_1 ENDS
END main

file 2

PUBLIC input_char



c_seg_2 SEGMENT para public 'CODE'
    assume CS:c_seg_2
input_char:

        mov ah, 1
        int 21h

        ret


    c_seg_2 ENDS
    END

После ввода буквы программа зависает...

Насколько я понимаю, это связано с неправильным возвращением из процедуры. Подскажите, пожалуйста, как можно исправить.


Ответы (0 шт):