Ассемблер: 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
После ввода буквы программа зависает...
Насколько я понимаю, это связано с неправильным возвращением из процедуры. Подскажите, пожалуйста, как можно исправить.