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

User Tag List

Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 23

Тема: Основы программирования в ассемблере и машинном коде на 48 Kb памяти (для начинающих)

  1. #1
    Member
    Регистрация
    15.05.2010
    Адрес
    Москва
    Сообщений
    64
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    1 сообщение
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Основы программирования в ассемблере и машинном коде на 48 Kb памяти (для начинающих)

    Под руками лежит 48 Kb Ленинград (можно c прошивкой Turbo-91), программы Gens и Mons (в последней Я и сам работать не умею) и распечатаны все выпуски журнала ZX Ревю (возможно в плохом качестве, но вообщем-то это не так важно, хотя влияет на работоспособность программ - если что найдем правильное решение методом подбора)!

    Сначала обучимся программировать в ассемблере GENS для этого нужно его запустить:

    GENS находиться в пакете с монитором-отладчиком MONS под общим названием DEVPAC (пакет Я скачал по ссылке - https://worldofspectrum.org/archive/...-devpac-hisoft - взял магнитофонную версию под названием - HiSoftDevpacV4.tap.zip - представлена в закрепленном файле). Этот пакет состоит из трех файлов:

    1. Загрузчик на Бейсике;
    2. Ассемблер GENS4;
    3. Монитор-отладчик MONS4.

    Если по каким-либо причинам (из целесообразности не тратить память) Вы не хотите загружать - загрузчик на Бейсике, можно ввести с клавиатуры такую строку:

    Код:
    LOAD "GENS4" CODE 25000
    После этого (или до) опустите RAMTOP на один байт ниже адреса загрузки ассемблера, выполнив оператор

    Код:
    CLEAR 24999
    и теперь, чтобы GENS можно было запустить командой RUN, введите строку

    Код:
    10 RANDOMIZE USR 25000
    Если по какой-либо причине не вполне устраивает предложенный адрес, можете заменить его на любой другой. Помните только, что он не должен быть слишком низким (чтобы не повредить бейсик-систему) или слишком высоким (чтобы поместился не только сам GENS, но и текст будущей программы, который расположится следом за кодами ассемблера). Допустимый диапазон адресов загрузки лежит примерно в пределах от 24500 до 54000.

    Запуск произведен!

    На структуре ассемблерной строки, особенностях ввода строк и некоторых других пунктах Я останавливаться не буду (всю информацию по этому поводу можно прочитать в книге - Как написать игру на ассемблере для ZX Spectrum - под авторством А. Евдокимов, А. Капульцевич, И. Капульцевич, 1995), так как в теме будут рассматриваться готовые программы из журнала ZX Ревю, которые нужно просто правильно вводить и после каждой правильно набранной строки нажимать клавишу Enter.

    От себя хочу отметить - как правило, программы на ассемблере начинаются с указания начального адреса, то есть того адреса, с которого полученная программа будет загружаться в память. Это достигается включением в программу директивы ORG (от англ. Origin - начало), следом за которой пишется десятичный или шестнадцатеричный адрес. (При записи шестнадцатеричных чисел они должны начинаться с символа #, например, #3FC.), а заканчиваются как правило директивой RET (и это основное отличие от программ написанных в машинных кодах, которые не всегда содержат в своём тексте директиву ORG или директиву RET).

    Пример программы на ассемблере из журнала ZX Ревю №7, №8 за 1993 год (страница 20), демонстрирует смещение атрибутов без возврата с противоположной стороны для всех четырех направлений экрана.

    Код:
    10 ORG 23760
    20 LD DE,22528  ;Начало области экранных
                             ;атрибутов.
    30 LD HL,22560  ;Начало области атрибутов
                             ;для второго ряда знакомест.
    40 LD BC,736      ;Длина перебрасываемого блока
                             ;(23 нижних строки по 32 зна-
                             ;коместа).
    50 LDIR              ;Перенос атрибутов на одну
                              ;строку вверх.
    60 LD B,32          |Заполнение нижней строки
    70 LD A,(23693)  |экрана постоянными атрибута-
    80 LD (DE),A      |ми, взятыми из системной пе-
    90 INC DE          |ременной ATTR_P(23693)
    100 DJNZ L2       |
    110 RET             ;Возврат
    ПРОСМОТР ТЕКСТА

    После ввода достаточно больших программ часто возникает необходимость просмотра полученного текста. Команда L позволяет вывести на экран листинг программы с любой строки по любую. Если команда введена без параметров, листинг будет выводиться с самой первой строки и до конца порциями по 15 строк. После вывода очередной порции будет ожидаться нажатие любой клавиши кроме Edit, которая прервет вывод и вернет управление редактору. Общий вид команды такой:

    L[начальная строка[,конечная строка]]

    Квадратные скобки указывают на необязательность параметров.

    Если хотите, можете воспользоваться командой L и еще раз взглянуть на только что набранный текст.

    ТРАНСЛЯЦИЯ ПРОГРАММЫ

    Оттранслируйте теперь полученный исходный текст. Введите команду A безо всяких параметров. Здесь нам важно, в общем-то, одно - то, что ни в первом, ни во втором проходе ассемблирования (Pass) ошибок (errors) не обнаружено. Ассемблер обрабатывает исходный текст в два прохода: на первом проверяются синтаксические ошибки и выстраивается таблица меток (ее размер показывает самая нижняя строка сообщения Table used); во втором проходе генерируется машинный код программы.

    ВЫХОД ИЗ GENS

    Убедившись, что ошибок нет (по крайней мере, грубых), неплохо было бы проверить работоспособность получившейся программы. Работая с GENS вы в любой момент можете временно попрощаться с ассемблером и выйти в Бейсик, дав редактору команду B (Bye). После выхода из GENS4 мы рекомендуем вам прежде всего очищать экран оператором CLS или простым нажатием клавиши Enter. Дело в том, что эта версия пользуется для вывода на экран встроенным драйвером, позволяющим выводить в строке до 51 символа мелким шрифтом, и при выходе стандартный канал вывода по каким-то причинам не сразу восстанавливается. Поэтому до очистки экрана оператор PRINT может не дать ожидаемых результатов.

    Запуск набранной программы производим, набрав: RANDOMIZE USR 23760

    После нажатия клавиши Enter, произойдёт запуск программы!

    Снова вызовите редактор GENS (RANDOMIZE USR 25000) и введите команду L, текст набранной программки никуда не исчез.


    Ну как работать с GENS-ом вроде всё предельно ясно, теперь разбираемся с работой в машинном коде:

    Изначально рекомендую ознакомиться с таблицей символов процессора Z80 (представленной в закрепленном файле), символов 256 штук (0-255), хочу отметить выполнение команд процессора производиться последовательно байт за байтом, при этом первым байтом является команда, затем следующие один или два байта - это параметры команды, дальше следующая команда и т.д. и т.п.

    Согласно журнала ZX Ревю есть два варианта (честно говоря второй вариант Я нашёл в другом источнике) как вводить данные программы в память Zx Spectrum, притом Я назвал бы один вариант, который предлагает сам журнал: 1) трудноредактируемым - т.е. тот в котором, если и можно внести изменения в программу, то каждый раз надо будет вычислять контрольную сумму, что доставляет программисту некоторые неудобства связанные с лишней тратой времени и подходит чисто для правильного набора таблиц указанных после описания работы программ журнала ZX Ревю; 2) просторедактируемым, но требующий при наборе программы из таблицы ZX Ревю перевода чисел из шестнадцатеричной в десятеричную систему, понимания того как вводить символы Z80, чтобы не зависал процессор, контроля возможности релоцируемости программы в памяти.

    Итак варианты ввода программы (Я сначала напишу легкий вариант, а потом трудный - дабы не потерялся интерес к теме):

    2) просторедактируемый

    Код:
    5 CLEAR 64999
    10 FOR X=65000 TO 65015
    15 PRINT AT 0,0;X
    20 READ M
    30 POKE X,M
    40 NEXT X
    50 DATA 1,2,3,4,5
    60 DATA 6,7,8,9,10
    70 DATA 11,12,13,14,15
    Вышеуказанная программа приводиться в качестве примера (ввод RANDOMIZE USR 65000, скорее всего приведёт к сбросу или зависанию компьютера) совместного использования операторов POKE и DATA для побайтного заполнения памяти компьютера машинным кодом, начиная с области 60000

    P.S. строка 15 PRINT AT 0,0;X является индикатором выполнения программы до заполнения последнего байта.

    1) трудноредактируемый

    Код:
    1 CLEAR 62999: LET add=63000: DIM a(10)
    2 DEF FN A(a$)=(CODE a$(1)48(7 AND a$(1)>"9"))*16+(CODE a$(2)48(7 AND a$(2)>"9"))
    10 FOR f=101 TO 317
    12 RESTORE f
    14 PRINT AT 0,0; f
    15 READ a$
    16 LET sum=0
    20 FOR i=1 TO 2
    22 LET b$ = a$(2*i1 TO 2*i)
    24 LET a(i)=FN A(b$)
    26 NEXT i
    30 LET add=a(1)*256+a(2)
    32 LET sum=a(1)+a(2)
    40 FOR i = 3 TO 10
    44 LET b$=a$(2*i1 TO 2*i)
    46 LET a(i)=FN A(b$)
    48 LET sum=sum+a(i)
    50 POKE add, a(i)
    52 LET add=add+1
    54 NEXT i
    60 LET b$=a$(21 TO)
    62 LET cs=FN A(b$)
    64 LET cs1=sum256*INT(sum/256)
    66 IF cs<>cs1 THEN PRINT "ERROR!!!!!! line "; f:BEEP 2,10: STOP
    68 NEXT f: STOP
    101 DATA "F618 C3 B6 F8 00 00 54 52 41 66"
    102 DATA "F620 4E 53 4D 49 54 20 01 52 14"
    103 DATA "F628 45 43 45 49 56 45 20 01 F0"
    104 DATA "F630 00 20 43 6F 70 79 72 69 BC"
    105 DATA "F638 67 68 74 20 20 44 2E 4A 6D"
    106 DATA "F640 6F 76 61 6E 6F 76 69 63 9B"
    107 DATA "F648 20 20 31 39 38 35 20 20 95"
    108 DATA "F650 20 20 20 20 20 20 20 41 67"
    109 DATA "F658 6C 6C 20 72 69 67 68 74 64"
    110 DATA "F660 73 20 72 65 73 65 72 76 80"
    111 DATA "F668 65 64 20 20 20 20 20 20 E7"
    112 DATA "F670 20 20 20 84 8C 8C 20 88 0A"
    113 DATA "F678 20 88 20 20 20 20 88 20 3E"
    114 DATA "F680 88 20 8C 88 20 8C 8C 20 8A"
    115 DATA "F688 84 8C 8C 20 88 20 88 20 8A"
    116 DATA "F690 20 20 20 20 84 82 20 81 AD"
    117 DATA "F698 89 20 20 20 20 20 8B 89 CB"
    118 DATA "F6A0 8A 85 20 85 20 8A 20 8A 9E"
    119 DATA "F6A8 85 8C 88 20 8B 89 8A 20 15"
    120 DATA "F6B0 20 20 20 84 8E 8C 20 89 4D"
    121 DATA "F6B8 81 88 20 20 20 20 8A 20 E1"
    122 DATA "F6C0 8A 81 8C 89 20 8E 8C 82 92"
    123 DATA "F6C8 85 8C 8C 20 8A 20 8A 20 CF"
    124 DATA "F6D0 20 20 20 20 20 20 20 20 C6"
    125 DATA "F6D8 20 20 20 20 20 20 20 20 CE"
    126 DATA "F6E0 20 20 20 20 20 20 20 20 D6"
    127 DATA "F6E8 20 20 20 20 20 20 20 20 DE"
    128 DATA "F6F0 20 43 43 49 54 54 2D 56 00"
    129 DATA "F6F8 32 34 20 73 74 61 6E 64 8E"
    130 DATA "F700 61 72 64 20 20 20 20 20 CE"
    131 DATA "F708 20 20 20 20 20 20 20 20 FF"
    132 DATA "F710 20 4E 4F 20 73 74 6F 70 AA"
    133 DATA "F718 20 62 69 74 73 20 3B 31 6D"
    134 DATA "F720 20 73 74 61 72 74 20 62 E7"
    135 DATA "F728 69 74 20 20 20 20 20 20 BC"
    136 DATA "F730 20 50 61 72 69 74 79 3A FA"
    137 DATA "F738 20 20 20 4F 44 44 3B 45 E6"
    138 DATA "F740 56 45 4E 20 28 50 20 74 4C"
    139 DATA "F748 6F 20 73 65 6C 65 63 74 4E"
    140 DATA "F750 29 42 61 75 64 20 72 61 DF"
    141 DATA "F758 74 65 3A 36 30 30 3B 31 64"
    142 DATA "F760 32 30 30 20 28 42 20 74 07"
    143 DATA "F768 6F 20 73 65 6C 65 63 74 6E"
    144 DATA "F770 29 31 32 30 30 20 48 7A 35"
    145 DATA "F778 20 48 49 47 48 20 62 69 9A"
    146 DATA "F780 74 3B 32 34 30 30 20 48 54"
    147 DATA "F788 7A 20 4C 4F 57 20 62 69 F6"
    148 DATA "F790 74 20 20 20 20 20 20 20 DB"
    149 DATA "F798 20 20 20 20 20 20 20 20 8F"
    150 DATA "F7A0 20 20 20 20 20 20 20 20 97"
    151 DATA "F7A8 20 20 20 20 20 20 20 20 9F"
    152 DATA "F7B0 20 20 20 20 20 20 20 20 A7"
    153 DATA "F7B8 20 20 20 20 20 20 20 50 DF"
    154 DATA "F7C0 72 65 73 73 20 20 20 20 F4"
    155 DATA "F7C8 20 20 20 20 20 20 20 20 BF"
    156 DATA "F7D0 20 20 20 20 20 20 20 20 C7"
    157 DATA "F7D8 20 20 20 20 20 20 20 20 CF"
    158 DATA "F7E0 20 20 20 20 20 20 20 20 D7"
    159 DATA "F7E8 20 20 20 20 20 20 20 20 DF"
    160 DATA "F7F0 20 20 A3 20 66 6F 72 20 51"
    161 DATA "F7F8 74 72 61 6E 73 6D 69 74 61"
    162 DATA "F800 20 3B 20 52 20 66 6F 72 2C"
    163 DATA "F808 20 72 65 63 65 69 76 65 03"
    164 DATA "F810 20 20 28 54 72 61 6E 73 78"
    165 DATA "F818 6D 69 74 20 78 2C 79 29 C0"
    166 DATA "F820 20 3B 20 28 52 65 63 65 3A"
    167 DATA "F828 69 76 65 20 78 29 20 20 65"
    168 DATA "F830 20 20 20 20 20 20 20 20 28"
    169 DATA "F838 20 20 20 20 20 20 20 20 30"
    170 DATA "F840 20 20 20 20 20 20 20 20 38"
    171 DATA "F848 20 20 20 20 20 20 20 20 40"
    172 DATA "F850 20 78 20 3D 20 73 74 61 A5"
    173 DATA "F858 72 74 20 61 64 64 72 65 56"
    174 DATA "F860 73 73 20 20 20 20 20 20 FE"
    175 DATA "F868 20 20 20 20 20 20 20 20 60"
    176 DATA "F870 20 79 20 3D 20 6C 65 6E BD"
    177 DATA "F878 67 68 74 20 20 20 20 20 53"
    178 DATA "F880 20 20 20 20 20 20 20 20 78"
    179 DATA "F888 20 20 20 20 20 20 20 20 80"
    180 DATA "F890 20 20 20 20 20 20 20 20 88"
    181 DATA "F898 20 20 20 20 20 20 20 20 90"
    182 DATA "F8A0 20 20 20 20 20 20 20 20 98"
    183 DATA "F8A8 20 20 20 20 20 20 20 20 A0"
    184 DATA "F8B0 20 00 20 20 20 20 21 B2 1B"
    185 DATA "F8B8 5C 3E 17 77 23 3E F6 77 A6"
    186 DATA "F8C0 CD 81 FA AF 32 8C 5C 06 CF"
    187 DATA "F8C8 16 3E 0D D7 10 FB 01 FE 02"
    188 DATA "F8D0 FB ED 78 CB 67 28 E9 CB 36"
    189 DATA "F8D8 5F 28 E5 CD 4B FB 20 EE 5D"
    190 DATA "F8E0 C9 21 2A 59 7E FE 78 28 61"
    191 DATA "F8E8 11 CD 13 F9 3E 78 CD 0D 5A"
    192 DATA "F8F0 F9 3E 38 23 23 CD 0B F9 6E"
    193 DATA "F8F8 AF C9 CD 3F F9 3E 38 CD B0"
    194 DATA "F900 0D F9 3E 78 23 23 CD 0B D3"
    195 DATA "F908 F9 AF C9 77 23 77 23 77 1D"
    196 DATA "F910 23 77 C9 3E 02 32 8E FC 68”
    197 DATA "F918 3E 04 32 A3 FC 3E 02 32 96"
    198 DATA "F920 ED FB 3E F5 32 F4 FB 3E 93"
    199 DATA "F928 81 32 00 FC 3E CD 32 FA 07"
    200 DATA "F930 FB 32 06 FC 3E B9 32 0C 8D"
    201 DATA "F938 FC 3E 96 32 CA F9 C9 3E FD"
    202 DATA "F940 01 32 8E FC 3E 02 32 A3 0B"
    203 DATA "F948 FC 3E 01 32 ED FB 3E 14 E8"
    204 DATA "F950 32 F4 FB 3E 46 32 00 FC 1C"
    205 DATA "F958 3E 3A 32 FA FB 32 06 FC 24"
    206 DATA "F960 3E 7D 32 0C FC 3E 1E 32 DC"
    207 DATA "F968 CA F9 C9 21 0A 59 7E FE ED"
    208 DATA "F970 78 28 11 CD 95 F9 3E 78 2B"
    209 DATA "F978 CD 0D F9 3E 38 23 23 CD CD"
    210 DATA "F980 0B F9 AF C9 CD AF F9 3E A8"
    211 DATA "F988 38 CD 0D F9 3E 78 23 23 88"
    212 DATA "F990 CD 0B F9 AF C9 3E E4 32 26"
    213 DATA "F998 71 FC 3E EC 32 74 FC 3E 08"
    214 DATA "F9A0 EA 32 D6 FB 3E E2 32 DD B5"
    215 DATA "F9A8 FB 3E 0A 32 C9 F9 C9 3E DF"
    216 DATA "F9B0 E4 32 74 FC 3E EC 32 71 FC"
    217 DATA "F9B8 FC 3E EA 32 DD FB 3E E2 FF"
    218 DATA "F9C0 32 D6 FB 3E 09 32 C9 F9 F7"
    219 DATA "F9C8 C9 09 1E 3E 02 CD 01 16 D5"
    220 DATA "F9D0 11 31 F6 1A FE 00 28 08 49"
    221 DATA "F9D8 FE 01 28 54 D7 13 18 F3 41"
    222 DATA "F9E0 3A CA F9 FE 1E 28 05 CD EC"
    223 DATA "F9E8 E1 F8 18 06 21 2A 59 CD 49"
    224 DATA "F9F0 FA F8 3A C9 F9 FE 09 28 06"
    225 DATA "F9F8 05 CD 6B F9 18 06 21 0A 70"
    226 DATA "FA00 59 CD 84 F9 CD 87 FA FE E9"
    227 DATA "FA08 74 28 17 FE 62 CC E1 F8 BA"
    228 DATA "FA10 FE 70 CC 6B F9 FE 00 28 CE"
    229 DATA "FA18 EB FE 72 28 0C FE 20 C8 87"
    230 DATA "FA20 18 5F 11 1D F6 0E 00 18 DB"
    231 DATA "FA28 AA 11 27 F6 0E 01 18 A3 C4"
    232 DATA "FA30 21 00 00 CD 87 FA FE 0C A3"
    233 DATA "FA38 28 47 FE 0D 28 27 F5 D7 C7"
    234 DATA "FA40 F1 FE 2C 28 14 D6 30 FE 95"
    235 DATA "FA48 0A F2 81 FA E5 D1 06 09 7E"
    236 DATA "FA50 19 10 FD 16 00 5F 19 18 16"
    237 DATA "FA58 DA CD E8 FA 79 FE 00 0E 60"
    238 DATA "FA60 0A 28 CD 18 1C F5 11 80 13"
    239 DATA "FA68 5A 06 20 3E 78 12 13 10 CD"
    240 DATA "FA70 FC F1 79 FE 0A F5 CC F1 8A"
    241 DATA "FA78 FA F1 CA 17 FC FE 01 28 61"
    242 DATA "FA80 15 CD AF 0D C3 CB F9 E5 84"
    243 DATA "FA88 21 3B 5C CB 6E 28 FC 3A D1"
    244 DATA "FA90 08 5C CB AE E1 C9 F3 06 0A"
    245 DATA "FA98 00 CD 55 FB CD 64 FB C5 A0"
    246 DATA "FAA0 3E 2C D7 AF CD BD FA 3E 4C"
    247 DATA "FAA8 20 D7 3E 45 D7 3E 52 D7 5A"
    248 DATA "FAB0 3E 52 D7 3E 4F D7 3E 52 05"
    249 DATA "FAB8 D7 3E 20 D7 E1 11 01 00 B1"
    250 DATA "FAC0 D5 11 0A 00 D5 11 64 00 F4"
    251 DATA "FAC8 D5 11 E8 03 D5 11 10 27 B0"
    252 DATA "FAD0 D5 06 05 AF D1 E5 ED 52 4E"
    253 DATA "FAD8 FA E1 FA 3C 08 F1 08 18 FC"
    254 DATA "FAE0 F4 C6 30 E1 D7 10 EC C9 41"
    255 DATA "FAE8 7C 32 27 FC 7D 32 26 FC 84"
    256 DATA "FAF0 C9 3A 27 FC 57 3A 26 FC C3”
    257 DATA "FAF8 5F 19 7C 32 2D FC 7D 32 F0"
    258 DATA "FB00 2C FC C9 DD 2A 0B 5C DD 37"
    259 DATA "FB08 6E 04 DD 66 05 DD 5E 0C 04"
    260 DATA "FB10 DD 56 0D C9 CD 03 FB CD AC"
    261 DATA "FB18 E8 FA D5 E1 CD F1 FA 06 69"
    262 DATA "FB20 00 5F DB FD E6 80 BB 20 93"
    263 DATA "FB28 F6 10 F7 06 0A C3 17 FC 06"
    264 DATA "FB30 CD 03 FB F3 06 0A CD 55 1B"
    265 DATA "FB38 FB CD 64 FB C5 E5 C1 E1 A6"
    266 DATA "FB40 11 01 00 A7 ED 52 F8 01 2C"
    267 DATA "FB48 00 00 C9 C5 01 FE 7F ED 3C"
    268 DATA "FB50 78 CB 47 C1 C9 CD 4B FB 72"
    269 DATA "FB58 C8 DB FD E6 80 BB 28 F5 31"
    270 DATA "FB60 5F 10 F2 C9 DD E5 FD E5 29"
    271 DATA "FB68 E5 DD E1 FD 21 00 00 E5 09"
    272 DATA "FB70 21 00 00 01 00 00 16 80 23"
    273 DATA "FB78 DB FD E6 80 5F 06 00 DB F1"
    274 DATA "FB80 FD E6 80 BB 20 11 10 F7 D1"
    275 DATA "FB88 E1 FD E5 C1 DD E5 D1 FD 97"
    276 DATA "FB90 E1 DD E1 ED 52 FB C9 CB F8"
    277 DATA "FB98 22 DA 7C FB 3E E9 B8 F2 D7"
    278 DATA "FBA0 AF FB AF B9 C2 C4 FB 0E 3C"
    279 DATA "FBA8 01 CD EC FB C3 76 FB AF 3B"
    280 DATA "FBB0 B9 CA 76 FB 23 CD F8 FB 82"
    281 DATA "FBB8 3E 09 BD CA D4 FB 37 CB 52"
    282 DATA "FBC0 1C C3 76 FB 23 CD 04 FC FB"
    283 DATA "FBC8 3E 09 BD CA DB FB A7 CB D9"
    284 DATA "FBD0 1C C3 76 FB AF B4 E2 E2 42"
    285 DATA "FBD8 FB 18 0D AF B4 EA E2 FB 1D"
    286 DATA "FBE0 18 06 E1 77 23 C3 6F FB A1"
    287 DATA "FBE8 FD 23 18 F6 06 01 CD 10 F5"
    288 DATA "FBF0 FC 10 FB 06 14 10 FE C9 E3"
    289 DATA "FBF8 06 01 3A 10 FC 10 FB 06 51"
    290 DATA "FC00 46 10 FE C9 06 01 3A 10 6A"
    291 DATA "FC08 FC 10 FB 06 7D 10 FE C9 65"
    292 DATA "FC10 C5 06 A0 10 FE C1 C9 F3 02"
    293 DATA "FC18 C5 06 04 D9 CD 8D FC D9 EB"
    294 DATA "FC20 10 F9 C1 10 F3 21 00 00 0A"
    295 DATA "FC28 CD A1 FC 11 00 00 AF CB 19"
    296 DATA "FC30 46 CC A1 FC C4 8D FC CB F3"
    297 DATA "FC38 4E CC A1 FC C4 8D FC CB 03"
    298 DATA "FC40 56 CC A1 FC C4 8D FC CB 13"
    299 DATA "FC48 5E CC A1 FC C4 8D FC CB 23"
    300 DATA "FC50 66 CC A1 FC C4 8D FC CB 33"
    301 DATA "FC58 6E CC A1 FC C4 8D FC CB 43"
    302 DATA "FC60 76 CC A1 FC C4 8D FC CB 53"
    303 DATA "FC68 7E CC A1 FC C4 8D FC B6 4E"
    304 DATA "FC70 EB EC A1 FC E4 8D FC 13 60"
    305 DATA "FC78 ED 52 CD 8D FC EB C2 28 DE"
    306 DATA "FC80 FC CD 8D FC DB FD FB C9 6A"
    307 DATA "FC88 CD D6 FC 18 02 06 01 DB 1F"
    308 DATA "FC90 FD CD B2 FC D3 FD CD B9 5A"
    309 DATA "FC98 FC 10 ED C9 CD D4 FC 18 0B"
    310 DATA "FCA0 03 F5 06 02 DB FD CD C2 03"
    311 DATA "FCA8 FC D3 FD CD CA FC 10 EC FF"
    312 DATA "FCB0 F1 C9 C5 06 6B 10 FE C1 6B"
    313 DATA "FCB8 C9 C5 06 69 10 FE 3E 00 FD"
    314 DATA "FCC0 C1 C9 C5 06 33 10 FE C1 13"
    315 DATA "FCC8 AF C9 C5 06 2C 10 FE C1 02"
    316 DATA "FCD0 3E 00 00 C9 C5 C1 3E 00 97"
    317 DATA "FCD8 3E 00 C9 00 C9 C1 00 00 65”
    Вышеуказанная программа является кодом программы ZX MODEM из журнала ZX Ревю №3 за 1991 год (страница 37). Она является основой для всех программ представленных в виде таблиц журнала ZX Ревю. Редактирование кода данной программы представляет собой неудобство - при попытке редактирования появляется ошибка выполнения программы, а самое главное, она проверяет контрольную сумму каждой строки DATA, что существенно замедляет выполнение программы.

    P.S. пробелов в кавычках после оператора DATA начиная с 101 строки нету!!!
    Вложения Вложения
    Последний раз редактировалось alex8418; 19.02.2023 в 23:47.

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

  3. #2
    Member
    Регистрация
    18.07.2021
    Адрес
    г. Хмельницкий, Украина
    Сообщений
    100
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    31
    Поблагодарили
    24 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Хоть что со мной делайте, не пойму, зачем задротить с машкодом, когда в наличии имеется ассемблер, хоть бы и такой, как Gens.
    Но это на любителя, похоже.

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

    Barmaley_m (23.02.2023)

  5. #3
    Member
    Регистрация
    15.05.2010
    Адрес
    Москва
    Сообщений
    64
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    1 сообщение
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от 0xDEAD Посмотреть сообщение
    Хоть что со мной делайте, не пойму, зачем задротить с машкодом, когда в наличии имеется ассемблер, хоть бы и такой, как Gens.
    Но это на любителя, похоже.
    Вы не поняли идею статьи! Чтобы помочь людям, которые хотят научиться программировать в машинном коде, но не понимают как! Немного подогреть интерес к ИНФОРКОМ-ской литературе, потому что там на самом деле есть много интересных программ! Ну и конечно творчество, мож кто чего слепить своего захочет! Да Я ещё не успел некоторые тонкости описать, но Я думаю время ещё будет!

  6. #4
    Member
    Регистрация
    18.07.2021
    Адрес
    г. Хмельницкий, Украина
    Сообщений
    100
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    31
    Поблагодарили
    24 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я думаю, что это вы не поняли идею моего поста. Учиться программировать в машинном коде как бы не нужно вообще.
    Набить в программу кучу хекса из древних тридцатилетних журналов, только потому, что оно УЖЕ существует в таком виде - ну, пожалуйста. Хотя, не вижу особых сложностей, чтобы сделать то же самое не в бейсике, а в ассемблере, через DEFB, и потом, дизассемблировав, привести в человеческий вид.
    А программирование чего-нибудь с нуля в машкоде в настоящее время не нужно, непродуктивно и бессмысленно. Почему оно раньше было популярно - да просто потому, что некоторые люди привыкли, после Радио-86РК или Микро-80, у которых первоначально не было ни ассемблера, ни дизассемблера, набивать программы побайтово в мониторе. И для журналов, которые публиковали эти "программы", (Радио, Моделист-Конструктор, етц) было более выгодным печатать таблицу с этим шестнадцатеричным бредом, которая была более компактной, и занимала меньше места журнальной площади, чем текст программы на Ассемблере. Которого, к тому же, не было в природе - поначалу, по крайней мере. А потом эта привычка перекочевала и на Спектрум, когда эти люди сменили на него свои Радио-86 или Специалисты.
    Последний раз редактировалось 0xDEAD; 20.02.2023 в 12:42.

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

    Barmaley_m (23.02.2023)

  8. #5
    Veteran Аватар для Bedazzle
    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,488
    Спасибо Благодарностей отдано 
    225
    Спасибо Благодарностей получено 
    150
    Поблагодарили
    116 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от 0xDEAD Посмотреть сообщение
    было более выгодным печатать таблицу с этим шестнадцатеричным бредом, которая была более компактной, и занимала меньше места журнальной площади, чем текст программы на Ассемблере.
    Не только. Кроме значащих байтов на каждую строчку прилагалась контрольная сумма, и если при вводе она не сходилась, можно было сразу искать ошибку.
    Намётанный глаз выхватывал вызов стандартных процедур, и сразу восстанавливались похожие, и плохо пропечатавшиеся 0,8,B, или 5,6, или 3,8.
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm
    Bard's disasm

  9. #6
    Member
    Регистрация
    18.07.2021
    Адрес
    г. Хмельницкий, Украина
    Сообщений
    100
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    31
    Поблагодарили
    24 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Но даже неопытный глаз не перепутает в команде ld (ix+0), a, ноль с буквой "о".
    Суть не в том - аргументов и контраргументов сейчас можно напридумывать много.
    Но не знаю, нужно ли как-то обосновывать то, что текст на ассемблере намного удобнее читается и редактируется.
    Последний раз редактировалось 0xDEAD; 20.02.2023 в 01:38.

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

    Barmaley_m (23.02.2023)

  11. #7
    Veteran Аватар для Bedazzle
    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,488
    Спасибо Благодарностей отдано 
    225
    Спасибо Благодарностей получено 
    150
    Поблагодарили
    116 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от 0xDEAD Посмотреть сообщение
    Но даже неопытный глаз не перепутает в команде ld (ix+0), a, ноль с буквой "о".
    Где я про букву "О" писал? Уточнение касалось только шестнадцатеричных цифр.
    Мы набивали с другом для его Радио-86рк дампы из журналов, и даже для Спектрума была пара программ перенесённых с бумаги таким образом.
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm
    Bard's disasm

  12. #8
    Member
    Регистрация
    18.07.2021
    Адрес
    г. Хмельницкий, Украина
    Сообщений
    100
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    31
    Поблагодарили
    24 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Нигде не писал. Это я писал. Писал про то, что при наборе написанного текста "ld (ix+o),a", вряд ли кто-то напишет там "о", потому что это само собой разумеется из самой команды. А когда ты видишь гору хекса "2f 7a b8 ed", и из-за плохо пропечатанного текста не понимаешь, "b8" там или "88", то в уме понять, что там должно быть, и на лету внести изменения, несколько сложнее, чем в случае с "ld (ix+o),a". Конечно, можно придумать вариант с нечетко напечатанным "ld (ix+1b),a", но в целом, непонятных случаев будет меньше, чем в хексе.
    Но более интересен другой вопрос. КАК в машкоде программировать? Брать тетрадку, в тетрадке писать ассемблерный текст, потом переводить его в хекс, и уже хекс вдалбливать в компьютер? А зачем тогда ассемблерный текст? Или есть таланты, которые умеют программу с метками, циклами, переходами, кусками самомодифицирующегося кода написать прямо в хексе, минуя стадию текста на ассемблере?
    А как в бейсик-программе набить 40 к машинного кода?

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    Мы набивали с другом для его Радио-86рк дампы из журналов, и даже для Спектрума была пара программ перенесённых с бумаги таким образом
    Я ж разве спорю? И я набирал. Если оно уже ЕСТЬ - то оно ЕСТЬ, и набирать придётся то, что ЕСТЬ. А зачем этому учить начинающих, что это один из способов программирования, и что таким образом можно писать новые программы? Ничего, кроме отторжения, по-моему, это не вызовет.
    Последний раз редактировалось 0xDEAD; 20.02.2023 в 12:40.

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

    Xela (20.02.2023)

  14. #9
    Master Аватар для Xela
    Регистрация
    03.12.2021
    Адрес
    г. Санкт-Петербург
    Сообщений
    583
    Спасибо Благодарностей отдано 
    422
    Спасибо Благодарностей получено 
    165
    Поблагодарили
    118 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Машкод к "программированию", конечно, совсем не относится.

  15. #10
    Veteran
    Регистрация
    04.08.2005
    Адрес
    Nizhnevartovsk
    Сообщений
    1,007
    Спасибо Благодарностей отдано 
    75
    Спасибо Благодарностей получено 
    114
    Поблагодарили
    77 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Программировать в машкоде - это конечно хардкор. Наверно еще хардкорнее - это вырезать дырочки в перфокарте. Но, к сожалению, спектрум настолько низкоуровневого программирования слава богу не поддерживает.
    Единственный смысл этого - чтобы сэкономить бумагу в журналах или книгах, где такое распространялось. Но сейчас не XXй век, и распространяется все по электронным каналам, и людям гораздо удобнее видеть не дампы всяких "приколюх", а как раз дизассемблированные варианты, которые можно было бы скопипастить в тот же sjasm.

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

    0xDEAD (20.02.2023), Oleg N. Cher (21.02.2023)

Страница 1 из 3 123 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 22
    Последнее: 12.02.2023, 16:13
  2. Для начинающих
    от Viktor2312 в разделе Ириша
    Ответов: 61
    Последнее: 14.03.2017, 12:13
  3. Ответов: 6
    Последнее: 07.02.2016, 11:55
  4. КМБ для начинающих
    от yur в разделе Программирование
    Ответов: 0
    Последнее: 16.10.2012, 14:06
  5. Подпрограмма на ассемблере в памяти?
    от jimled в разделе Программирование
    Ответов: 1
    Последнее: 29.11.2009, 06:46

Ваши права

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