Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
msx:assembler_programming_guide-fakhrutdinov_bocharov:01 [2020-05-16 00:53] GreyWolf [1.5.1. Общая память] |
msx:assembler_programming_guide-fakhrutdinov_bocharov:01 [2023-02-04 22:21] (текущий) GreyWolf [1.1. Редактирование текста программы] |
||
---|---|---|---|
Строка 17: | Строка 17: | ||
Кроме команд в тексте программы на языке ассемблера могут встретиться и директивы ассемблеру. Директивы обычно не транслируются, а являются указанием ассемблеру выполнить определенное действие. | Кроме команд в тексте программы на языке ассемблера могут встретиться и директивы ассемблеру. Директивы обычно не транслируются, а являются указанием ассемблеру выполнить определенное действие. | ||
- | Для микропроцессора Z80 применимы ассемблеры [[msx:duad:duad|]], [[msx:macro-80_assembler:macro-80_assembler|M80]], GEN80, Роботрон-1715 и другие. Кроме различных качественных характеристик они имеют различающиеся наборы директив. | + | Для микропроцессора [[zilog_z80:zilog_z80|Z80]] применимы ассемблеры [[msx:duad:duad|]], [[msx:macro-80_assembler:macro-80_assembler|M80]], [[hisoft_devpac:hisoft_devpac#GEN80|GEN80]], Роботрон-1715 и другие. Кроме различных качественных характеристик они имеют различающиеся наборы директив. |
+ | <WRAP> | ||
Оттранслированная машинная программа обычно может быть представлена в одном из двух форматов — ''.OBJ'' или ''.COM''. | Оттранслированная машинная программа обычно может быть представлена в одном из двух форматов — ''.OBJ'' или ''.COM''. | ||
- | Программы типа ''.OBJ'' загружаются и выполняются в среде [[msx:basic:]] и обычно транслируются с адреса 8000h и выше. Программы типа ''.COM'' работают как задачи операционной системы [[msx:dos|]] и размещаются с адреса 100h. | + | Программы типа ''.OBJ'' загружаются и выполняются в среде [[msx:basic:]] и обычно транслируются с адреса 8000h и выше, для запуска используется команда: |
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | <code> | ||
+ | BLOAD"PROG.OBJ",r | ||
+ | </code> | ||
+ | |||
+ | </WRAP> | ||
+ | |||
+ | <WRAP half column> | ||
+ | . | ||
+ | </WRAP> | ||
+ | </WRAP> | ||
+ | Программы типа ''.COM'' работают как задачи операционной системы [[msx:dos:|]] и размещаются с адреса 100h. | ||
+ | </WRAP> | ||
- | Разные трансляторы могут давать машинный код для микропроцессоров разных типов, например для Z80 или для Intel 8080. | + | Разные трансляторы могут давать машинный код для микропроцессоров разных типов, например для [[zilog_z80:zilog_z80|Z80]] или для Intel 8080. |
Строка 28: | Строка 43: | ||
===== 1.1. Редактирование текста программы ===== | ===== 1.1. Редактирование текста программы ===== | ||
- | Итак, мы хотим написать программу. Для этого надо загрузить текстовый редактор (например: [[msx:tor|TOR]], MIM, SCED, [[msx:ted_mysterysoft:ted_mysterysoft|TED]] или другой). Это можно сделать в [[msx:dos|]], вставив диск с редактором в дисковод и набрав в ответ на приглашение DOS имя редактора: | + | Итак, мы хотим написать программу. Для этого надо загрузить текстовый редактор (например: [[msx:tor:tor|TOR]], [[msx:mim:|MIM]], SCED, [[msx:ted_mysterysoft:ted_mysterysoft|TED]] или другой). Это можно сделать в [[msx:dos:|]], вставив диск с редактором в дисковод и набрав в ответ на приглашение DOS имя редактора: |
<code> | <code> | ||
A>ted | A>ted | ||
Строка 155: | Строка 170: | ||
Первая директива этой программы сообщает ассемблеру, что команды записаны в соответствии с мнемоникой Z80. | Первая директива этой программы сообщает ассемблеру, что команды записаны в соответствии с мнемоникой Z80. | ||
- | После записи текста программы в файл с расширением ''.ASM'', не выходя из [[msx:dos|]] в [[msx:basic:]], наберите команду вида: | + | После записи текста программы в файл с расширением ''.ASM'', не выходя из [[msx:dos:|]] в [[msx:basic:]], наберите команду вида: |
<code> | <code> | ||
A>M80 =example.asm/L | A>M80 =example.asm/L | ||
Строка 238: | Строка 253: | ||
В случае успешной трансляции мы можем выполнить нашу программу. | В случае успешной трансляции мы можем выполнить нашу программу. | ||
- | Для запуска программы типа ".OBJ" надо выйти в [[msx:basic:]] и загрузить программу командой: | + | Для запуска программы типа ''.OBJ'' надо выйти в [[msx:basic:]] и загрузить программу командой: |
<code> | <code> | ||
- | Bload"example.obj",R | + | BLOAD"example.obj",R |
</code> | </code> | ||
Буква ''R'' обозначает "выполнить". Машина тут же должна выдать Ok. Так как наша программа уже загружена, её можно выполнить снова. Для этого надо определить её как функцию и передать ей управление. | Буква ''R'' обозначает "выполнить". Машина тут же должна выдать Ok. Так как наша программа уже загружена, её можно выполнить снова. Для этого надо определить её как функцию и передать ей управление. | ||
<code> | <code> | ||
- | Dеfusr = &h9000: i = usr(0) | + | DEFUSR = &H9000: I = USR(0) |
</code> | </code> | ||
Строка 251: | Строка 266: | ||
Как Вы могли понять, программа написанная нами выше — не что иное, как обыкновенная задержка во времени. Но надо сказать, что эту задержку при выполнении Вы не заметите. Это объясняется большой скоростью выполнения программ на языке ассемблера. Поэтому для написания задержек обычно используют пару регистров. | Как Вы могли понять, программа написанная нами выше — не что иное, как обыкновенная задержка во времени. Но надо сказать, что эту задержку при выполнении Вы не заметите. Это объясняется большой скоростью выполнения программ на языке ассемблера. Поэтому для написания задержек обычно используют пару регистров. | ||
- | Это мы рассмотрим несколько ниже, а сейчас попробуем написать эту же программу, но "оттранслировав" самостоятельно и записав через BASIC (можно предварительно загрузить в текстовый редактор листинг нашей программы и посмотреть, как она оттранслирована): | + | Это мы рассмотрим несколько ниже, а сейчас попробуем написать эту же программу, но "оттранслировав" самостоятельно и записав через [[msx:basic:]] (можно предварительно загрузить в текстовый редактор листинг нашей программы и посмотреть, как она оттранслирована): |
<code> | <code> | ||
10 DATA 06,40 :REM LD B,40 9000 | 10 DATA 06,40 :REM LD B,40 9000 | ||
Строка 271: | Строка 286: | ||
Как уже говорилось выше, программу типа ''.REL'' нужно обработать редактором связей, чтобы получить соответствующую программу типа ''.COM''. | Как уже говорилось выше, программу типа ''.REL'' нужно обработать редактором связей, чтобы получить соответствующую программу типа ''.COM''. | ||
- | Для запуска программы с расширением ''.COM'' наберите в режиме [[msx:dos|]] её имя без расширения: | + | Для запуска программы с расширением ''.COM'' наберите в режиме [[msx:dos:|]] её имя без расширения: |
<code> | <code> | ||
A>example | A>example | ||
Строка 511: | Строка 526: | ||
exam | exam | ||
</code> | </code> | ||
+ | |||
---- | ---- | ||
Строка 517: | Строка 533: | ||
- | {{tag>MSX assembler Programming Book_apguidefb on_github}} | + | {{tag>MSX Book_apguidefb on_github}} |