Вверх ↑
Этот топик читают: Гость
Ответов: 67
Рейтинг: 5
#16: 2011-09-01 16:42:26 ЛС | профиль | цитата
[flood]Tad, это сегодня самое разумное тобой сказано[/flood]
карма: 1

0
Ответов: 2059
Рейтинг: 132
#17: 2011-09-01 16:51:07 ЛС | профиль | цитата
Tad
а кто-то где-то выступал против вирусописателей.

Вирусы писать на HiAsm`е - это круто!
Нет, это для других задач.
А ещё наверное можно, только что мысль пришла, вставлять куски кода сделанных на других языках.
Если конечно, компилятор генерит исполняемый бинарник, и дополнительных языковых пакетов не нужно.
P.S.
Кое чего уже получается, спасибо за помощь.
По ходу дела возник ещё один вопрос:
Как инициализировать код элемента до обращения к нему?
Т.е. чтобы этот код выполнил какие то действия (например резервирование памяти для своих нужд, или получить реальные адреса) перед выполнением основной функции.
function INIT
function Основная
Пока видится только два способа.
1. Выполнить дейсвия INIT при первом обращении к основной функции, а в последующих вызовах только исполнение основной функции.
2. По событию, при создании формы окна.
Есть ещё какие нибудь варианты?
Понятно излагаю, или нет?
Ну что то похожее функции Init в DLL, сначала при загрузке передаётся управление на эту функцию, а потом уже выполняются штатные функции, по мере их вызовов.


карма: 6

0
Ответов: 3349
Рейтинг: 233
#18: 2011-09-01 17:14:49 ЛС | профиль | цитата
Код компонента
карма: 1

0
Ответов: 2059
Рейтинг: 132
#19: 2011-09-01 17:46:27 ЛС | профиль | цитата
Ivann
То, что доктор прописал.
А можно ссылку, чтобы скачать.
Я ещё плохо ориентируюсь на сайте.
Я так понял в Help`е этого нет. Роз семь его перечитывал.
Где это находиться, может ещё чего хорошего найду.
Спасибо.
------------ Дoбавленo в 17.46:
Виноват, исправлюсь.
Всё нашёл.
карма: 6

0
Ответов: 3889
Рейтинг: 362
#20: 2011-09-01 17:47:28 ЛС | профиль | цитата
flint2 писал(а):
Где это находиться, может ещё чего хорошего найду.

[burl=http://www.hiasm.com/wiki.html]ТУТ[/burl]
карма: 1

0
Ответов: 67
Рейтинг: 5
#21: 2011-09-01 17:57:36 ЛС | профиль | цитата
flint2, [flood]
flint2 писал(а):
Виноват, исправлюсь.
Всё нашёл.
Т.к. на форуме ни кто ни чего ни кому не должен и не обязан, то Вы не виноваты ни в чем[/flood]
карма: 1

0
Гость
Ответов: 17029
Рейтинг: 0
#22: 2011-09-02 21:37:36 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2025-01-11 00:09:41
карма: 0

0
Гость
Ответов: 17029
Рейтинг: 0
#23: 2011-09-02 21:43:13 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2025-01-11 00:09:41
карма: 0

0
Ответов: 8930
Рейтинг: 823
#24: 2011-09-02 23:00:24 ЛС | профиль | цитата
flint2, я просто указал, где Вы можете найти пример вставки Asm в кодах элементов, коды можно посмотреть/изменить по Ctrl+F при выделенном элементе на поле HiAcm или в Блокноте не забыв сохранить где-либо копию на всякий случай
карма: 19

0
Гость
Ответов: 17029
Рейтинг: 0
#25: 2011-09-02 23:34:37 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2025-01-11 00:09:42
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#26: 2011-09-02 23:37:29 ЛС | профиль | цитата
host-79-164-65-58.qwerty. писал(а):
Где посмотреть инструкции asm для Delphi или Pascal
В Google набери "asm в Delphi "
Если лень, сходи по ссылкам:
http://www.delphisources.ru/pages/faq/base/assembler_in_delphi.html
http://www.delphisources.ru/pages/faq/base/delphi_asm.html
http://www.delphisources.ru/pages/faq/base/delphi_and_asm.html

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Гость
Ответов: 17029
Рейтинг: 0
#27: 2011-09-03 00:44:37 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2025-01-11 00:09:42
карма: 0

0
Гость
Ответов: 17029
Рейтинг: 0
#28: 2011-09-03 01:21:46 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2025-01-11 00:09:42
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#29: 2011-09-03 08:23:24 ЛС | профиль | цитата
host-79-164-65-58.qwerty. писал(а):
Посмотрел по ссылкам приведённым выше и ничего не нашел, что соответствует контексту постов.
там даже
call [на этот самый бинарный код]
есть.
host-79-164-65-58.qwerty. писал(а):
Тут приведены примеры из букваря asm.
судя по твоим вопросам, тебе букварь и нужен.
host-79-164-65-58.qwerty. писал(а):
Теперь ясно, что можно писать, а какие инструкции нет.
поделись опытом : "Какие нет".
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 2059
Рейтинг: 132
#30: 2011-09-15 14:33:10 ЛС | профиль | цитата
Tad
Почему такие скоропалительные суждения?
Если не понятно, то это совсем не значит что вопрос глупый.
Вот собственно чего мне надо было:

Оператор inline состоит из зарезервированного слова Inline,
за которым следует одна или более встроенных записей (записей машинного кода), разделенных косой чертой и заключенных в круглые
скобки:

inline(10/$2345/Count+1/Data-Offset);
Но так не удобно.
Поэтому можно сделать так:
Из исходного файла на языке ассемблера можно с
помощью ассемблера получить объектный файл (с расширением .OBJ).
Используя компоновщик, несколько объектных файлов можно скомпоновать с программой или модулем. При этом используется директива
компилятора $L.

В программе или модуле на языке Паскаль процедуры или функции, написанные на языке ассемблера, должны быть описаны как
внешние. Например:

Используя ключевое слово PASCAL и директиву .MODEL, можно обеспечить соблюдение соглашений о вызовах с Borland Pascal, определить имена сегментов, выполнить инструкции PUSH BP и MOV
PB,SP, а также обеспечить возврат управления с помощью операторов
POP BP и RET N (где N - это число байт параметра). Директива
.MODEL имеет следующий синтаксис:

.MODEL xxxx, PASCAL

где xxxx - это модель памяти (обычно LARGE).

Задание в директиве .MODEL языка PASCAL сообщает, что параметры были занесены в стек слева-направо - в том порядке, в котором они обнаружены в исходном операторе, вызывающем процедуру.

Директива PROC позволяет вам задать параметры в том же порядке, как они определены в программе Borland Pascal. Если вы определяете функцию, которая возвращает строку, обратите внимание
на то, что директива PROC имеет опцию RETURNS, позволяющую вам получить доступ к временному указателю строки в стеке и не оказывающую влияния на число байт параметра, добавляемых в операторе
RET.

Приведем примеры кода, в которых используются директивы
.MODEL и PROC:

.MODEL LARGE, PASCAL
.CODE
MyProc PROC FAR 1:BYTE, j : BYTE RETURNS result : DWORD
PUBLIC MyProc
les di,result ; получить адрес временной строки
mov al,i ; получить первый параметр i
mov bl,j ; получить второй параметр j
.
.
.
ret

Определение функции в Borland Pascal будет выглядеть следующим образом:

function MyProc(i,j : char) : string; external;

Пример программы:
unit Strings;
interface
function UpperCase(S: string): string;
function StringOf(Ch: char; Count: byte): string;
inplementation
{$L STRS}
function UpperCase; external;
function StringOf; external;
end.
CODE SEGMENT BYTE PUBLIC
ASSUME CS:CODE
PUBLIC UpperCase, StringOf ; объявить имена
function Uppercase(S: String): String
UpperRes EQU DWORD PTR [BP+10]
UpperStr EQU DWORD PTR [BP+6]
Uppercase PROC FAR
PUSH BP ; сохранить регистр BP
MOV BP,SP ; установить стек
PUSH DS ; сохранить регистр DS
LDS SI,UpperStr ; загрузить адрес строки
LES DI,UpperRes ; загрузить адрес результата
CLD ; переместить строку
LODSB ; загрузить длину строки
STOSB ; скопировать результат
MOV CL,AL ; поместить длину строки в СХ
XOR CH,CH
JCXZ U3 ; пропустить в случае пустой
; строки
U1: LODSB ; пропустить, если символ отличен
; от 'а'...'z'
CPM AL,'a'
JB U2
CPM AL,'z'
JA U2 ; переместить строку
SUB AL,'a'-'A' ; преобразовать в прописные буквы
U2: STOBS ; сохранить результат

LOOP U1 ; цикл по всем символам
U3: POP DS ; восстановить регистр DS
POP BP ; восстановить регистр ВР
RET 4 ; удалить параметры и возвратить
; управление
UpperCase ENDP
; function StringOf(Ch: Char; Count: Byte): String
StrOfRes EQU DWORD PTR [BP + 10]
StrOfChar EQU BYTE PTR [BP + 8]
StrOfCOunt EQU BYTE PTR [BP + 6]
StringOf PROC FAR
PUSH BP ; сохранить регистр ВР
MOV BP,SP ; установить границы стека
LES DI,StrOfRes ; загрузить адрес результата
MOV AL,StrOfCount ; загрузить счетчик
CLD ; продвинуться на строку
STOSB ; сохранить длину
MOV CL,AL ; поместить значение счетчика в CX
XOR CH,CH
MOV AL,StrOfChar ; загрузить символ
REP STOSB ; сохранить строку символов
POP ; восстановить ВР
RET ; извлечь параметры и выйти
SrtingOf ENDP
CODE ENDS
END
Вот ивсё.

карма: 6

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)