Прерывание в ассемблерной вставке выдаёт ошибку - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, начал изучать ассемблерный вставки в Free Pascal, хочу с помощью стандартного DOS'овского прерывания вывести строку s, при компиляции ошибок нету, но при запуске выдаёт ошибку 216. Описание прерывания брал отсюда http://www.codenet.ru/progr/dos/dos_0017.php . Вот сам код
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.
Я рассуждал так, в регистр ds мы помещаем адрес на строку s, а в регистр dx его смещение, но так как мы хотим выводить с первого байта строки, то смещение равно нулю, но программа почему-то отказывается работать. Спасибо за помощь!

Решение задачи: «Прерывание в ассемблерной вставке выдаёт ошибку»

textual
Листинг программы
mov ah, 09h
mov edx,offset s 
int 21h

Объяснение кода листинга программы

В данном коде выполняется простая задача вывода строки на экран с помощью языка ассемблера.

  1. mov ah, 09h - устанавливает код операции в регистре AH на 09h, что означает команду вывода строки на экран.
  2. mov edx,offset s - перемещает адрес строки в регистр EDX, который используется для указания на начало строки в памяти.
  3. int 21h - выполняет команду, заданную в регистре AH (в данном случае 09h), и передает управление на следующую команду в программе. В результате выполнения данного кода на экран будет выведена строка, адрес которой находится в регистре EDX.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.727 из 5