User Tag List

Показано с 1 по 10 из 82

Тема: Вопрос по ассемблеру Z80

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

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

    По умолчанию

    Цитата Сообщение от Zidane Посмотреть сообщение
    То есть нужно предварительно пересчитать число в 16-ричный формат?
    В вышеприведенном примере - да. Но есть способ попроще, хотя с некоторыми ограничениями.
    Через переменную SEED Бейсика (RND- генератор). Командой Randomize NN (до 65535) заносим туда число, а в кодах забираем оттуда значение: LD RP, (23670), где RP - нужная регистровая пара, 23670/23671 - два байта числа.
    Ограничения, думаю, понятны: при запуске кодов через Randomize Usr значение сменится по возврату в Бейсик. Обычно удобней запускать командой вида LET X=USR NN, по возврату X будет равно значению рег. пары BC, то есть можно передавать и обратно из кодов в Бейсик.

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

    Zidane(23.07.2022)

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

  3. #2

    Регистрация
    23.10.2012
    Адрес
    г. Красноярск
    Сообщений
    206
    Спасибо Благодарностей отдано 
    47
    Спасибо Благодарностей получено 
    63
    Поблагодарили
    29 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от reddie Посмотреть сообщение
    В вышеприведенном примере - да. Но есть способ попроще, хотя с некоторыми ограничениями.
    Через переменную SEED Бейсика (RND- генератор). Командой Randomize NN (до 65535) заносим туда число, а в кодах забираем оттуда значение: LD RP, (23670), где RP - нужная регистровая пара, 23670/23671 - два байта числа.
    Ограничения, думаю, понятны: при запуске кодов через Randomize Usr значение сменится по возврату в Бейсик. Обычно удобней запускать командой вида LET X=USR NN, по возврату X будет равно значению рег. пары BC, то есть можно передавать и обратно из кодов в Бейсик.
    То бишь примерно так?

    10 INPUT x ;Вводим нужное двухбайтное число
    20 LET y=USR 30000 ;Указываем адрес старта подпрограммы ассемблер
    30 RANDOMIZE x ;Помещаем число по адресам 23670/23671
    40 RANDOMIZE y ;Вызываем подпрограмму ассемблера

    ? У меня сбрасывается бейсик. Мож я чего не так понял?
    На всякий случай ниже код ассемблера который я использую. Решил пока сделать вывод на экран


    ORG $7530
    LD A,2
    CALL 5633

    LD HL,(23670)
    LD DE,1
    SBC HL,DE

    LD B,H
    LD C,L
    CALL 11563
    CALL 11747
    RET

  4. #3

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

    По умолчанию

    Строки 20 и 30 поменять местами и убрать строку 40, она бессмысленна.
    То бишь сперва заносим число в SEED, а потом уже вызываем код.
    Возможны ещё баги в кодовом блоке, уже забыл, что делают те две процедуры.
    Последний раз редактировалось reddie; 23.07.2022 в 22:22.

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

    Zidane(23.07.2022)

  5. #4

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

    По умолчанию

    Цитата Сообщение от Zidane Посмотреть сообщение
    ORG $7530
    LD A,2
    CALL 5633

    LD HL,(23670)
    LD DE,1
    SBC HL,DE

    LD B,H
    LD C,L
    CALL 11563
    CALL 11747
    RET
    Глянул талмуд - это вывод числа из стека калькулятора. Но зачем так много лишних инструкций?

    LD A, 2
    CALL 5633
    LD BC, (23670)
    DEC BC ; уменьшение на 1, если оно надо
    CALL 11563
    JP 11747

  6. #5

    Регистрация
    23.10.2012
    Адрес
    г. Красноярск
    Сообщений
    206
    Спасибо Благодарностей отдано 
    47
    Спасибо Благодарностей получено 
    63
    Поблагодарили
    29 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от reddie Посмотреть сообщение
    В вышеприведенном примере - да. Но есть способ попроще, хотя с некоторыми ограничениями.
    Через переменную SEED Бейсика (RND- генератор). Командой Randomize NN (до 65535) заносим туда число, а в кодах забираем оттуда значение: LD RP, (23670), где RP - нужная регистровая пара, 23670/23671 - два байта числа.
    Ограничения, думаю, понятны: при запуске кодов через Randomize Usr значение сменится по возврату в Бейсик. Обычно удобней запускать командой вида LET X=USR NN, по возврату X будет равно значению рег. пары BC, то есть можно передавать и обратно из кодов в Бейсик.
    Эксперимент не прекращается. И вот с последней частью вышла запарка. Хотя я разобрался. Оказалось, что при вызове подпрограмм ПЗУ для вывода 16-битного значения на экран через стек калькулятора (11563 и 11747) они вычищают рег. пару BC. Ну и в итоге по возврату в бейсик мы видим в ней 0. А вот если их убрать, то все нормально. Всем спасибо за помощь, я еще зайду ). Просто для вас, возможно, такие действия со стороны процессора очевидны, а вот я в ступор минут на 20 впал )

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

    Reobne(27.07.2022)

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

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

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

Похожие темы

  1. Книга по ассемблеру Z80
    от Shwartz в разделе Пресса
    Ответов: 11
    Последнее: 06.07.2018, 14:29
  2. Книги по бейсику и Ассемблеру Z80
    от stepmotor в разделе Программирование
    Ответов: 3
    Последнее: 30.01.2018, 19:53
  3. вопрос по z80 stealh
    от scl^mc в разделе Эмуляторы
    Ответов: 11
    Последнее: 17.08.2007, 15:32
  4. ламерский вопрос о временных диаграммах шин Z80
    от boo_boo в разделе Несортированное железо
    Ответов: 3
    Последнее: 30.01.2006, 13:14

Ваши права

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