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

User Tag List

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 21 по 30 из 34

Тема: Введение сегментов стэка и данных.

  1. #21
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,550
    Спасибо Благодарностей отдано 
    1,213
    Спасибо Благодарностей получено 
    1,748
    Поблагодарили
    680 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от haywire Посмотреть сообщение
    Локальных переменных много не надо. Человеческий мозг не мыслит так. Я анализировал размер стека. Более ~256 байт при 16-и разрядном коде не надо, надо значительно меньше.
    Должно быть, psb имел ввиду программы, скомпилированные с языков высокого уровня (например, Си), где локальные переменные с динамически выделяемой для них памятью (из стека) в порядке вещей.
    Тогда как для обычного ассемблериста пишущего под Z80 (и другие восьмибитки) такой подход неудобен. Индексной адресации по стеку нет, да и вообще ассемблерщики мыслят иначе.

  2. #22
    Master
    Регистрация
    04.07.2012
    Адрес
    г. Москва
    Сообщений
    550
    Спасибо Благодарностей отдано 
    5
    Спасибо Благодарностей получено 
    83
    Поблагодарили
    39 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Должно быть, psb имел ввиду программы, скомпилированные с языков высокого уровня (например, Си), где локальные переменные с динамически выделяемой для них памятью (из стека) в порядке вещей.
    Не. Локальных переменных много не надо. А ребята, которые пишут
    int func (a)
    char a;
    {
    int b[60000];
    }
    - должны гореть в аду. Но в аду им не позволит гореть современный компилятор. Он выправит этот код. Можете проверить.

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

    По умолчанию

    Цитата Сообщение от haywire Посмотреть сообщение
    Но в аду им не позволит гореть современный компилятор. Он выправит этот код. Можете проверить.
    Код:
    #include <stdio.h>
    
    int func (a)
    char a;.
    {
    int b[60000];
    int i;
      for (i =a; i != 60000; ++i)
        printf("%i: %c\n", i, b[i]);
    }
    
    int main()
    {
      a('a');
    }
    Код:
    gcc -O2 -c test.c
    objdump -d -M intel test.o
    Код:
    Дизассемблирование раздела .text:
    
    0000000000000000 <func>:
       0:   53                      push   rbx
       1:   40 0f be df             movsx  ebx,dil
       5:   48 81 ec 80 a9 03 00    sub    rsp,0x3a980
       c:   0f 1f 40 00             nop    DWORD PTR [rax+0x0]
      10:   48 63 c3                movsxd rax,ebx
      13:   89 de                   mov    esi,ebx
      15:   bf 00 00 00 00          mov    edi,0x0
      1a:   8b 14 84                mov    edx,DWORD PTR [rsp+rax*4]
      1d:   83 c3 01                add    ebx,0x1
      20:   31 c0                   xor    eax,eax
      22:   e8 00 00 00 00          call   27 <func+0x27>
      27:   81 fb 60 ea 00 00       cmp    ebx,0xea60
      2d:   75 e1                   jne    10 <func+0x10>
      2f:   48 81 c4 80 a9 03 00    add    rsp,0x3a980
      36:   5b                      pop    rbx
      37:   c3                      ret    
    
    Дизассемблирование раздела .text.startup:
    
    0000000000000000 <main>:
       0:   bf 61 00 00 00          mov    edi,0x61
       5:   31 c0                   xor    eax,eax
       7:   e9 00 00 00 00          jmp    c <main+0xc>
    Код:
    gcc версия 4.8.2 (GCC)
    Дабы предотвратить разговоры в стиле "gcc - несовременный компилятор", ожидаю примеры генерации кода с упомянутой оптимизацией и указанием используемого компилятора и его версии.

  4. #24
    Member
    Регистрация
    16.02.2011
    Адрес
    г. Новочеркасск
    Сообщений
    129
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    13
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А знаете ли вы, что создатели Z80 - бывшие топ менеджеры Intel
    Да - эту историю знаю.
    20-и битной шины адреса процессора.
    но я и предлагаю это проэмулировать.
    Вы поймите что 8086 тоже адресует одновременно не 1мб. а 64к помноженное на количество сегментных регистров CS, DS, SS ES = 256кб. А дальше ему нужно модифицировать эти регистры.
    Тоже самое получится и у нас - адресуемые сразу 256 кб. а через модификацию этих регистров - хоть все 4мб.

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

    По умолчанию

    Hacker Grey, авторы процессоров з80 и8080 мос6502 сидели и считали такты, логические элементы и эффективность своих устройств.

    может лучше сразу создать на основе ZXEvo устройство с 24 битной адресацией?
    а не городить кадавров?
    С уважением,
    Jerri / Red Triangle.

  6. #26
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Должно быть, psb имел ввиду программы, скомпилированные с языков высокого уровня (например, Си), где локальные переменные с динамически выделяемой для них памятью (из стека) в порядке вещей.
    именно так.

    Цитата Сообщение от haywire Посмотреть сообщение
    А ребята, которые пишут
    это утрированный пример. а на деле почему не может быть нескольких лок. массивов байт на 500? как их делать, если они нужны? а если вложенность подпрограмм приличная? всяко может быть.

  7. #27
    Guru Аватар для Vadim
    Регистрация
    24.07.2008
    Адрес
    г. Курган
    Сообщений
    2,062
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от haywire Посмотреть сообщение
    Человечески написанная программа не требует более 256-512-1024 байтов стека в зависимости от разрядности, которые всегда можно найти и которые критической роли не сыграют.
    Если идёт речь о простой программе, то чаще всего да, так и есть, а, например, если мы говорим о ядре ОС, то как обеспечить реентерабельность? Хранить в структурах подобных стеку - один из вариантов. Насколько я знаю, msdos большую часть переменных хранит именно так.

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

    Profi 5.06 1024K 12Mhz (кварц на 24), палитра, COM-порт, часы, hdd, covox, программатор
    ZX-Spectrum +3, ZX-Spectrum +2B, ZX-Spectrum +2, ZX Spectrum 48, ZX Spectrum 48+
    ZX Evolution Rev B.
    Color 48 + Beta Disk Interface +FDD+YM2149F
    Орель-08БК
    Pentagon-48 (недоссобранный кем-то)
    Pentagon-128 (полуубитый)
    Кворум-128 (в ремонте)
    Магик-05 (в ремонте)
    Robotron 1715
    Корвет ПК8020 и ПК8010
    Amstrad CPC 464
    Amstrad CPC 6128
    [свернуть]

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

    По умолчанию

    Цитата Сообщение от Hacker Grey Посмотреть сообщение
    Ну что ? Как вам идея? Возможно все это реализовать?
    Конечно, возможно. Не вы первый, кому эта идея пришла в голову. Я думал о подобной надстройке еще в 1995-96 годах где-то. Тогда еще ФПГА массово не использовались - думал делать логику на ЛА3 и РТ4.

    Основной довод "против" уже высказал Jerri: сделать подобную аппаратную довеску несложно. Ну, месяц потрудишься - и получится в конце концов. Но проблема ведь не в аппаратуре. Проблема в софте, которого под эту конфигурацию нет. На создание софта уйдет значительно больше человеко-часов, чем на создание аппаратной части. У вас есть столько времени и желания писать софт? А если нет у вас лично - может кого-нибудь знаете, у кого есть?

    С тем же успехом можно заменить Z80 каким-нибудь 32-битным процессором. И все, проблемы с адресацией уйдут. Почему никто этого не делает? А если кто и делает, то такие компы уже не назваются "Спектрумами"? В чем тут принципиальная разница - взять совершенно другой проц или оставить прежний, но приделать к нему кучу костылей? Для программистов-то между этими двумя вещами разницы нет. Старые программы не смогут поддерживать новые возможности.
    Цитата Сообщение от Hacker Grey Посмотреть сообщение
    З.Ы. Ну и буду совсем наглым, раз уж пошла такая пьянка, то можно ещё до кучи и обработать команды LDI и LDIR
    Тогда уж лучше сделать аппаратный ускоритель блочной пересылки или, еще лучше, - блиттер, как на Амиге, который обрабатывает прямоугольные блоки. Ведь LDI и LDIR жутко медленные. Даже если составить последовательность чтения-записи памяти на шине Z80 из трехтактовых циклов, т.е. минимального времени, за которое Z80 может обратиться к памяти, то получится 6 тактов на пересылку байта - против 16 для LDI или 21 для LDIR.
    Цитата Сообщение от haywire Посмотреть сообщение
    Вот людей (программ), умеющих эффективно использовать рекурсию, я не видел пока что. Только эпические падения *****кода.
    Сочувствую. Я видел и хорошие примеры использования рекурсии, и сам ее иногда использовал с большой эффективностью.

    Рекурсия иногда нужна. Как и любой другой инструмент, она занимает свое место в мастерской программиста. При использовании ее по назначению все прекрасно - и у программиста, и у компьютера. Стек не переполняется. А не по назначению - это как гвозди забивать микроскопом. Конечно, получается фиаско.
    Цитата Сообщение от haywire Посмотреть сообщение
    Не. Локальных переменных много не надо. А ребята, которые пишут
    int func (a)
    char a;
    {
    int b[60000];
    }
    - должны гореть в аду.
    Почему это? Что ты предлагаешь делать, если нужен временный массив на 60 (или даже 6000) килобайт? malloc? Так это же неэффективно. Работа менеджера кучи сложнее, чем стека, и впоследствии возможна фрагментация памяти. Для подобных применений стек лучше.

  9. #29
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,530
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    264
    Спасибо Благодарностей получено 
    208
    Поблагодарили
    166 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    если нужен временный массив на 60 (или даже 6000) килобайт?
    Если он действительно такой нужен, то и времени на обработку потратишь столько, что работа с ним менеджера кучи будет просто незаметна и ничтожна на этом фоне.
    Прихожу без разрешения, сею смерть и разрушение...

  10. #30
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    вот только на стеке оно точно автоматом удалится при выходе, а про кучу можно забыть. +память в куче фрагментируется.

    короче, неоднозначный выбор.

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 8
    Последнее: 31.03.2013, 00:04
  2. Введение композитного входа в RGB-монитор
    от BYTEMAN в разделе Изображение
    Ответов: 23
    Последнее: 19.03.2010, 11:59
  3. Введение в железо для начинающих
    от kgbplus в разделе Несортированное железо
    Ответов: 9
    Последнее: 03.07.2006, 11:43

Ваши права

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