User Tag List

Страница 4 из 9 ПерваяПервая 12345678 ... ПоследняяПоследняя
Показано с 31 по 40 из 82

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

  1. #31

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

    По умолчанию

    Доброго времени суток форумчане. Залип не по детски. Есть до смешного простой код:

    ORG $7530
    LD A,(25000)
    LD HL,25001
    SUB A,(HL)
    LD (25004),A
    RET

    И не работает... Вместо SUB ставим ADD, ADC или SBC - все отлично, вот при указанном раскладе неизменно получаю сообщение "Invalid combination of opcode and operators". перерыл все справочники какие нашел - есть такая команда. А ассемблер говорит что нет. Вот и втыкаю в формате "то ли лыжи не едут..." ну и далее по тексту. Причем ошибку выдает как в современных средствах разработки, так и в древнючем GENS... При написании руководствовался вот этим вот материалом https://sysadminmosaic.ru/msx/assemb...ov_bocharov/11, раздел 8-битной арифметики. Кстати пробовал указывать числа только в 16-ричном формате, все равно не работает.
    Последний раз редактировалось Zidane; 22.07.2022 в 19:44.

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

  3. #32

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

    По умолчанию

    sub (hl)

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

    Zidane(22.07.2022)

  4. #33

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Zidane Посмотреть сообщение
    Доброго времени суток форумчане. Залип не по детски. Есть до смешного простой код:

    ORG $7530
    LD A,(25000)
    LD HL,25001
    SUB A,(HL)
    LD (25004),A
    RET

    И не работает... Вместо SUB ставим ADD, ADC или SBC - все отлично, вот при указанном раскладе неизменно получаю сообщение "Invalid combination of opcode and operators". перерыл все справочники какие нашел - есть такая команда. А ассемблер говорит что нет. Вот и втыкаю в формате "то ли лыжи не едут..." ну и далее по тексту. Причем ошибку выдает как в современных средствах разработки, так и в древнючем GENS... При написании руководствовался вот этим вот материалом https://sysadminmosaic.ru/msx/assemb...ov_bocharov/11, раздел 8-битной арифметики. Кстати пробовал указывать числа только в 16-ричном формате, все равно не работает.
    Z80opcodes.zip
    С уважением,
    Jerri / Red Triangle.

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

    Zidane(22.07.2022)

  5. #34

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

    По умолчанию

    Уже подсказали, но большое спасибо за ответ.

  6. #35

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

    По умолчанию

    Доброго времени суток. Нубу снова не спится. Озадачился вопросом, можно ли передавать 2-байтные значения из бейсик в ассемблер. И вообще, возможно ли это. В разного рода книжках вроде обозначена область VARS, но она, как я понял, используется для хранения переменных самого интепретатора, а мне надо бы то, что пользователь ввел.

  7. #36

    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,691
    Спасибо Благодарностей отдано 
    302
    Спасибо Благодарностей получено 
    223
    Поблагодарили
    159 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Zidane Посмотреть сообщение
    можно ли передавать 2-байтные значения из бейсик в ассемблер
    POKE addr, value1
    POKE addr+1, value2

    ...

    ld hl, (addr)
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm
    Bard's disasm

  8. #37

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

    По умолчанию

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    POKE addr, value1
    POKE addr+1, value2

    ...

    ld hl, (addr)
    То есть нужно предварительно пересчитать число в 16-ричный формат?

  9. #38

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    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)

  10. #39

    Регистрация
    26.11.2013
    Адрес
    г. Новосибирск
    Сообщений
    1,101
    Спасибо Благодарностей отдано 
    1,335
    Спасибо Благодарностей получено 
    322
    Поблагодарили
    151 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Есть ещё такой метод: "DEF FN A(......) = USR addr - для работы с числами;"
    Бейсик, передаёт пятибайтовые числа, но когда они целые от 0 до 65535, то их легко выделить из этих пяти байтов.

    - - - Добавлено - - -

    Вот тут я этот метод использовал.

    - - - Добавлено - - -

    Что-то я какие-то трешовые примеры накидал.
    Сейчас более чистый примерчик дам.
    В бейсике пишем:
    Код:
    10 DEF FN a(x,y)=USR 40000
    20 CIRCLE 80,80,75
    30 RANDOMIZE FN a(16384,16384+256*8)
    В ассемблере пишем прожку, которая берёт из аргументов два целых числа и переносит соответствующие два килобайта.

    Код:
            ORG  40000
            LD   HL,(5C0BH)
            LD   BC,4
            ADD  HL,BC
            LD   E,(HL)
            INC  HL
            LD   D,(HL) ; В DE взяли первый аргумент
            LD   C,7
            ADD  HL,BC
            LD   A,(HL)
            INC  HL
            LD   H,(HL)
            LD   L,A    ; В HL взяли второй аргумент
            LD   BC,800h
            LDIR
            RET
    Когда всё это дело запускаем, рисуется кружочек, а потом из средней трети экрана всё копируется в верхнюю треть.

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

    Zidane(23.07.2022)

  11. #40

    Регистрация
    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 из 9 ПерваяПервая 12345678 ... ПоследняяПоследняя

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

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

Эту тему просматривают: 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

Ваши права

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