User Tag List

Страница 23 из 35 ПерваяПервая ... 192021222324252627 ... ПоследняяПоследняя
Показано с 221 по 230 из 342

Тема: Программирование на ассемблере

  1. #221

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,388
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,366
    Поблагодарили
    1,316 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
    SetPal:
    		lxi h,COLR15
    		mvi e,15
    SetPalLoop:
    		mov a,e
    		out 2
    		mov a,m
    		out 0Ch
    		xthl
    		xthl
    		dcx h
    		dcr e
    		mov a,a
    		out 0Ch
    		jp SetPalLoop
    но это вариант "общего назначения", в микродеме как правило можно еще сократить за счет трюков.
    Последний раз редактировалось ivagor; 18.11.2021 в 18:17. Причина: исправил

    Эти 2 пользователя(ей) поблагодарили ivagor за это полезное сообщение:

    Improver(18.11.2021), metamorpho(18.11.2021)

  2. #222

    Регистрация
    24.08.2012
    Адрес
    г. Волжский
    Сообщений
    456
    Спасибо Благодарностей отдано 
    789
    Спасибо Благодарностей получено 
    266
    Поблагодарили
    101 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Improver, ivagor спасибо !!

    ivagor, а какое назначение команд xthl и mov a,a ? Это чтобы просто паузу создать между двумя out 0Ch ?

  3. #223

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,388
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,366
    Поблагодарили
    1,316 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да, нужно обойти "зоны непрограммируемости". Если временно отвлечься от темы оптимизации по размеру, то есть и оптимальный по скорости вариант, там для каждого цвета out 0Ch только один раз.

    Эти 2 пользователя(ей) поблагодарили ivagor за это полезное сообщение:

    metamorpho(18.11.2021), parallelno(01.07.2022)

  4. #224

    Регистрация
    24.08.2012
    Адрес
    г. Волжский
    Сообщений
    456
    Спасибо Благодарностей отдано 
    789
    Спасибо Благодарностей получено 
    266
    Поблагодарили
    101 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Для сокращения кода хочу убрать следующие команды при инициализации программы
    ;MVI A,0C3H ; установить переход (код команды JMP) в
    ;STA 0038H ; адрес вызова прерывания.
    ;LXI H,INIT ;УСТАНОВКА ВЕКТОРА ПРЕРЫВАНИЯ.
    ;SHLD 0039H

    Допустимо ли такой вариант ORG 0031h ?
    Пока что у меня чёрный экран выходит.

    ;==================================
    ORG 0031h
    STRINT: DI
    LXI SP,7E03h ;100H
    jmp Progrm
    ;=================================== обработка прерываний
    INIT:
    PUSH PSW
    .......................
    POP PSW
    EI
    RET ; выход из прерываний
    ;================================================= СТАРТ ПРОГРАММЫ
    Progrm:
    EI
    lxi h, 0e000h ; куда в экран
    ...............
    ;==================================

  5. #225

    Регистрация
    06.02.2018
    Адрес
    г. Волгоград
    Сообщений
    1,064
    Спасибо Благодарностей отдано 
    581
    Спасибо Благодарностей получено 
    469
    Поблагодарили
    252 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    Допустимо ли такой вариант ORG 0031h ?
    Да, вполне допустимо. Только какой смысл начинать программу с 0031h? Можно начать с нулевого адреса и до 0038h накидать ещё команд...

    Этот пользователь поблагодарил Improver за это полезное сообщение:

    metamorpho(19.11.2021)

  6. #226

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,388
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,366
    Поблагодарили
    1,316 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    С ORG 0031h это вопрос скорее к организаторам конкурса, какие векторовские форматы они принимают и как (откуда) будут запускать демы. Если допустима загрузка с магнитофонного входа, то стартовый адрес д.б. кратен 256 байтам. Если запуск из доса, то два варианта - или 100h (com/rom) или, если с "запускалкой", r0m (согласны ли организаторы использовать запускалку?). Грузить с (более-менее) произвольного адреса можно в монитор-отладчик или, например, эмулятор РК/Микроши. Опять же - организаторы согласны на это? И, кстати, если грузить в монитор отладчик затирая вектор прерываний, то это скорее всего закончится не вполне хорошо.

    Этот пользователь поблагодарил ivagor за это полезное сообщение:

    metamorpho(19.11.2021)

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

  8. #227

    Регистрация
    24.08.2012
    Адрес
    г. Волжский
    Сообщений
    456
    Спасибо Благодарностей отдано 
    789
    Спасибо Благодарностей получено 
    266
    Поблагодарили
    101 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Код:
    SetPal:
    		lxi h,COLR15
    		mvi e,15
    SetPalLoop:
    		mov a,e
    		out 2
    		mov a,m
    		out 0Ch
    		xthl
    		xthl
    		dcx h
    		dcr e
    		mov a,a
    		out 0Ch
    		jp SetPalLoop
    но это вариант "общего назначения", в микродеме как правило можно еще сократить за счет трюков.

    Какие есть трюки в ассемблере ?

    Например для сокращения кода я использую такой
    вместо lda nnnn/inr a/sta nnnn
    пишу lxi h,nnnn/inr m
    экономия 3 байта

    А что ещё есть из трюков ?

  9. #228

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,388
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,366
    Поблагодарили
    1,316 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    вместо lda nnnn/inr a/sta nnnn
    пишу lxi h,nnnn/inr m
    Не назвал бы это трюком, я несколько о другом.
    Например можно расположить палитру в памяти с адреса кратного 256 (100h) и тогда не нужен отдельный счетчик цветов (тут я не обязательно про дему в 256 байт). Убираем mvi e,15; dcr e; меняем dcx h на dcr l. Можно этот трюк модифицировать и для некоторых других адресов. Подобные придумки перечислить в рамках форумного поста вряд ли возможно.

    Этот пользователь поблагодарил ivagor за это полезное сообщение:

    metamorpho(23.11.2021)

  10. #229

    Регистрация
    06.02.2018
    Адрес
    г. Волгоград
    Сообщений
    1,064
    Спасибо Благодарностей отдано 
    581
    Спасибо Благодарностей получено 
    469
    Поблагодарили
    252 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    А что ещё есть из трюков ?
    Вопрос и простой и сложный одновременно... Трюков, вроде, не так много, но определённого их сборника или каталога нет, перечислять их тут -- как написать книгу. Попробуйте посмотреть в каталоге Базис периодические и электронные издания: Вектор-User, Байт, Scaner, InVector и др., там встречалось много советов по программированию, и спрашивайте конкретные моменты тут, посоветуем, как лучше.

    Этот пользователь поблагодарил Improver за это полезное сообщение:

    metamorpho(23.11.2021)

  11. #230

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    А что ещё есть из трюков ?
    Ответ можно разбить на две части: собственно программные трюки под конкретный проц - раз; учет аппаратных особенностей компа - два.

    8080, конечно, не совсем Z80, но кое-какие мысли изложу, а что подойдет для Вектора - кодерам под 8080 виднее.
    Именно для компактности кода, а не скорости исполнения, забываем про развернутые циклы и подобные "бусты" на скорость.
    Начинаем с выравнивания кода и данных по "ровным" HEX-адресам, а также циклов (с некоторыми допущениями).
    Для циклов это избавит в части случаев от задания количества повторов цикла в регистре, либо сверки его с конкретным числом.
    Например, заполняем некую область данными, при этом на старте HL=#XX00, нам нужно забить 100/128/200 байт. Ниже коды Z80, но общий смысл, думаю, будет понятен.
    Можно организовать цикл на 100 (или сколько там) повторений, а можно просто увеличивать регистр L, пока он не обнулится. То бишь конструкцией вида INC L: JR NZ,repeat.
    Аналогично, проверяя аккумулятор через ротацию и зная, какое число в нем было изначально (для Z80 можно и любой регистр), можно сделать нужный счетчик.
    Например, нам нужен цикл с повторением 4 (либо с реакцией на каждый 4-й проход), при этом сам счетчик даже необязательно перезагружать.
    Для этого в аккумулятор грузим #88 (%10001000 бинарно), а в программе циклически сдвигаем (RRCA или как там у 8080 пишется) и делаем переход/нужное по флагу переноса.
    Флаг этот будет устанавливаться каждый четвертый проход, при этом "счетчик" будет самовосстанавливаться. Таким же путем делаются счетчики на 2 и 8, числами #AA и #80.

    Учитывая аппаратные особенности конкретного компа (строение экрана, например), можно тоже сокращать код. Особенно часто это делается на Спектруме с его хитрым экраном.
    Выше уже писали насчет палитр Вектора, вот как раз на эту тему.

    Этот пользователь поблагодарил reddie за это полезное сообщение:

    metamorpho(23.11.2021)

Страница 23 из 35 ПерваяПервая ... 192021222324252627 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Вычисление числа Пи на ассемблере
    от perestoronin в разделе Разное
    Ответов: 330
    Последнее: 06.08.2025, 15:04
  2. Ответов: 275
    Последнее: 16.12.2018, 23:01
  3. try-catch на ассемблере z80
    от siril в разделе Программирование
    Ответов: 22
    Последнее: 30.10.2012, 21:17
  4. Продам книгу- AMIGA: программирование на ассемблере
    от Doctor Max в разделе Барахолка (архив)
    Ответов: 11
    Последнее: 01.03.2012, 00:35
  5. Подпрограмма на ассемблере в памяти?
    от jimled в разделе Программирование
    Ответов: 1
    Последнее: 29.11.2009, 06:46

Ваши права

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