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

User Tag List

Показано с 1 по 5 из 5

Тема: Как работает стек GO SUB?

  1. #1
    Veteran Аватар для TomCaT
    Регистрация
    25.06.2005
    Адрес
    Одесса
    Сообщений
    1,795
    Спасибо Благодарностей отдано 
    54
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    22 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Как работает стек GO SUB?

    Роясь в литературе для соседней темы про отличия 16к и 48к, с удивлением обнаружил, что к нефиксированной области стека подпрограмм BASIC (стека GO SUB) не относится ни одна переменная-указатель адреса в системных переменных ОС. Известно, где его дно - адрес последнего байта совпадает с RAMTOP, но т.к. этот стек, как и машинный стек, тоже растет вниз (проверял), то где проходит граница стеков? Как, например, RETURN определяет адрес трехбайтной структуры оператора после последнего GO SUB?

    Вот например книга "Программирование в машинных кодах" (VA PRINT'93) указывает пример просмотра содержимого стека. Пример не сильно правильный в плане адресов, но там много опечаток и ошибок, так что верить всему там надо с оглядкой (хотя именно по ней мне пришлось впервые изучать коды, ох это было нелегко копаться в ошибках ).

    Но, короче, пример пользуется CLEAR, несколькими GO SUB, и затем выводом содержимого памяти от адреса до адреса, записанных числами, а не взятых из переменных... То есть, они заранее знали, куда помещают стек с помощью CLEAR, и сколько было выполнено GO SUB, поэтому знают примерное место, откуда начинать просмотр. Там же упоминается, что фирма SINCLAIR не совсем уверенна в написании GO SUB (??).

    Во всяком случае, сколько написано программ с подпрограммами, и даже многократной вложенности, а все как будто хорошо работает. Знает ли уважаемый All, как ориентируются в памяти стековые команды, и действительно ли утверждение про фирму Sinclair?
    Последний раз редактировалось TomCaT; 07.09.2010 в 23:59.
    Помни. Только на компьютере можно семь раз Cut, а один - Format. В реале все иначе. (c)
    Власть людей сильнее, чем люди у власти.
    Чем меньше мы смотрим на мир, тем больше задумываемся о нем. (c)

    Скрытый текст

    Can you help Robin in his quest for the silver arrow? (c) Odin "Robin of the Wood"
    Мы все немного режем по дереву, а потом собираем корабли в бутылках.
    Is it the same old story you are going to tell me
    or is it the old story telling me and you we are the same?
    http://www.sky.od.ua/~ptsk
    [свернуть]


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

  3. #2
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,057
    Спасибо Благодарностей отдано 
    220
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я когда-то читал об этом в Полном дизассемблере от Яна Логана и Френка О-Хары - реализация операторов GO SUB и RETURN. Подробности уже забыл, но по-моему нижнюю (по адресам) границу стека GO SUB задает переменная ERR_SP (23613, 23614). После выполнения оператора GO SUB ее значение уменьшается на 3. В стек записывается номер строки, в которой находится оператор GO SUB, и номер оператора, следующего за ним. Если оператор GO SUB был первым в строке, то в качестве номера оператора возврата записывается двойка. Только что написал простейшую программу на бейсике для проверки - так и есть.

    Поскольку ERR_SP задает верхнюю границу машинного стека, и по адресу, лежащему по ERR_SP, осуществляется возврат при ошибке (2 байта) - то стек GO SUB начинается на 2 байта выше, чем значение ERR_SP.

  4. #3
    Guru
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    13,773
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    143
    Спасибо Благодарностей получено 
    1,179
    Поблагодарили
    775 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Я когда-то читал об этом в Полном дизассемблере от Яна Логана и Френка О-Хары
    ftp://ftp.worldofspectrum.org/pub/si...ssemblyThe.txt

    искать GO-SUB

  5. #4
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,057
    Спасибо Благодарностей отдано 
    220
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Насчет же того, что программисты, которые писали Sinclair Basic якобы не знали в полной мере, как работают GO SUB и RETURN - это конечно же полная чушь. Если проанализировать сооветствующие места бейсика - то все там правильно и логично сделано, т.е. авторы явно четко представляли себе, что они делают и зачем. Тем более что бейсик работает, не глючит в этом плане.

  6. #5
    Veteran Аватар для TomCaT
    Регистрация
    25.06.2005
    Адрес
    Одесса
    Сообщений
    1,795
    Спасибо Благодарностей отдано 
    54
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    22 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Все ясно, спасибо.

    Откуда и когда взяли авторы той книги Ва Принт информацию о неуверенности написания, не известно, может, из интервью каких-нибудь, или из третьих рук. Книга похожа на переведенную. Я, конечно, так и думал, что там все в норме.
    Помни. Только на компьютере можно семь раз Cut, а один - Format. В реале все иначе. (c)
    Власть людей сильнее, чем люди у власти.
    Чем меньше мы смотрим на мир, тем больше задумываемся о нем. (c)

    Скрытый текст

    Can you help Robin in his quest for the silver arrow? (c) Odin "Robin of the Wood"
    Мы все немного режем по дереву, а потом собираем корабли в бутылках.
    Is it the same old story you are going to tell me
    or is it the old story telling me and you we are the same?
    http://www.sky.od.ua/~ptsk
    [свернуть]


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

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

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

Похожие темы

  1. Не работает PS/2 Mouse
    от Mifody в разделе Устройства ввода
    Ответов: 127
    Последнее: 01.11.2021, 09:39
  2. emu1541 не работает
    от e2e4 в разделе Commodore 16/64/128
    Ответов: 26
    Последнее: 05.11.2016, 16:09
  3. spec 256 - не работает под ХР
    от STAB в разделе Эмуляторы
    Ответов: 4
    Последнее: 31.07.2013, 00:14
  4. Не работает ТР-ДОС! Почему?
    от Slider в разделе Внешние накопители
    Ответов: 13
    Последнее: 03.04.2009, 23:03
  5. Не работает КР1858ВМ3
    от Mifody в разделе Для начинающих
    Ответов: 30
    Последнее: 29.03.2009, 12:12

Ваши права

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