Помощь - Поиск - Пользователи - Календарь
Полная версия: Создание программы на Pascal с использованием процедур на asm.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
vasiliy_09_05
Доброго всем времени суток. smile.gif
Дамы и господа, прошу Вашей помощи в написании программы на Pascal.
Имеется листинг процедур для непосредственной работы с контроллером жестких дисков ATA: 1) ЧТЕНИЕ СЕКТОРА ЖЕСТКОГО ДИСКА В РЕЖИМЕ LBA, 2) ПОСЛАТЬ КОМАНДУ ЗАДАННОМУ ДИСКУ, 3) ЧТЕНИЕ ИДЕНТИФИКАТОРА ЖЕСТКОГО ДИСКА. Необходимо, используя эти процедуры, написать программу на Pascal'е.
Так как опыта работы в асме у меня нет sad.gif то при создании pas-файла, Turbo Pascal выдал кучу ошибок.
1) Pushad/popad (Error 5: Syntax error) - Я как понимаю TP не меняет размещение стеков? ТО есть данные команды в TP неприемлемы?
2) строка
mov EAX,[SectorAddress]
и все подобные строки с регистром EAX (Error 3:Unknown identifier) - Если честно, вот это совсем не понял, почему TP ругается на регистр?
3) call SendCommandToHDD (Error 3:Unknown identifier) - здесь вызов процедуры, сегодня буду читать как из под asm вызывать процедуры ;
4) mov AX,[CS:MainDataSeg] (Error 3:Unknown identifier)- Как я понимаю идет обращение к разделу DATASEG, но у меня его нет, так как я его заменил паскалевскими переменными, какую именно переменную ему нужно я не пойму ;
5) mov AX,[BX+StandardHDDBases] (Error 155: Invalid combination of opcode and operands) - Видимо несоответствие переменных. Как я понимаю значение переменной берется в прямоугольные скобки, видимо StandardHDDBases - это ссылка а не значение;
По второй проблеме - TP 16-разрядная система, а EAX - регистр 32 разряда.
Скачал и установил Free Pascal, но там ошибок еще больше sad.gif
Буду очень благодарен за помощь в создании исполняемого файла smile.gif

vasiliy_09_05
Решил попробовать сделать программу на более "родном" для меня Delphi 2009.
Что самое удивительное, ошибок практически не было. (не знаю правда будет ли работать сама программа. Отслеживал ошибки чисто при запуске)
Как таковое осталось 2 ошибки:
1) mov AX,[CS:MainDataSeg] - просмотрел всю книгу Кулакова Владимира Геннадьевича "Программирование на аппаратном уровне" и нашел следующее описание переменной:
; Адрес основного сегмента данных
MainDataSeg DW ?
Добавил в свой проект эту переменную, хотя и не знаю какие она должна принимать значения sad.gif
2) В строках, типа mov DI, offset SectorDataBuffer (как я понимаю, это и есть строка, в которой данные передаются в массив), компилятор ругается: E2107 Operand size mismatch. Насколько я понимаю, имеется расхождение в размерах регистра DI и массива SectorDataBuffer.
Понимаю, что наверное опять глупые вопросы задаю, но буду благодарен за объяснения, что делать с CS:MainDataSeg и как подружить регистр и массив.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.