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

User Tag List

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

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

  1. #1
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,908
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    89
    Поблагодарили
    31 сообщений
    Mentioned
    4 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
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,254
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    34 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
    ld hl,$
    Лишен всех недостатков

  4. #3
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    656
    Поблагодарили
    511 сообщений
    Mentioned
    10 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 в 13:59.

  5. #4
    Veteran Аватар для Лас
    Регистрация
    18.11.2008
    Адрес
    пос.Полярный, ЯНАО
    Сообщений
    1,078
    Спасибо Благодарностей отдано 
    5
    Спасибо Благодарностей получено 
    9
    Поблагодарили
    7 сообщений
    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,$ в данном случае.

  6. #5
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,254
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    34 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  7. #6
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    656
    Поблагодарили
    511 сообщений
    Mentioned
    10 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 в 14:59.

  8. #7
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,746
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    265
    Поблагодарили
    199 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    NEO SPECTRUMAN,

    call ldhlpc
    ...
    ldhlpc
    pop hl
    jp (hl)
    чо за огород вы тут развели
    С уважением,
    Jerri / Red Triangle.

  9. #8
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    656
    Поблагодарили
    511 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

  10. #9
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,908
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    89
    Поблагодарили
    31 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

  11. #10
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    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 восстановить

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

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

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

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

Похожие темы

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

Ваши права

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