Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Для начинающих (http://zx-pk.ru/forumdisplay.php?f=43)
-   -   Азбука ассемблера (http://zx-pk.ru/showthread.php?t=20246)

Zidane 2nd November 2012 11:05

Азбука ассемблера
 
А почему бы и нет? Действительно, информация представленная в учебниках и самоучителях 90-х годов не отвечает требованиям современных программистов (не ищущих трудных путей). Не все привыкли преодолевать трудности ). Посему, предлагаю здесь выкладывать самые распространенные способы решения различных задач (или сами задачки) различного уровня сложности. Просто для тренировки остальных ) Мне кажется, для начинающих будет полезно. По крайней мере будет выше шанс того, что они все-таки останутся на платформе ZX...

А теперь у меня вопрос. Организовать последовательный выбор из DEFB не представляет сложности:
............ LD.... DE,IMG ; грузим в DE адрес начала блока
............ INC.. DE...... ; Следующий элемент блока
............ ....... .......... ; Код программы
............ RET.. ...........; Конец основного блока
IMG....... DEFB #12,#FF; Блок однобайтных данных

А как организовать последовательную выборку значений из DEFW? Увеличение DE в данном случае приводит лишь к увеличению первого загруженного значения (адреса), а не выбору следующего элемента блока. Как решить? Это пока единственный вопрос, который я никак не могу решить. В абсолютном большинстве учебников используется исключительно DEFB, а DEFW если и применяется, то крайне ограничено. К слову, учебник "Как написать игру на ассемблере", на мой взгляд, несколько.... э-э-э... однобокий, что ли. Обо всем по чуть-чуть и ни о чем достаточно.
Самый яркий пример из опыта - определение пользовательских функций. Благо, в каком-то описании, все-таки, вычитал, что для возвращения из функции нужно указывать команду RET... Правда вспомнилось это только после двух дней экспериментов, но за эти два дня я на экране эмудятора такого насмотрелся - не дай бог....
P.S. Прошу прощения за словоблудие, но процесс освоения ассемблера идет со скрипом и сопровождается горами исписанной бумаги ))) На ней просто удобно блок-схему программы рисовать... А потом добавляются забытые, или новые элементы, ну и т.д. )))

SAM style 2nd November 2012 11:52

Элемент DEFW занимает 2 байта - сначала младший, потом старший. Запись DEFW #FF00 эквивалентна записи DEFB #00,#FF. Значения надо вытаскивать уже в регистровые пары, т.к. разрядность 16 бит:
Code:

LD HL,TABLE
LD E,(HL)
INC HL
LD D,(HL) ; в DE - значение #FF00
INC HL ; HL передвинулся на второе слово (#AABB)
...
RET
TABLE: DEFW #FF00,#AABB,#C123


predatoralpha 2nd November 2012 13:07

Почитай вот это.
http://zxpress.ru/book.php?id=18
Очень толково написано.

SaNchez 2nd November 2012 18:27

Quote:

Originally Posted by predatoralpha (Post 549284)
Почитай вот это.
http://zxpress.ru/book.php?id=18
Очень толково написано.

Моя библия:v2_dizzy_heart:

Destr 2nd November 2012 18:59

Quote:

Originally Posted by Zidane (Post 549269)
как организовать последовательную выборку значений из DEFW

А вообще тру-способ что-то вроде такого:

Код:
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

Zidane 2nd November 2012 20:39

Quote:

Originally Posted by Destr (Post 549348)
А вообще тру-способ что-то вроде такого:

Спасибо ) Пока что, самый понятный для меня ответ ) Что касается указанной книги, то там упоминание про DEFW есть... А если конкретно, то только упоминается, что в DEFW определяются двухбайтовые значения.... И на этом практически все. Последующее описание крутится вокруг DEFB и DEFM, оставляя DEFW "за бортом"... Лично для меня книга посредственна. Изучать её саму по себе довольно неудобно. Нужно обложиться как минимум 3 книгами. Собственно приведенная, элементарная графика (с выводом на экран работаем) и справочник команд ассемблера... И если в книжном варианте как-то терпимо такое проворачивать, то в электронном виде постоянно тыкать Alt+Tab.... Увольте...
P.S. Все вышесказанное сугубо имхо.

SaNchez 2nd November 2012 20:49

Quote:

Originally Posted by Zidane (Post 549366)
И если в книжном варианте как-то терпимо такое проворачивать, то в электронном виде постоянно тыкать Alt+Tab.... Увольте...
P.S. Все вышесказанное сугубо имхо.

Можно распечатать, она не такая большая;)

http://vtrdos.ru/book/PROGRASM.ZIP

Zidane 2nd November 2012 21:00

Это у меня тоже есть. Почти вся была законспектирована... Так лучше усваивается.

nodeus 2nd November 2012 21:54

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

Destr 2nd November 2012 22:04

Quote:

Originally Posted by Zidane (Post 549366)
Последующее описание крутится вокруг DEFB и DEFM, оставляя DEFW "за бортом"...

А откуда вообще такой упор на DEFW ?
По сути это просто вид представления данных - в данном случае - машинное слово (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.