У меня возникли некоторые проблемы, когда я пытаюсь вызвать функцию языка ассемблера (x86) из программы на языке C.Интерфейс языка ассемблера (x86) с языком C
Мой код сборки заключается в следующем:
.model small
.code
.stack 100h
public _putchar
;---------------------
;Putchar proc
;---------------------
_putchar proc
push bp
mov bp,sp
mov dl,[bp+4]
mov ah,2
int 21h
pop bp
ret
_putchar endp
end
Затем я называю эту процедуру из C следующим образом:
extern void putchar(char x);
int main(void)
{
putchar('x');
return 0;
}
Для компиляции и ссылку, я использую следующие командные строки (в порядке)
tcc -c -ms pchar.c
tasm putchar.asm
tlink pchar putchar, pchar
до сих пор мы получили .obj от putchar.asm, и EXE-файл из связывающей 2 файлов.
Я должен также упомянуть, что мы (в классе) использовать версию турбо ассемблере 2,01 (TASM) и ссылка турбо версии 2.0 (TLINK) и версия Turbo C 2,01 (TCC)
Проблема возникает здесь, когда я запускаю файл .exe, я получаю вывод 'x', как и должно быть, , но он застрял там, он не заканчивается.
Буду признателен за любую помощь, заблаговременно.
Невозможно выявить какую-либо очевидную проблему. Используйте отладчик, чтобы узнать, вернется ли функция. Кроме того, расскажите своей школе, что использование таких устаревших материалов делает обучение более сложным без какой-либо выгоды. – Jester