Прерывание в ассемблерной вставке выдаёт ошибку - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д