Важная информация

User Tag List

Страница 1 из 6 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 53

Тема: Определение текущего адреса

  1. #1
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,720
    Благодарностей: 947
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Question Определение текущего адреса

    Всем привет!
    Есть у меня такая задача: надо определить текущий исполняемый адрес (что-то типа LD HL,PC). Но не все так просто - мне заранее неизвестен контекст, в котором исполняется мой код, а именно:
    • на каком такте кадра вызван код;
    • разрешены ли прерывания;
    • что загружено в какие адреса RAM, какая страница ROM включена и что в ней находится;
    • способ вызова моего кода (отметается возможность достать из стека адрес возврата и почитать адрес вызова).

    Классический способ (call #007c: dec sp: dec sp: pop hl) несовместим со всеми указанными проблемами. Чуть более правильный код di: call #007c: dec sp: dec sp: pop hl :ei решает только первую проблему. Определение режима препываний и разрешение их (если были разрешены) решает еще и вторую проблему. А вот решение третьей проблемы мне не ведомо - по адресу #007c ret быть не обязан, как и по любому другому адресу.
    Видится 2 не самых удобных способа решения проблемы:
    • обязать вызывающий код передавать в одном из регистров адрес вызова (или заносить его в некоторую ячейку в теле вызываемого кода);
    • обязать вызывающий код делать дополнительную инициализацию при включенном ROM BASIC 48.


    Оба способа мне не нравятся. Знает ли кто-нибудь способ определения текущего адреса в любых условиях без дополнительных ограничений для вызывающего кода?

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

  4. Этот пользователь поблагодарил Vitamin за это полезное сообщение:
    GriV (19.06.2012)

  5. #3
    Guru Аватар для NEO SPECTRUMAN
    Регистрация
    22.05.2011
    Адрес
    Дзержинск
    Сообщений
    2,064
    Благодарностей: 366
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ld hl,$
    И что это дает если код перемещаемый, адрес этой команды на момент компиляции.
    способ вызова моего кода (отметается возможность достать из стека адрес возврата и почитать адрес вызова).
    То есть проблема в том что при прерывании между командами 007c ret и pop hl похерется адрес возврата от call 007c?

    Я бы сделал как нибудь так
    Код:
    call ldhlpc
    ....
    ldhlpc
       ld (p1+1),SP
    p1 ld hl,(0000)
       ret
    Последний раз редактировалось NEO SPECTRUMAN; 16.06.2012 в 11:59.

  6. #4
    Veteran Аватар для Лас
    Регистрация
    18.11.2008
    Адрес
    пос.Полярный, ЯНАО
    Сообщений
    1,062
    Благодарностей: 780
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    И что это дает если код перемещаемый, адрес этой команды на момент компиляции.
    То есть проблема в том что при прерывании между командами 007c ret и pop hl похерется адрес возврата от call 007c?

    Я бы сделал как нибудь так
    Код:
    call ldhlpc
    ....
    ldhlpc
       ld (p1+1),SP
    p1 ld hl,(0000)
       ret
    лол. call в абсолютный адрес? и зачем тогда определять что на стеке? call ldhlpc = ld hl,$ в данном случае.

  7. #5
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,031
    Благодарностей: 1426
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Лас Посмотреть сообщение
    call в абсолютный адрес? и зачем тогда определять что на стеке? call ldhlpc = ld hl,$ в данном случае.
    Ваистену. Может сначала с требованиями определиться? А то перемещаемый код крайне плохо сочетается с абсолютными адресами (это топикстартеру).

  8. #6
    Guru Аватар для NEO SPECTRUMAN
    Регистрация
    22.05.2011
    Адрес
    Дзержинск
    Сообщений
    2,064
    Благодарностей: 366
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    лол. call в абсолютный адрес? и зачем тогда определять что на стеке? call ldhlpc = ld hl,$ в данном случае.
    Во 1-х это просто пример
    Во 2-х Процедуру ldhlpc по постоянному адресу. И ябы держал её вне окна переключения страниц. А call ldhlpc среди перемещаемого кода.
    dhlpc = ld hl,$ в данном случае
    и что будет указывать ваш ld hl,$ если я в ходе работы програмы перемещу его в другой адрес.

    и зачем тогда определять что на стеке
    Чтоб определить с какого адреса была вызвана ldhlpc
    Последний раз редактировалось NEO SPECTRUMAN; 16.06.2012 в 12:59.

  9. #7
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,363
    Благодарностей: 706
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    NEO SPECTRUMAN,

    call ldhlpc
    ...
    ldhlpc
    pop hl
    jp (hl)
    чо за огород вы тут развели
    С уважением,
    Jerri / Red Triangle.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%] kiwi кошелек +79178162712

  10. Эти 2 пользователя(ей) поблагодарили jerri за это полезное сообщение:
    GriV (26.07.2012), NEO SPECTRUMAN (16.06.2012)

  11. #8
    Guru Аватар для NEO SPECTRUMAN
    Регистрация
    22.05.2011
    Адрес
    Дзержинск
    Сообщений
    2,064
    Благодарностей: 366
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    чо за огород вы тут развели
    Пытался без использования Push и Pop.
    Об таком даже не подумал.

    А главное на столько быстрей.

  12. #9
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,720
    Благодарностей: 947
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    ld hl,$
    Цитата Сообщение от Vitamin Посмотреть сообщение
    А то перемещаемый код крайне плохо сочетается с абсолютными адресами (это топикстартеру).
    Мой косяк, однако. Не сказал, что код перемещаемый. Вообще говоря, он поставляется уже скомпиленный вместе с нужными данными другим софтописателям. Надо найти адрес начала данных.

    Цитата Сообщение от jerri Посмотреть сообщение
    call ldhlpc
    Не-а. Этот код может быть запущен командой JP (HL), например.

  13. #10
    Guru
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,083
    Благодарностей: 924
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    начал читать, тоже подумал про pop hl:jp (hl), но только чтобы самому куда-то эти 2 команды положить:

    ld hl,#xxxx ; opcodes of pop+jp
    ld (#4000),hl
    call #4000
    ; hl=$
    ; тут можно еще и содержимое #4000 восстановить

  14. Эти 2 пользователя(ей) поблагодарили psb за это полезное сообщение:
    Alex Rider (16.06.2012), GriV (19.06.2012)

Страница 1 из 6 12345 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Расчет адреса точки на экране
    от Ares в разделе Программирование
    Ответов: 10
    Последнее: 26.07.2012, 15:46
  2. Адреса 00H-100H
    от Helloween в разделе Оси
    Ответов: 14
    Последнее: 10.05.2011, 12:26
  3. FDD - адреса
    от AlexBel в разделе MSX
    Ответов: 1
    Последнее: 11.05.2009, 08:45
  4. Определение Turbo-FM
    от Максагор в разделе Программирование
    Ответов: 21
    Последнее: 28.09.2007, 18:29
  5. Определение номера дисковода
    от goodboy в разделе Программирование
    Ответов: 2
    Последнее: 21.06.2005, 23:54

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •