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

User Tag List

Страница 1 из 9 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 88

Тема: Программирование в машинных кодах

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Member
    Регистрация
    23.10.2012
    Адрес
    г. Красноярск
    Сообщений
    168
    Спасибо Благодарностей отдано 
    35
    Спасибо Благодарностей получено 
    48
    Поблагодарили
    23 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Программирование в машинных кодах

    Доброго дня. Тыкаю эмулятор Радио-86РК (Emu80) на предмет подготовки к стриму... Но вот как-то работает он интересно. Точнее печально. Код 0Е 21 CD 09 F8 C9 делает черти что... Запуск по G0000 (собственно там и располагается программа). Что примечательно, на "Специалисте" аналогичная программа работает как надо. А вот на Радио-86РК беда просто. Есть что-то, чего я не учел? А вот при попытке напрямую поместить значение байта в ячейки (ну просто для примера) 37С2 и 37С3 тоже начинается абсолютно непонятная канитель.

    Вообще машина не то чтобы сильно меня интересует - я больше по Специалисту тащусь ). Но чтобы выдать адекватную информацию, нужно самому на этом компьютере научиться работать.

    Я вот всегда думал, что на Радио-86 кодить будет проще из-за текстового режима работы, по факту оказалось все с точностью наоборот. Монитор Специалиста, зашитый в эмулятор, работает ощутимо приятнее и понятнее чем РК.

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

  3. #2
    Veteran Аватар для zebest
    Регистрация
    11.01.2008
    Адрес
    Ладошкино
    Сообщений
    1,678
    Записей в дневнике
    4
    Спасибо Благодарностей отдано 
    325
    Спасибо Благодарностей получено 
    230
    Поблагодарили
    178 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Zidane Посмотреть сообщение
    Код 0Е 21 CD 09 F8 C9 делает черти что...
    нормально этот код работает. Как и должОн.
    Это особенности программированийя ВГ75, управляющие коды etc... Все просто.
    в д.с. 0Eh тут контроллер сбивает. Запиши втуда что-нить попроще, нУ 55h. например.
    Последний раз редактировалось zebest; 28.08.2022 в 16:01.
    Profi v3.2 -=- Speccy2010,r2

  4. #3
    Activist Аватар для SegaBoy
    Регистрация
    12.11.2009
    Адрес
    Москва
    Сообщений
    390
    Спасибо Благодарностей отдано 
    38
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    59 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zebest Посмотреть сообщение
    нормально этот код работает. Как и должОн.
    Это особенности программированийя ВГ75, управляющие коды etc... Все просто.
    в д.с. 0Eh тут контроллер сбивает. Запиши втуда что-нить попроще, нУ 55h. например.
    В примере 0E 21 это команда mvi c, ‘!’ и она никак не должна влиять на контроллер

  5. #4
    Veteran Аватар для zebest
    Регистрация
    11.01.2008
    Адрес
    Ладошкино
    Сообщений
    1,678
    Записей в дневнике
    4
    Спасибо Благодарностей отдано 
    325
    Спасибо Благодарностей получено 
    230
    Поблагодарили
    178 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    в примере - F809h - вывод символа на экран. Думаешь оно ограничилось одним символом и вернулось из п\п? Ну да , ну да. Пока стоп-кода нет - будет выводить все, что встретит, весь мусор, в т.ч. и управляющие коды. Что и наблюдаем
    Profi v3.2 -=- Speccy2010,r2

  6. #5
    Activist Аватар для SegaBoy
    Регистрация
    12.11.2009
    Адрес
    Москва
    Сообщений
    390
    Спасибо Благодарностей отдано 
    38
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    59 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zebest Посмотреть сообщение
    в примере - F809h - вывод символа на экран. Думаешь оно ограничилось одним символом и вернулось из п\п? Ну да , ну да. Пока стоп-кода нет - будет выводить все, что встретит, весь мусор, в т.ч. и управляющие коды. Что и наблюдаем
    F809 это вывод одиночного символа из регистра C. Там не требуется никаких стоп-кодов.

    0E это не управляющий код - это символ стрелка вправо. Можно заменить 0E 21, на 0E 0E и убедиться в этом.
    В эмуляторе вывод портится из-за последней команды C9 - ret. После неё стек налазит на экран, но программа переходит на адрес 0000 и выполняет новый цикл. С каждым разом всё дальше наезжая стеком на экран. Если в эмуляторе нажать ресет, то программа будет исполняться как и на реале - выведет один символ ‘!’ На экран и повиснет - улетит куда-то в неизвестность.

    Непонятно что хотел топикпастер. Если вывести символ ‘!’ в бесконечном цикле на экран, то последняя команда должна быть не C9 (ret), а C3 0000 (jmp 0000). Если же вывести один раз символ и вернутся в монитор, то C3 F86C - переход к приглашению командной строки.

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

    zebest (28.08.2022), Zidane (26.10.2023)

  8. #6
    Guru
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    13,820
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    150
    Спасибо Благодарностей получено 
    1,196
    Поблагодарили
    788 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SegaBoy Посмотреть сообщение
    Непонятно что хотел топикпастер
    он наверно думал что "G0000" это аналог Call, а не Jump
    ну и в руководствах для возврата в монитор упоминается RST6

  9. #7
    Veteran Аватар для Serg6845
    Регистрация
    30.12.2018
    Адрес
    г. Москва
    Сообщений
    1,016
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    255
    Поблагодарили
    235 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от goodboy Посмотреть сообщение
    он наверно думал что "G0000" это аналог Call, а не Jump
    ну в мониторе Специалиста так и есть.

    Зверинецъ

    Специалист (был когда-то "совсем стандарт") - 1988-2023
    Ленинград1 +256К +AY+BDI+VGA выход +Ethernet (Speccyboot) +Xmodem (115200)+divmmc
    Ленинград2 + CF карта
    Платформа 8085+Z80+CPLD (Специалист МХ2 +SD +FDD +PS/2kbd)
    БК0010-01 стоковый
    [свернуть]

  10. #8
    Member
    Регистрация
    23.10.2012
    Адрес
    г. Красноярск
    Сообщений
    168
    Спасибо Благодарностей отдано 
    35
    Спасибо Благодарностей получено 
    48
    Поблагодарили
    23 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SegaBoy Посмотреть сообщение
    F809 это вывод одиночного символа из регистра C. Там не требуется никаких стоп-кодов.

    0E это не управляющий код - это символ стрелка вправо. Можно заменить 0E 21, на 0E 0E и убедиться в этом.
    В эмуляторе вывод портится из-за последней команды C9 - ret. После неё стек налазит на экран, но программа переходит на адрес 0000 и выполняет новый цикл. С каждым разом всё дальше наезжая стеком на экран. Если в эмуляторе нажать ресет, то программа будет исполняться как и на реале - выведет один символ ‘!’ На экран и повиснет - улетит куда-то в неизвестность.

    Непонятно что хотел топикпастер. Если вывести символ ‘!’ в бесконечном цикле на экран, то последняя команда должна быть не C9 (ret), а C3 0000 (jmp 0000). Если же вывести один раз символ и вернутся в монитор, то C3 F86C - переход к приглашению командной строки.
    Периодически не дает мне покоя данная железка. По итогу откопал в журнале Радио статью про ассемблер и посмотрел как надо. Ну в общем-то мне тут и ответили, а только я прочитать не сумел. Слабак )))
    Смутило другое: в приведенном примере (не суть важно каком) вызов всех подпрограмм, в т.ч. из ПЗУ происходит командой JMP. Так задумано или я опять чего-то не понял?

    Этот РК - прямо как наркотик.. Один раз попробуешь, уже не слезешь так просто...
    Последний раз редактировалось Zidane; 26.10.2023 в 18:49.

  11. #9
    Member Аватар для Alikberov
    Регистрация
    11.04.2023
    Адрес
    г. Ташкент, Узбекистан
    Сообщений
    118
    Спасибо Благодарностей отдано 
    27
    Спасибо Благодарностей получено 
    50
    Поблагодарили
    22 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Zidane Посмотреть сообщение
    Смутило другое: в приведенном примере (не суть важно каком) вызов всех подпрограмм, в т.ч. из ПЗУ происходит командой JMP.
    Если программировать/отлаживать код в Visual Studio, те же CreateWindowEx, SelectObject и т.д. - те же CALL на локальную таблицу из кучи JMP'ов, а JMP'ы уже и ведут в недры Win-API. То есть, принципиально, всё то же самое как в РК, так и в Windows.

  12. #10
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,884
    Спасибо Благодарностей отдано 
    667
    Спасибо Благодарностей получено 
    1,894
    Поблагодарили
    1,075 сообщений
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Zidane Посмотреть сообщение
    Код 0Е 21 CD 09 F8 C9 делает черти что... Запуск по G0000 (собственно там и располагается программа).
    Не надо завершать запускаемую по G программу RETом, если только она сама не запишет в стек какой-нибудь корректный адрес возврата.

    Цитата Сообщение от Zidane Посмотреть сообщение
    Что примечательно, на "Специалисте" аналогичная программа работает как надо.
    Вероятно только на SP580, у стандартного специалиста по адресу F809 нет пзу. Хотя попробовал - на SP580 тоже работает не очень, опять же не надо завершать RETом.

Страница 1 из 9 12345 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 18
    Последнее: 09.12.2018, 12:32
  2. Растактовка машинных циклов intel 8080
    от NEO SPECTRUMAN в разделе Эмуляторы отечественных компьютеров
    Ответов: 2
    Последнее: 06.04.2017, 17:09
  3. Ответов: 10
    Последнее: 06.03.2015, 12:59
  4. Ответов: 4
    Последнее: 26.07.2014, 16:52
  5. Клинит башню от машинных систем счисления
    от Watt в разделе Программирование
    Ответов: 17
    Последнее: 04.05.2005, 14:40

Ваши права

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