Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.29;
Скачать: CL | DM;

Вниз

Дельфи - встроенный ассемблер   Найти похожие ветки 

 
REVERSE   (2003-09-07 22:06) [0]

Здравствуйте Дельферы.
Проблема состоит в следующем:
Требуется в программе на Дельфи узнать состояние регистров процессора EIP и CS, с последним проблем нет, но с EIP компилятор говорит "undeclaired identifier".

Ассемблер вставляю так:
asm
mov eax,eip
end;

Заранее благодарен.


 
Владимир Березин   (2003-09-07 22:41) [1]

Ни в одном ассемблере никогда не было и нет инструкции вида
mov <регистр>,<счетчик команд>, т.к счет
чик команд программно недоступен и нельзя получить его текущее
значение. Так что забудь.


 
Ihor Osov'yak ©   (2003-09-07 23:23) [2]

Можно через анализ адреса возврата из подпрограммы в стеке..

.. Только зачем это нужно?


 
Soft ©   (2003-09-07 23:44) [3]

>>Ihor Osov"yak © (07.09.03 23:23) [2]
>>Можно через анализ адреса возврата из подпрограммы в стеке..

>>.. Только зачем это нужно?

Вирус?


 
reticon ©   (2003-09-08 00:03) [4]

> Вирус?

канэшна. а ты думал зачем человек дельфу изучал =)


 
Nikky ©   (2003-09-08 18:17) [5]


> Владимир Березин (07.09.03 22:41) [1]


бред, а как по-вашему отладчик его получает?


 
NightAngel ©   (2003-09-08 23:53) [6]

> Владимир Березин (07.09.03 22:41) [1]
Ни в одном ассемблере никогда не было и нет инструкции вида
mov <регистр>,<счетчик команд>, т.к счет
чик команд программно недоступен и нельзя получить его текущее
значение.


Вообще-то, только что проверил в MASM"е и TASM"е, инструкция вида - mov eax, $ - воспринимается обоими компиляторами, в eax - текущее значение указателя инструкции (Instruction Pointer - EIP, это он имелся ввиду под "счетчиком команд"?), так что, зря я засомневался. Или имелось ввиду, что-то другое? Вы правы только в том, что регистр EIP действительно не доступен для программ, непосредственно для чтения и записи. Содержимое регистра можно менять, только командами перехода.

> REVERSE (07.09.03 22:06)

По поводу вопроса: в Builder"е (вероятнее всего и в Delphi то-же, сейчас проверить негде) такого рода инструкции компилятором не воспринимаются, но можно получить delta смещение текущей инструкции:
asm
push offset @1
@1:
pop eax // в eax - текущее значение eip
end;

Да... И не забудьте объяснить общественности, зачем Вам всё это нужно. Она (общественность) в недоумении. ;)


 
Ihor Osov'yak ©   (2003-09-08 23:57) [7]

2 [6] NightAngel © (08.09.03 23:53)

Красиво. Что наиболее интересно, сам когда-то такую технику использовал, но со временем призабыл.. Или просто вопрос "за живо" не взял..


 
GEN ©   (2003-09-09 00:19) [8]

> Владимир Березин
"Ни в одном ассемблере никогда не было и нет инструкции вида
mov <регистр>,<счетчик команд>, т.к счет
чик команд программно недоступен и нельзя получить его текущее
значение."

Ну это Вы зря! Машины симейства DEC, ассемблер Macro11
mov PC,R0 сч команд=>R0
или
CLR PC очистить счетчик команд


 
Digitman ©   (2003-09-09 09:21) [9]


> GEN


Совершенно верно.
Система команд этого процессора позволяет напрямую обращаться к Program Counter"у

Даже, пожалуй, рискну вспомнить машкод упомянутой инструкции :

mov PC,R0 ; 010700 (Octal), где 01 = MOV, 07=PC=R7, 00=R0

кажется, так ... не ручаюсь, правда, за порядок следования операнда-источника и операнда-приемника в 16-битном коде инструкции - так давно это было)


 
GEN ©   (2003-09-09 09:36) [10]

>digitman
Абсолютно верно!!!
005007 clr PC
Очень рад что хоть кто-то помнит старый добрый DECю


 
Anatoly Podgoretsky ©   (2003-09-09 09:44) [11]

GEN © (09.09.03 00:19) [8]
Это так, но какое отношение это имеет к x86 и ассеблерам для этого семейства, о которых мы и вели речь. Мало ли где нет или есть другие команды, вот в том же DEC по сути нет стека, но можно его имитировать, а в OS360 и этого нет.


 
Digitman ©   (2003-09-09 10:31) [12]


> Anatoly Podgoretsky



> но какое отношение


Это просто как возражение против утверждения <Владимира Березина>.


> в том же DEC по сути нет стека


как это нет ? есть.
Регистр SP=R6 полноценно выполняет специфичные для указателя вершины стека ф-ции.


 
Digitman ©   (2003-09-09 10:40) [13]


> GEN


БК-0010, ДВК-1,2,3 , СМ-3,4 , PDP-11 - это ж целая эпоха !
А ОС RAFOS, FODOS RT-11XX ? Системная "колыбель" для буржуйских и отечественных "клонов" DEC-совместимых машин той эпохи !

Как же не помнить)


 
DiamondShark ©   (2003-09-09 10:54) [14]

Эх, PDP-11, где ты моя молодость...
Запишешь, бывало, в конец памяти инструкцию
MOV -(PC), -(PC)
Радости-иии!!! Полные штаны...


 
Anatoly Podgoretsky ©   (2003-09-09 11:39) [15]

Digitman © (09.09.03 10:31) [12]
Ну кто же спорит, но это эмуляция, а так я долго работал с БК-0010, очень нравилась симметричность команд, кстати и то что там нет портов ввода вывода, Интел снова пришел к такой архитектуре в Itanium


 
SPeller ©   (2003-09-09 12:15) [16]


> MOV -(PC), -(PC)
> Радости-иии!!! Полные штаны...

Я времена вашей молодости не помню, поэтому интересно, что в этой интрукции такого радостного?


 
Dimka Maslov ©   (2003-09-09 13:00) [17]

function GetAddress: Pointer;
asm
mov eax, [esp]
add eax, -5
end;


Вызов этой функции даст тебе значение EIP в EAX


 
DiamondShark ©   (2003-09-09 13:23) [18]


> SPeller © (09.09.03 12:15) [16]
>
> > MOV -(PC), -(PC)
> > Радости-иии!!! Полные штаны...
>
> Я времена вашей молодости не помню, поэтому интересно, что
> в этой интрукции такого радостного?

Эта инструкция (длина -- одно слово) копирует сама себя во всю память.

В системе PDP-11 указатель команд (регистр PC, он же R7) -- доступен как обычный РОН.
Метод адресации -(Rx) очень похож на сишный [--i]: уменьшить Rx на размер операнда и взять операнд из памяти по адресу в Rx.

Итого, действие этой команды описывается следующим алгоритмом:
0. выборка кода команды, PC := PC+2; PC указывает наа слово за командой
1. PC := PC-sizeof(WORD)
2. tmp := (PC) ; это сам код операции
3. PC := PC-sizeof(WORD)
4. (PC) := tmp


 
GEN ©   (2003-09-09 19:53) [19]

>Digitman
Всех прошу извинить меня за вклинивание не по теме, но приведенный Выми ряд не совсем полный. Была еще серийная "УК-НЦ"
разработки НИИ НЦ г.Зеленограда (я разработал и вел в ней 2 модуля) и разработка Славы Климковича (г. Курган) 16 разряная
машина имела 4 Mb ОЗУ (это при 64Кbдоступных процессоу), кстати
их выпустили несколько сотен шт. Так что "все новое - хорошо забытое старое".


 
Digitman ©   (2003-09-11 11:23) [20]


> GEN


а ничего удивительного здесь нет)
Зеленоград плодил и по сей день продолжает плодить самые разнообразные изделия на базе 1801BM-процессоров... и промконтроллеры - в первую очередь

был я в НИИ НЦ некогда ... неоднократно... по командировочным делам

и, кстати, опять же - по теме бортовой выч.системы и ее периферийных контроллеров на базе все того же 1801ВМ2 ...
при всей ограниченности (по современным меркам) возможностей самого ЦПУ и МП-комплекта этой серии система разработана была весьма серьезная и успешно используется на бортах некоторых непилотируемых спутников и по сей день...
надо заметить, что в БВС и кортроллерах на базе этих ЦПУ Зеленоград успешно реализовал многозадачные ОС, и именно - имея возможность расширить АП до 24-х разрядов средствами вспомогательных контроллеров в составе МП-комплекта ...



Страницы: 1 вся ветка

Текущий архив: 2003.09.29;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.025 c
1-96184
Шишкин Илья
2003-09-18 10:32
2003.09.29
Нужна помощь


11-96159
ironwit
2003-01-21 11:16
2003.09.29
вопрос по кол мск


3-96103
Burn
2003-09-09 00:56
2003.09.29
Локальные БД


4-96489
SergeySEM
2003-07-25 12:41
2003.09.29
Событие по созданию окна,процесса


14-96444
Hatchy
2003-09-09 15:30
2003.09.29
Посоветуйте винчестер...