Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.09.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.011 c
7-96467
АлеКо
2003-07-18 09:36
2003.09.29
Определить ОС


14-96421
pwl
2003-09-10 17:17
2003.09.29
MDI форма


4-96490
howl
2003-07-25 13:48
2003.09.29
Закрытие приложения


6-96323
Е-Моё имя
2003-07-29 13:20
2003.09.29
настройка показа картинок для TWebBrowser


3-96097
DelphiNew
2003-09-09 15:48
2003.09.29
Sql сервер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский