Прерывание в ассемблерной вставке выдаёт ошибку - Free Pascal
Формулировка задачи:
Здравствуйте, начал изучать ассемблерный вставки в Free Pascal, хочу с помощью стандартного DOS'овского прерывания вывести строку s, при компиляции ошибок нету, но при запуске выдаёт ошибку 216. Описание прерывания брал отсюда http://www.codenet.ru/progr/dos/dos_0017.php . Вот сам код Я рассуждал так, в регистр ds мы помещаем адрес на строку s, а в регистр dx его смещение, но так как мы хотим выводить с первого байта строки, то смещение равно нулю, но программа почему-то отказывается работать. Спасибо за помощь!
program outs;
{$asmmode intel}
var
s: string;
begin
s:='Test$';
asm
mov ah, 09h
mov ds, [s]
mov dx, 0h
int 21h
end;
readln();
end.Решение задачи: «Прерывание в ассемблерной вставке выдаёт ошибку»
textual
Листинг программы
mov ah, 09h mov edx,offset s int 21h
Объяснение кода листинга программы
В данном коде выполняется простая задача вывода строки на экран с помощью языка ассемблера.
- mov ah, 09h - устанавливает код операции в регистре AH на 09h, что означает команду вывода строки на экран.
- mov edx,offset s - перемещает адрес строки в регистр EDX, который используется для указания на начало строки в памяти.
- int 21h - выполняет команду, заданную в регистре AH (в данном случае 09h), и передает управление на следующую команду в программе. В результате выполнения данного кода на экран будет выведена строка, адрес которой находится в регистре EDX.