Инструменты пользователя

Инструменты сайта


msx:assembler_programming_guide-fakhrutdinov_bocharov:01

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
msx:assembler_programming_guide-fakhrutdinov_bocharov:01 [2020-05-11 21:11]
GreyWolf
msx:assembler_programming_guide-fakhrutdinov_bocharov:01 [2023-02-04 22:21] (текущий)
GreyWolf [1.1. Редактирование текста программы]
Строка 17: Строка 17:
 Кроме команд в тексте программы на языке ассемблера могут встретиться и директивы ассемблеру. Директивы обычно не транслируются,​ а являются указанием ассемблеру выполнить определенное действие. Кроме команд в тексте программы на языке ассемблера могут встретиться и директивы ассемблеру. Директивы обычно не транслируются,​ а являются указанием ассемблеру выполнить определенное действие.
  
-Для микропроцессора Z80 применимы ассемблеры ​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
Строка 35: Строка 50:
 После загрузки редактора можно начинать набирать программу. После загрузки редактора можно начинать набирать программу.
  
-Если мы хотим получить файл типа ''​.OBJ'',​ то можно воспользоваться ассемблером ​DUAD. Пример программы для этого транслятора приводится ниже.+Если мы хотим получить файл типа ''​.OBJ'',​ то можно воспользоваться ассемблером ​[[msx:​duad:​duad|]]. Пример программы для этого транслятора приводится ниже.
  
 Укажем адрес, с которого нужно оттранслировать нашу программу и с которого она будет загружена в память компьютера. Адрес может быть в интервале от 8000h до DE76h для машины учителя и 8000h - F37Fh для машины ученика. Это можно сделать директивой ассемблера ORG. Например,​ Укажем адрес, с которого нужно оттранслировать нашу программу и с которого она будет загружена в память компьютера. Адрес может быть в интервале от 8000h до DE76h для машины учителя и 8000h - F37Fh для машины ученика. Это можно сделать директивой ассемблера ORG. Например,​
Строка 75: Строка 90:
 ===== 1.2. Ассемблирование программы ===== ===== 1.2. Ассемблирование программы =====
  
-В примерах мы будем использовать ассемблер системы ​DUAD фирмы ASCII или макроассемблер [[msx:​macro-80_assembler:​macro-80_assembler|M80]] (Вы можете использовать любой другой). Название ассемблера можно увидеть в первых строках листинга программы.+В примерах мы будем использовать ассемблер системы ​[[msx:​duad:​duad|]] ​фирмы ASCII или макроассемблер [[msx:​macro-80_assembler:​macro-80_assembler|M80]] (Вы можете использовать любой другой). Название ассемблера можно увидеть в первых строках листинга программы.
  
 {{anchor:​n121}} {{anchor:​n121}}
 ==== 1.2.1. Ассемблирование в системе DUAD ==== ==== 1.2.1. Ассемблирование в системе DUAD ====
  
-Как уже говорилось,​ если мы хотим получить файл типа ​".OBJ", можно воспользоваться ассемблером ​DUAD.+Как уже говорилось,​ если мы хотим получить файл типа ​''​.OBJ''​, можно воспользоваться ассемблером ​[[msx:​duad:​duad|]].
  
-Для вызова системы ​DUAD необходимо перейти в режим [[msx:​basic:​]] и набрать команду:​+Для вызова системы ​[[msx:​duad:​duad|]] ​необходимо перейти в режим [[msx:​basic:​]] и набрать команду:​
 <​code>​ <​code>​
-run"​DUAD"​+run"​DUAD.BAS"
 </​code>​ </​code>​
  
Строка 92: Строка 107:
 Source ​  : [ файл - исходный текст ] Source ​  : [ файл - исходный текст ]
 List     : [ файл для записи листинга ] List     : [ файл для записи листинга ]
-Object ​  : [ файл для записи оттранслированой программы ]+Object ​  : [ файл для записи оттранслированной программы ]
 Label A  : [ файл для меток и адресов по алфавиту] Label A  : [ файл для меток и адресов по алфавиту]
 Label L  : [ файл для меток и адресов по возрастанию адресов ] Label L  : [ файл для меток и адресов по возрастанию адресов ]
Строка 109: Строка 124:
 После этого ассемблер начнет трансляцию и через некоторое время выдаст сообщение "No errors in text" (Нет ошибок в тексте). Это значит,​ что наша программа написана без ошибок и успешно оттранслирована. Если будут другие сообщения,​ то транслирование не удалось (причиной может быть ошибка в программе,​ защита на диске или еще что-то). После этого ассемблер начнет трансляцию и через некоторое время выдаст сообщение "No errors in text" (Нет ошибок в тексте). Это значит,​ что наша программа написана без ошибок и успешно оттранслирована. Если будут другие сообщения,​ то транслирование не удалось (причиной может быть ошибка в программе,​ защита на диске или еще что-то).
  
-Для выхода из системы ​DUAD на вопрос "​Source:"​ введите ​+Для выхода из системы ​[[msx:​duad:​duad|]] ​на вопрос "​Source:"​ введите ​
 <​code>​ <​code>​
 *BASIC *BASIC
Строка 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
Строка 208: Строка 223:
 Здесь имя — это имя REL–файла,​ оттранслированного ассемблером [[msx:​macro-80_assembler:​macro-80_assembler|M80]]. Здесь имя — это имя REL–файла,​ оттранслированного ассемблером [[msx:​macro-80_assembler:​macro-80_assembler|M80]].
  
-Задание на редактирование программы,​ в которой управляющим модулем является функция main, написанная на языке C, обычно производится следующим образом:​+Задание на редактирование программы,​ в которой управляющим модулем является функция ​''​main''​, написанная на языке C, обычно производится следующим образом:​
 <​code>​ <​code>​
 А>L80 ck,​Осн-Имя,​Имя-Файла1[/​s],​Имя-Файла2[/​s],​...,​clib/​s,​crun/​s,​cend,​Имя-COM-файла/​n/​e:​xmain А>L80 ck,​Осн-Имя,​Имя-Файла1[/​s],​Имя-Файла2[/​s],​...,​clib/​s,​crun/​s,​cend,​Имя-COM-файла/​n/​e:​xmain
 </​code>​ </​code>​
-Здесь Осн-Имя — это имя REL–файла,​ содержащего код функции main. REL–файлы ck, clib, crun и cend входят в комплект ASCII C и их подключение обязательно для пользователя,​ избегающего вникать в тонкости структуры компилятора языка С.+Здесь ​ 
 +''​Осн-Имя'' ​— это имя REL–файла,​ содержащего код функции main. REL–файлы ​''​ck''​''​clib''​''​crun'' ​и ''​cend'' ​входят в комплект ​[[msx:​ascii_c:​ascii_c|ASCII C]] и их подключение обязательно для пользователя,​ избегающего вникать в тонкости структуры компилятора языка С.
  
 Пользователь должен подключить все REL–файлы,​ содержащие модули,​ необходимые для разрешения внешних ссылок. Пользователь должен подключить все REL–файлы,​ содержащие модули,​ необходимые для разрешения внешних ссылок.
Строка 237: Строка 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 ​= &h9000usr(0)+DEFUSR ​= &H9000USR(0)
 </​code>​ </​code>​
  
Строка 250: Строка 266:
 Как Вы могли понять,​ программа написанная нами выше — не что иное, как обыкновенная задержка во времени. Но надо сказать,​ что эту задержку при выполнении Вы не заметите. Это объясняется большой скоростью выполнения программ на языке ассемблера. Поэтому для написания задержек обычно используют пару регистров. Как Вы могли понять,​ программа написанная нами выше — не что иное, как обыкновенная задержка во времени. Но надо сказать,​ что эту задержку при выполнении Вы не заметите. Это объясняется большой скоростью выполнения программ на языке ассемблера. Поэтому для написания задержек обычно используют пару регистров.
  
-Это мы рассмотрим несколько ниже, а сейчас попробуем написать эту же программу,​ но "​оттранслировав"​ самостоятельно и записав через ​BASIC (можно предварительно загрузить в текстовый редактор листинг нашей программы и посмотреть,​ как она оттранслирована):​+Это мы рассмотрим несколько ниже, а сейчас попробуем написать эту же программу,​ но "​оттранслировав"​ самостоятельно и записав через ​[[msx:​basic:​]] ​(можно предварительно загрузить в текстовый редактор листинг нашей программы и посмотреть,​ как она оттранслирована):​
 <​code>​ <​code>​
 10 DATA 06,40        :REM LD   ​B,​40 ​   9000 10 DATA 06,40        :REM LD   ​B,​40 ​   9000
Строка 270: Строка 286:
 Как уже говорилось выше, программу типа ''​.REL''​ нужно обработать редактором связей,​ чтобы получить соответствующую программу типа ''​.COM''​. Как уже говорилось выше, программу типа ''​.REL''​ нужно обработать редактором связей,​ чтобы получить соответствующую программу типа ''​.COM''​.
  
-Для запуска программы с расширением ''​.COM''​ наберите в режиме [[msx:​dos|]] её имя без расширения:​+Для запуска программы с расширением ''​.COM''​ наберите в режиме [[msx:dos:|]] её имя без расширения:​
 <​code>​ <​code>​
 A>​example A>​example
Строка 315: Строка 331:
 No errors in text No errors in text
 </​code>​ </​code>​
-В результате работы ​BASIC–программы с этой подпрограммой должно получиться число 126.+В результате работы ​[[msx:​basic:​]]–программы с этой подпрограммой должно получиться число 126.
  
 Достоинством этого способа передачи данных является возможность передачи и получения из подпрограммы больших массивов информации. Достоинством этого способа передачи данных является возможность передачи и получения из подпрограммы больших массивов информации.
Строка 489: Строка 505:
 Теперь приведем исходный текст программы на языке С, вызывающей эти подпрограммы на языке ассемблера. Теперь приведем исходный текст программы на языке С, вызывающей эти подпрограммы на языке ассемблера.
 <​code>​ <​code>​
-┌──────────────────────────── 
   #include <​stdio.h>​   #include <​stdio.h>​
   main()   main()
Строка 511: Строка 526:
 exam exam
 </​code>​ </​code>​
 +
  
 ---- ----
Строка 517: Строка 533:
  
  
-{{tag>​MSX ​assembler Programming ​Book_apguidefb on_github}}+{{tag>​MSX Book_apguidefb on_github}}
  
msx/assembler_programming_guide-fakhrutdinov_bocharov/01.1589220699.txt.gz · Последние изменения: 2020-05-11 21:11 — GreyWolf