![]() |
Азбука ассемблера
А почему бы и нет? Действительно, информация представленная в учебниках и самоучителях 90-х годов не отвечает требованиям современных программистов (не ищущих трудных путей). Не все привыкли преодолевать трудности ). Посему, предлагаю здесь выкладывать самые распространенные способы решения различных задач (или сами задачки) различного уровня сложности. Просто для тренировки остальных ) Мне кажется, для начинающих будет полезно. По крайней мере будет выше шанс того, что они все-таки останутся на платформе ZX...
А теперь у меня вопрос. Организовать последовательный выбор из DEFB не представляет сложности: ............ LD.... DE,IMG ; грузим в DE адрес начала блока ............ INC.. DE...... ; Следующий элемент блока ............ ....... .......... ; Код программы ............ RET.. ...........; Конец основного блока IMG....... DEFB #12,#FF; Блок однобайтных данных А как организовать последовательную выборку значений из DEFW? Увеличение DE в данном случае приводит лишь к увеличению первого загруженного значения (адреса), а не выбору следующего элемента блока. Как решить? Это пока единственный вопрос, который я никак не могу решить. В абсолютном большинстве учебников используется исключительно DEFB, а DEFW если и применяется, то крайне ограничено. К слову, учебник "Как написать игру на ассемблере", на мой взгляд, несколько.... э-э-э... однобокий, что ли. Обо всем по чуть-чуть и ни о чем достаточно. Самый яркий пример из опыта - определение пользовательских функций. Благо, в каком-то описании, все-таки, вычитал, что для возвращения из функции нужно указывать команду RET... Правда вспомнилось это только после двух дней экспериментов, но за эти два дня я на экране эмудятора такого насмотрелся - не дай бог.... P.S. Прошу прощения за словоблудие, но процесс освоения ассемблера идет со скрипом и сопровождается горами исписанной бумаги ))) На ней просто удобно блок-схему программы рисовать... А потом добавляются забытые, или новые элементы, ну и т.д. ))) |
Элемент DEFW занимает 2 байта - сначала младший, потом старший. Запись DEFW #FF00 эквивалентна записи DEFB #00,#FF. Значения надо вытаскивать уже в регистровые пары, т.к. разрядность 16 бит:
Code:
LD HL,TABLE |
|
Quote:
|
Quote:
Код: LD (STK+1),SP LD SP,TABLE POP DE ; в DE - значение #FF00 ... POP DE ; в DE - значение #AABB ... POP DE ; в DE - значение #C123 ; и так далее ... STK: LD SP,0 RET TABLE: DEFW #FF00,#AABB,#C123 Только нужно либо запрещать при этом прерывания, либо следить чтоб они не пришли. Самое простое - в начале поставить DI |
Quote:
P.S. Все вышесказанное сугубо имхо. |
Quote:
http://vtrdos.ru/book/PROGRASM.ZIP |
Это у меня тоже есть. Почти вся была законспектирована... Так лучше усваивается.
|
Так ведь усваивается вообще, по идее, на конкретных задачах. Т.е. если есть задача, она решается и по ходу набирается опыт, а если задачи нет и изучение чисто академическое, то изучение идет дооолго и мууууторно.
|
Quote:
По сути это просто вид представления данных - в данном случае - машинное слово (DEFine Word). Те-же данные можно задать и байтами (DEFine Byte) Да хоть и DEFM. Компу пофик что ты там на DEFинил - это ведь инструкция для компилятора (в каком виде данные ложить), а процессор всё равно воспринимает всю кухню как толпы нулей и единиц... |
| All times are GMT +4. The time now is 00:45. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.