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

User Tag List

Страница 144 из 167 ПерваяПервая ... 140141142143144145146147148 ... ПоследняяПоследняя
Показано с 1,431 по 1,440 из 1664

Тема: SjASMPlus Z80 кросс ассемблер

  1. #1431
    Junior Аватар для Alexander27Ru
    Регистрация
    06.05.2017
    Адрес
    г. Хабаровск
    Сообщений
    8
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Всем привет! Только начинаю осваивать SjASMPlus, собственно с ассемблером Z80 проблем нет, а вот с директивами не очень понятно. Хочется мне объявить в основном коде несколько процедур, а потом вставлять их там где мне нужно. Что-то вроде 'procedure' в Pascal/Delphi. Как это можно сделать в SjASMPlus? Почитал про MACRO и MODULE, но не уверен что это то самое.

    Вот иллюстрация чего я хочу, надеюсь будет понятно:

    Код:
    ; это не должно компилироваться сразу
    procedure SomethingToDo
      puch bc
      …
      pop bc
      ret
    end procedure
    
    ; и это
    procedure Init
      ld bc, #00ff
      out (c), b
      ret
    end procedure
    
    ; и это
    procedure AllDone
      ld bc, #ffff
      out (c), b
      ret
    end procedure
    
    ; а вот это уже попадает в код
    org #8000
    call Init
    call SomethingToDo
    ...
    call SomethingToDo
    ...
    call AllDone

  2. #1432
    Сибирский антропоморфн Аватар для Black Cat / Era CG
    Регистрация
    06.05.2010
    Адрес
    Бердск, НСО
    Сообщений
    4,561
    Спасибо Благодарностей отдано 
    925
    Спасибо Благодарностей получено 
    871
    Поблагодарили
    635 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alexander27Ru Посмотреть сообщение
    Почитал про MACRO и MODULE, но не уверен что это то самое.
    Насколько помню, совсем не то самое.
    MACRO, классический макрос, при компиляции его код вставляется туда, где встречается его использование. То есть это совсем не вызов процедуры в классическом виде.
    MODULE, по-моему, еще дальше от этого, вроде бы это просто определение отдельного именного пространства, то есть для того, чтобы обратиться к метке, объявленной внутри модуля, извне, надо будет еще и приписать к этой метке имя модуля с точкой в качестве префикса (CALL ModuleName.Label). Это сделано для возможности использования одних и те же меток (с одинаковыми именами) в разных функциональных частях кода.

    А ваще не очень понятно, зачем вам это?
    Личка заполнена! И чистить я ее не буду! Пользуйтесь адекватными средствами связи! Спасибо.

    Seamos realistas y hagamos lo imposible!

    Ernesto Che Guevara
    Переехал сюда: SteinBlume (ex ATM CP/M Explorer)
    http://era-cg.su

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

    Speccy2010 r2 (Спасибо m.d. & xlat),
    Sinclair ZX Spectrum + (Спасибо stepmotor),
    ZX Evolution rev.C + 5'25 FDD Epson SD-700AA + NedoPC PAL-Coder (Спасибо m.d. & xlat)
    [свернуть]

  3. #1433
    Junior Аватар для Alexander27Ru
    Регистрация
    06.05.2017
    Адрес
    г. Хабаровск
    Сообщений
    8
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Конкретной задачи нет, пока просто экспериментирую в эмуляторе, вспоминаю ассемблер. До этого много кодил в Delphi, и наверное это уже способ мышления такой - всё обёртывать в процедуры и функции, а затем в основном коде вызывать их в нужном порядке. Подумал компилятор ассемблера позволяет вытворять что-то в сходном стиле.

    Тогда как с точки зрения рационального программирования можно реализовать мой пример выше? То есть никаких "процедур", просто расставляем в требуемом порядке фрагменты кода, а там где фрагменты должны отработать по несколько раз уже сами решаем где этот фрагмент будет лежать в конечном коде и как он будет вызываться? Просто хочу понять как оно на практике делается.

  4. #1434
    Сибирский антропоморфн Аватар для Black Cat / Era CG
    Регистрация
    06.05.2010
    Адрес
    Бердск, НСО
    Сообщений
    4,561
    Спасибо Благодарностей отдано 
    925
    Спасибо Благодарностей получено 
    871
    Поблагодарили
    635 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну делайте примерно так.
    Код:
    Основной код, откуда вызываются процедуры.
    Процедура 1.
    Процедура 2.
    Процедура 3.
    То есть:
    Код:
    ; Тут будет основной код
    org #8000
    call Init
    call SomethingToDo
    ...
    call SomethingToDo
    ...
    call AllDone
    ret
    
    ; это будет компилироваться сразу и лежать сразу за основным кодомSomethingToDo
      puch bc
      …
      pop bc
      ret
    
    
    ; и это
    Init
      ld bc, #00ff
      out (c), b
      ret
    
    
    ; и это
    AllDone
      ld bc, #ffff
      out (c), b
      ret
    А еще, ничего не мешает выделить процедуры по смыслу в отдельные файл(ы), и подключать его(их) через INCLUDE. Тогда в любом нормальном редакторе с поддержкой вкладок, можно открывать эти файлы в отдельных вкладках, а не мотать постоянно простыню кода.
    Личка заполнена! И чистить я ее не буду! Пользуйтесь адекватными средствами связи! Спасибо.

    Seamos realistas y hagamos lo imposible!

    Ernesto Che Guevara
    Переехал сюда: SteinBlume (ex ATM CP/M Explorer)
    http://era-cg.su

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

    Speccy2010 r2 (Спасибо m.d. & xlat),
    Sinclair ZX Spectrum + (Спасибо stepmotor),
    ZX Evolution rev.C + 5'25 FDD Epson SD-700AA + NedoPC PAL-Coder (Спасибо m.d. & xlat)
    [свернуть]

  5. #1435
    Junior Аватар для Alexander27Ru
    Регистрация
    06.05.2017
    Адрес
    г. Хабаровск
    Сообщений
    8
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    О, теперь понятно, спасибо. Наконец-то в голове прояснилось. Буду экспериментировать дальше.

  6. #1436
    Master
    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    364
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    в дельфи в начале описываются процедуры и функции, а потом уже в конце листинга процедура Main - в асме же можно обратиться к функции из любого места - не важно где она объявлена ДО или ПОСЛЕ вызывающего кода.

  7. #1437
    Сибирский антропоморфн Аватар для Black Cat / Era CG
    Регистрация
    06.05.2010
    Адрес
    Бердск, НСО
    Сообщений
    4,561
    Спасибо Благодарностей отдано 
    925
    Спасибо Благодарностей получено 
    871
    Поблагодарили
    635 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от shurik-ua Посмотреть сообщение
    в дельфи в начале описываются процедуры и функции, а потом уже в конце листинга процедура Main - в асме же можно обратиться к функции из любого места - не важно где она объявлена ДО или ПОСЛЕ вызывающего кода.
    Именно так. Я в своем примере разместил основной код "сверху", просто потому что мне так удобнее
    Личка заполнена! И чистить я ее не буду! Пользуйтесь адекватными средствами связи! Спасибо.

    Seamos realistas y hagamos lo imposible!

    Ernesto Che Guevara
    Переехал сюда: SteinBlume (ex ATM CP/M Explorer)
    http://era-cg.su

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

    Speccy2010 r2 (Спасибо m.d. & xlat),
    Sinclair ZX Spectrum + (Спасибо stepmotor),
    ZX Evolution rev.C + 5'25 FDD Epson SD-700AA + NedoPC PAL-Coder (Спасибо m.d. & xlat)
    [свернуть]

  8. #1438
    Veteran
    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,858
    Спасибо Благодарностей отдано 
    131
    Спасибо Благодарностей получено 
    104
    Поблагодарили
    62 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Пишешь jp MAIN в самом начале программы и ставишь процедуры, где хочешь. Кросскомпиль Паскаля так и делает, если есть процедуры.

  9. #1439
    Guru Аватар для bigral
    Регистрация
    12.07.2006
    Адрес
    г. Киев, Украина
    Сообщений
    2,147
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    95
    Поблагодарили
    82 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alexander27Ru Посмотреть сообщение
    Вот иллюстрация чего я хочу, надеюсь будет понятно:

    Код:
    ; это не должно компилироваться сразу
    procedure SomethingToDo
      puch bc
      …
      pop bc
      ret
    end procedure
    "не должно компилироваться сразу" - а когда ему компилироваться? Может имеются ввиду директивы "условной компиляции" (их применяют для создания универсального исходника который может производить бинарники для разных конфигураций)?

    - - - Updated - - -

    Цитата Сообщение от Alexander27Ru Посмотреть сообщение
    До этого много кодил в Delphi, и наверное это уже способ мышления такой - всё обёртывать в процедуры и функции, а затем в основном коде вызывать их в нужном порядке. Подумал компилятор ассемблера позволяет вытворять что-то в сходном стиле.
    Смысла "ВСЕ обертывать" нету. Просто пишешь код думая об "структурах" которыми ты манипулируешь, не думая где этот код будет и где эти структуры будут. В процессе будет видно какие куски кода надо выделить в процедуры так как их надо выполнять 2 и более раз (возможны процедуры с многими входами в отличии от паскаля). Если какой-то кусок хочется "свернуть" чтобы он "не путался" в конкретном месте мешая понимать смысл программы, но при этом он не процедура, то для него надо делать include и размещать в отдельном файле (ну или обьявить его макросом и использовать 1 раз).

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

    По умолчанию

    Цитата Сообщение от Alexander27Ru Посмотреть сообщение
    То есть никаких "процедур", просто расставляем в требуемом порядке фрагменты кода, а там где фрагменты должны отработать по несколько раз уже сами решаем где этот фрагмент будет лежать в конечном коде и как он будет вызываться?
    Добавлю к комментариям выше, что "где лежать" определяется порядком следования кода в исходнике. Выбросить невызываемые процедуры компилятор не может, потому что, в общем-то, категориями процедур он не оперирует (в отличие от Delphi, в ассемблере можно сделать переход на любую команду в коде, и даже внутрь команды).
    ZX Evolution Rev C + ZXM-SoundCard Extreme + NeoGS.

Страница 144 из 167 ПерваяПервая ... 140141142143144145146147148 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Кросс-ассемблеры Z80 для Pc
    от Aprisobal в разделе Программирование
    Ответов: 16
    Последнее: 15.01.2011, 22:46
  2. кросс компилятор С для Z80
    от vitasam в разделе Программирование
    Ответов: 24
    Последнее: 04.03.2007, 18:03
  3. Хороший ПЦшный ассемблер - залог успеха!
    от Aprisobal в разделе Программирование
    Ответов: 35
    Последнее: 08.08.2005, 15:25
  4. ZX ассемблер (и не только?) с библиотеками
    от shade в разделе Программирование
    Ответов: 24
    Последнее: 04.03.2005, 19:43

Ваши права

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