Форум: "Потрепаться";
Текущий архив: 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.49 MB
Время: 0.008 c