Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascal]Создание программы на Pascal с использован 
:(
    Опции темы
vasiliy0905
Дата 27.12.2012, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.12.2012

Репутация: нет
Всего: нет



Доброго всем времени суток.    smile 
Дамы и господа, прошу Вашей помощи в написании программы на Pascal. 
Имеется листинг процедур для непосредственной работы с контроллером жестких дисков ATA: 1) ЧТЕНИЕ СЕКТОРА ЖЕСТКОГО ДИСКА В РЕЖИМЕ LBA, 2) ПОСЛАТЬ КОМАНДУ ЗАДАННОМУ ДИСКУ, 3) ЧТЕНИЕ ИДЕНТИФИКАТОРА ЖЕСТКОГО ДИСКА. Необходимо, используя эти процедуры, написать программу на Pascal'е.
Так как опыта работы в асме у меня нет   то при создании pas-файла, Turbo Pascal выдал кучу ошибок.  smile 
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, но там ошибок еще больше 
Буду очень благодарен за помощь в создании исполняемого файла   

Это сообщение отредактировал(а) vasiliy0905 - 27.12.2012, 08:35

Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  HDD1.PAS 5,28 Kb
PM MAIL   Вверх
vasiliy0905
Дата 27.12.2012, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.12.2012

Репутация: нет
Всего: нет



Сам листинг на асме.

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  LIST6_07.INC.doc 50,00 Kb
PM MAIL   Вверх
vasiliy0905
Дата 28.12.2012, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.12.2012

Репутация: нет
Всего: нет



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


Присоединённый файл ( Кол-во скачиваний: 0 )
Присоединённый файл  Form.rar 8,71 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0994 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.