|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
05.12.2012, 12:05 | #1 |
Пользователь
Регистрация: 19.02.2011
Сообщений: 18
|
Связка TP и Asm
Доброго времени суток всем
Попросили сделать исполняемый файл в Turbo Pascal'е, добавив процедуры на ассемблере, но так как я не создавал программы в связке с ассемблером, то возникли ряд вопросов. Листинги процедур на асме: http://radiofuck.zakadum.ru/3%EA%F3%...E/LIST6_07.INC Почитав статьи по TP и Asm я понял что ассемблерные вставки в код можно выполнять как процедуры/функции, но как использовать входные/выходные данные не понял Кому не сложно, могли бы мне подсказать по технологии связки TP и Asm, в частности как реализовать DATASEG и CODESEG в TP. Или подсказать ссылочку, где это описано. С удовольствием бы поковырялся сам, но время поджимает Заранее огромное спасибо |
05.12.2012, 14:55 | #2 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Не нужно их реализовывать.
Если интересуют сегментные регистры, то они ds для глобальных переменных и bp - для локальных. Но обычно и этого не нужно - достаточно просто писать в ассемблерном коде имена переменных. Только следует помнить, что ассемблер не производит контроль типов, поэтому об этом необходимо помнить самому. В частности учитывать различие передачи параметров по ссылке и по значению. |
10.12.2012, 07:10 | #3 |
Пользователь
Регистрация: 19.02.2011
Сообщений: 18
|
Благодарю за ответ К сожалению руки на выходных не доходили попробовать, сегодня попробую
|
12.12.2012, 11:39 | #4 |
Пользователь
Регистрация: 19.02.2011
Сообщений: 18
|
Блин, на самом простом застрял Соответствие типов данных между паскалем и ассемблером. Подскажите плиз неучу
DW - Word, DB - Byte, DD- Double, MaxHDDWaitTime equ 10 - скорее всего const MaxHDDWaitTime:Integer; А вот как сделать: StandardHDDBases DW 1F0h, 170h, 1E8h, 168h - нужно создать свой тип с перечислением? И SectorDataBuffer DB 512 DUP (?) - в паскале SectorDataBuffer: array [0..511] of byte. Прошу поправить меня если где то неверно определил переменные. А то пока, в первую очередь, не определюсь с перечислением дальше написать не могу Заранее благодарю за помощь |
12.12.2012, 13:34 | #5 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
dd это longint, а не double.
А остальное - просто массивы. Один константный, второй нет. |
12.12.2012, 14:12 | #6 |
Пользователь
Регистрация: 19.02.2011
Сообщений: 18
|
Благодарю
|
12.12.2012, 19:08 | #7 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Цитата:
Но самый близкий - да - longint. Следует только помнить, что dword - беззнаковая величина (диапазон от 0 до 2^32-1), а longint - величина со знаком (диапазон от -2^31 до 2^31-1). |
|
14.12.2012, 16:45 | #8 |
Пользователь
Регистрация: 19.02.2011
Сообщений: 18
|
Благодарю еще раз за ответы.
Начал делать программу, но теперь возникли ошибки: 1) Pushad/popad (Error 5: Syntax error) - Я как понимаю TP не меняет размещение стеков? ТО есть данные команды в TP неприемлемы? 2) строка Код:
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+asm первый раз столкнулся, да если честно и на TP уже сто лет не работал. Буду очень благодарен за наводки в решении |
14.12.2012, 17:30 | #9 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Турбо Паскаль - 16-разрядный компилятор.
И Ассемблер в нем тоже 16-разрчядный. Со всеми вытекающими. У меня впечатление, что Вам нужно переделать исходник на Ассемблере, который Вы не понимаете. В 4) Вы пытаетесь что-то загрузить из сегмента кода. Вероятнее всего, это особенность исходной программы, в которой какие-то данные хранятся в сегменте кода. Скорее всего, в Турбо Паскале их нужно перенести в сегмент данных. Разберитесь, как работает исходник, и для чего нужны используемые в нем данные. А потом уже пишите все это на Паскале либо встроенном в него Ассемблере. Ассемблер допускает очень широкий спектр способов организации памяти, в Паскале - практически один-единственный. Соответственно, организацию памяти, вероятнее всего, нужно будет изменить. А для этого - разобраться, как она работает. |
15.12.2012, 08:35 | #10 |
Пользователь
Регистрация: 19.02.2011
Сообщений: 18
|
Согласен, не понимаю Задание в следующем - есть исходный код на асме, необходимо, используя 3 процедуры, написанные на асме (чтение с диска, запись на диск, получение идентификатора диска - использование первой процедуры, чтобы считать данные, находящиеся по базовым адресам диска) написать программу на TP. Так как начал заниматься программированием уже в те годы, когда на асме уже не писали (да и если чесно и процедурно -ориентированные языки активно вытеснялись объектно-ориентированными), то и не работал со связками TP и asm
У меня такой вопрос возник - а не проще ли сделать obj файл с процедурами, сегментом данных и сегментом кода, и вызывать процедуры из программы? Тогда проблемы со структурой хранения и исполнения процедур пропадут? Или TP без разницы, брать ли данные из внутреннего листинга или из внешнего файла? |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Связка функций | alexsampler | Microsoft Office Excel | 2 | 27.01.2012 12:26 |
связка с пхп | маГГ85 | JavaScript, Ajax | 2 | 25.12.2011 02:18 |
Передача параметров asm-asm | Maksimall89 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 0 | 22.12.2011 11:54 |
Связка С# и MySQL | dampirik | SQL, базы данных | 3 | 09.01.2010 20:41 |
Связка с ассемблером | Horknee | Паскаль, Turbo Pascal, PascalABC.NET | 6 | 07.05.2009 23:46 |