Author Topic: Ассемблер для Z80  (Read 17077 times)

0 Members and 1 Guest are viewing this topic.

Offline Alone Coder

  • Posts: 22547
    • Орфовики
« Reply #50on: October 13, 2011, 22:50 »
Мечтаю об асме с лисп-подобным синтаксисом.
Лисп-подобный синтаксис по определению не указывает порядок выполнения операций. В асме это критично.

Offline orang_baik

  • Posts: 3873
« Reply #51on: October 13, 2011, 22:52 »
Лисп-подобный синтаксис по определению не указывает порядок выполнения операций. В асме это критично.
Функции вызываются в произвольном порядке?

Offline Alone Coder

  • Posts: 22547
    • Орфовики
« Reply #52on: October 13, 2011, 22:52 »
В лиспе - да.

Online Python

  • Posts: 33008
  • Aluarium agent
« Reply #53on: October 13, 2011, 22:58 »
Мечтаю об асме с лисп-подобным синтаксисом.
Лисп-подобный синтаксис по определению не указывает порядок выполнения операций. В асме это критично.
1) S-expressions пригодны для записи чего-угодно (в т.ч. и императивного языка с четким следованием команд). А вот лиспоидные макросы в ассемблере пригодились бы.
2) Команду можно рассматривать как функцию, получающую на входе старое состояние системы и возвращающую новое.
3) В известных мне диалектах лиспа присутствуют функции с побочным действием, последовательность выполнения которых при работе программы не изменяется произвольным образом.
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Offline Alone Coder

  • Posts: 22547
    • Орфовики
« Reply #54on: October 13, 2011, 23:02 »
А вот лиспоидные макросы в ассемблере пригодились бы.
Приведите пример задачи.

Команду можно рассматривать как функцию, получающую на входе старое состояние системы и возвращающую новое.
Тогда программа будет выглядеть как (cmdN ... (cmd2 (cmd1state)))..). Удобно шопесец. Главное наглядно!

Online Python

  • Posts: 33008
  • Aluarium agent
« Reply #55on: October 13, 2011, 23:12 »
Тогда программа будет выглядеть как (cmdN ... (cmd2 (cmd1state)))..). Удобно шопесец. Главное наглядно!
Ну зачем так грубо? Можно ведь и (reduce #(apply %2 %1) state [cmd1 cmd2 cmd3 ... cmdN])
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Offline mnashe

  • Administrator
  • *
  • Posts: 40721
    • Библиотека
« Reply #56on: October 13, 2011, 23:24 »
Но только для архитектуры x86. О Z80 я вообще понятия не имею.
:+1:
Ещё я в своё время знакомился с ассемблером для PDP-11 (кажется,  так оно называлось), у меня даже сохранилась тетрадка, куда я это переписывал; но воспользоваться не довелось: я вскоре уехал оттуда, а вся эта платформа потеряла актуальность.
שָׁלוֹם עֲלֵיכֶם!

Online Python

  • Posts: 33008
  • Aluarium agent
« Reply #57on: October 13, 2011, 23:47 »
А вот лиспоидные макросы в ассемблере пригодились бы.
Приведите пример задачи.
Ну, например, закинуть в стек аргументы, вызвать функцию, вернуть стэк в изначальное состояние. Функция и количество аргументов — произвольные, последний аргумент в стек ложится первым. Возможно использование макросов в качестве апгументов (в этом случае происходит подстановка кода из макроса, после чего делается push AX).
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Offline Alone Coder

  • Posts: 22547
    • Орфовики
« Reply #58on: October 13, 2011, 23:55 »
Ну, например, закинуть в стек аргументы, вызвать функцию, вернуть стэк в изначальное состояние. Функция и количество аргументов — произвольные, последний аргумент в стек ложится первым. Возможно использование макросов в качестве апгументов (в этом случае происходит подстановка кода из макроса, после чего делается push AX).
Это делается и на обычных макросах, только это жирные макросы. Влом писать. Особенно если учесть, что это не нужно. В асме параметры передают в регистрах, а не через стек.

Online Python

  • Posts: 33008
  • Aluarium agent
« Reply #59on: October 14, 2011, 00:00 »
Ну, например, закинуть в стек аргументы, вызвать функцию, вернуть стэк в изначальное состояние. Функция и количество аргументов — произвольные, последний аргумент в стек ложится первым. Возможно использование макросов в качестве апгументов (в этом случае происходит подстановка кода из макроса, после чего делается push AX).
Это делается и на обычных макросах, только это жирные макросы. Влом писать. Особенно если учесть, что это не нужно. В асме параметры передают в регистрах, а не через стек.
Почему же, из асма можно вызвать функцию из сишной библиотеки, которой аргументы передаются описанным выше способом. Если оформить это в виде макроса, то лучше и не начинать — получится что-то жирное и глючное.
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Offline arseniiv

  • Posts: 14956
    • ::
« Reply #60on: October 14, 2011, 00:02 »
А у меня был не Лисп.

Online Python

  • Posts: 33008
  • Aluarium agent
« Reply #61on: October 14, 2011, 00:29 »
А у меня был не Лисп.
Знаю. Но такое скопление скобок невольно вызывает мысли...
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Offline Тайльнемер

  • Posts: 12253
  • Σοι υν βυρρο. Ix bin æn ézl
« Reply #62on: October 14, 2011, 05:58 »
Мечтаю об асме с лисп-подобным синтаксисом.
(wiki/en) Lisp_machine

Online Python

  • Posts: 33008
  • Aluarium agent
« Reply #63on: October 14, 2011, 06:57 »
Мечтаю об асме с лисп-подобным синтаксисом.
(wiki/en) Lisp_machine
Вымерли в 80-х :(
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Offline jvarg

  • Posts: 12470
« Reply #64on: October 14, 2011, 12:47 »
Ну, например, закинуть в стек аргументы, вызвать функцию, вернуть стэк в изначальное состояние.
Угу, только это лишние байты, что при тогдашних объемах памяти и быстродействии имело огромное значение.

Для тогдашних маленьких машин были и компиляторы высокоуровневых языков, однако именно потому для создания практических программ и использовался, в основном, ассемблер, что он позволял сократить объем программы даже на таких мелочах, как передача параметров через стек.
Все бояться быть обвинёнными в ксенофобии. А вот в русофобии никто.
(© Захар Прилепин)

Online Python

  • Posts: 33008
  • Aluarium agent
« Reply #65on: October 14, 2011, 14:42 »
Однако, ввод-вывод на чистом ассемблере реализовывался довольно неудобно. Почему и возникала необходимость подключать чужие библиотеки.
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Offline jvarg

  • Posts: 12470
« Reply #66on: October 14, 2011, 17:25 »
Однако, ввод-вывод на чистом ассемблере реализовывался довольно неудобно. Почему и возникала необходимость подключать чужие библиотеки.
Смотря для какой архитектуры.

У вышеупомянутой PDP-11 все устройства ввода-вывода просто выглядили, как ячейки памяти в общем адресном пространстве. У Z80, ЕМНИП, тоже. Так что вывод на внешнее устройство ничем не отличался от обычной записи данных в память.

Когда через порты, или прерывания - тогда да, на ассемблере - геморно.
Все бояться быть обвинёнными в ксенофобии. А вот в русофобии никто.
(© Захар Прилепин)

« Reply #67on: October 14, 2011, 17:37 »
Там 28 регистров, и все они неравноправны. Так что можно жонглировать ими долго, пока не найдёшь самое эффективное решение.
Кстати, для быстрого обучения ассемблеру это не всегда плюс. У меня самый большой практический опыт программирования на АСМ для Атари. Там был вообще, фактически, один регистр, и ничего.
Все бояться быть обвинёнными в ксенофобии. А вот в русофобии никто.
(© Захар Прилепин)

Online Python

  • Posts: 33008
  • Aluarium agent
« Reply #68on: October 14, 2011, 17:47 »
Quote
У вышеупомянутой PDP-11 все устройства ввода-вывода просто выглядили, как ячейки памяти в общем адресном пространстве. У Z80, ЕМНИП, тоже. Так что вывод на внешнее устройство ничем не отличался от обычной записи данных в память.
Т.е., аналога обычных функций ввода/вывода не было вообще? В ДОС можно еще выводить текст через стандартный вывод и принимать из стандартного ввода, используя прерывания.
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Offline jvarg

  • Posts: 12470
« Reply #69on: October 14, 2011, 18:21 »
Т.е., аналога обычных функций ввода/вывода не было вообще?
В PDP-11 и моем Атари - нет. Даже команд процессора типа IN и OUT не было. Просто, к примеру, каждый символ или пиксель экрана соответсвует байтику в определенной области памяти. Что бы вывести символ (в текстовом режиме), нужно просто записать его код по нужному адресу. В графическом режиме аналогично с пикселями.

Это очень упрощает программирование, но тратит драгоценное адресное пространство.
Все бояться быть обвинёнными в ксенофобии. А вот в русофобии никто.
(© Захар Прилепин)

« Reply #70on: October 14, 2011, 18:26 »
В ДОС можно еще выводить текст через стандартный вывод и принимать из стандартного ввода, используя прерывания.
Ну так ДОС этим косил под Юникс. А вообще там тоже без проблем через память адресовалось, только Майкрософт этого категорически не рекомендовал делать.
Все бояться быть обвинёнными в ксенофобии. А вот в русофобии никто.
(© Захар Прилепин)

Offline sasza

  • Posts: 7631
« Reply #71on: October 14, 2011, 18:32 »
Просто такова была реализация конкретных компьютеров. В Синклере под видеопамять тоже использовалось около 7 КБ общего адресного пространства, но это совсем не значит, что у Z80 нет команд ввода/вывода.

Offline RawonaM

  • Posts: 42167
« Reply #72on: October 14, 2011, 18:33 »
Т.е., аналога обычных функций ввода/вывода не было вообще?
В PDP-11 и моем Атари - нет. Даже команд процессора типа IN и OUT не было. Просто, к примеру, каждый символ или пиксель экрана соответсвует байтику в определенной области памяти. Что бы вывести символ (в текстовом режиме), нужно просто записать его код по нужному адресу. В графическом режиме аналогично с пикселями.
В ДОСе на х86 точно так же доступна графическая память через общее пространство. Ничего особистого в этом нет.

« Reply #73on: October 14, 2011, 18:35 »
Это очень упрощает программирование, но тратит драгоценное адресное пространство.
Собственно, не понял как это упрощает. Может я недопонял о чем речь.

Online Python

  • Posts: 33008
  • Aluarium agent
« Reply #74on: October 14, 2011, 18:35 »
В ДОС можно еще выводить текст через стандартный вывод и принимать из стандартного ввода, используя прерывания.
Ну так ДОС этим косил под Юникс. А вообще там тоже без проблем через память адресовалось, только Майкрософт этого категорически не рекомендовал делать.
Это имеет смысл не во всех случаях. Во многих случаях удобнее работать с потоками, которые можно перенаправлять в файл или другое устройство вывода. С видеобуфером экрана это уже сложнее сделать.
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

 

With Quick-Reply you can write a post when viewing a topic without loading a new page. You can still use bulletin board code and smileys as you would in a normal post.

Note: this post will not display until it's been approved by a moderator.
Name: Email:
Verification:
Type the letters shown in the picture
Listen to the letters / Request another image
Type the letters shown in the picture:
√49 Напишите ответ строчными буквами:
«Сто одёжек, все без застёжек» — что это?: