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

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

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

Здравствуйте, начал изучать ассемблерный вставки в Free Pascal, хочу с помощью стандартного DOS'овского прерывания вывести строку s, при компиляции ошибок нету, но при запуске выдаёт ошибку 216. Описание прерывания брал отсюда http://www.codenet.ru/progr/dos/dos_0017.php . Вот сам код
Листинг программы
  1. program outs;
  2. {$asmmode intel}
  3. var
  4. s: string;
  5. begin
  6. s:='Test$';
  7. asm
  8. mov ah, 09h
  9. mov ds, [s]
  10. mov dx, 0h
  11. int 21h
  12. end;
  13. readln();
  14. end.
Я рассуждал так, в регистр ds мы помещаем адрес на строку s, а в регистр dx его смещение, но так как мы хотим выводить с первого байта строки, то смещение равно нулю, но программа почему-то отказывается работать. Спасибо за помощь!

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

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

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

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

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

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут