Да просто удобно... Так, скажем в DEFB удобно забивать 8-байтные шаблоны, для последующего вывода на экран. DEFM, это вывод строк. А DEFW - двухбайтное слово. В моем случае адрес. Я, конечно, рад за тех, кто легко может всю программу набить на DEFB или DEFM... А я хочу чтобы мне мой код понятен был. Сказано, DEFW для двухбайтных слов, значит так и есть. Т.е. смотрю на свои записки 3-недельной давности, так я даже без вспоминания того, зачем писалась программа, легко вижу где какой блок данных... А если все будет состоять из DEFB/DEFM... Да там сам черт ногу сломит и никакие комментарии не спасут...
Имхо, что написано, то и должно быть. Ну за исключением случаев, когда критична скорость выполнения программы. Мало ли, может кому-то придется еще мою программу читать (маловероятно конечно, но все-таки)...
Это как в библиотеке, можно книги все вперемешку хранить, но, как-то предпочитают сортировать: журналы отдельно, книги отдельно, многотомные сборники отдельно...
Во всем должен быть порядок.
Zidane, это всё известно и понятно
Я имел в виду как так случилось что ты понимаешь как общатся с DEFB, и не догадался как быть с DEFW ?
Потому и спросил - почему так? (может какой-то частный, особый случай, что не подходят очевидные методы - ну например два INC adr)
Вот я например сейчас мучаюсь с 3D (raycasting) - а там нужно задавать три байта на каждый луч. Вот и ломаю голову как будет лучше - один DB + один DW или просто три DB.
А возможно - два DW...
Такой вот частный случай и хз как лучше это всё хранить/выбирать
Последний раз редактировалось Destr; 02.11.2012 в 23:27.
Речь не об этом.
Речь о том, что в памяти что DEFB, что DEFW, что DEFM хранятся одинаково. И поэтому непонятно, почему вы ждете, что для работы с DEFB предусмотрены одни команды, а с DEFW другие. Все эти типы существуют только на уровне ассемблера, процессор про них и знать не знает. Да, через DEFW можно определять адреса. Но это лишь свойство, а не предназначение.
Адрес - это всего лишь 2 байта, которые хранятся в памяти задом наперед. Читаются из памяти точно так же, как и одиночные байты,
LD HL, IMG
LD E, (HL)
E потому что, напоминаю, адрес лежит задом наперед. Грузим старший
INC HL
LD D, (HL)
Все, адрес в DE. Берем значение, которое лежит по этому адресу, и делаем с ним что хотим:
LD A, (DE)
Если все сделали, переходим к следующему элементу (младшему байту следующего адреса) - INC HL, JP ....
Ну и все, получили тот же код, который SAM style написал еще во втором сообщении.
Читать память сразу словами через переустановку стека и POP - это красиво, но это хак. Хотя асм, конечно, такой язык, что там практически все - хак
Граф Дракула наш кумир, патамушта он вомпир!
VKINK 9 : BORDER NOT PI
Однозначно. В общем, пишу разного рода программки на бейсике и перевожу в ассемблер. Со временем сейчас несколько напряг, но полчасика в день выковыриваю... Суть вопроса вот в чем. Написал на бейсике махонькую демку (даже и на махонькую с трудом тянет, меня больше волновала реализация алгоритма) но все же. Файлик прилагается. Основная проблема в том, что нужно генерить рандомные числа в заданном диапазоне (строки 220-290). Вот тут я собственно и встал... Инфу раскопал и вроде даже работает... Но все же хотел бы узнать, кто как генерит эти числа для личных нужд? ) Или все пользуются одним приемом? В общем, собираю полезные идеи, если кому не жаль поделиться.
Зависит от того, насколько быстро и насколько случайно тебе это надо. На спеке источниками энтропии могут быть либо R, либо число прерываний до запуска программы, где-то бейсик его считает. А потом уже каким-либо ГСЧ.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Ну, как-то так:
Способов несколько. Основной - брать R и XOR-AND-OR-ADD-SUB-ИТД его со всем, что попадется под руку.Код:RANDOM push hl ADDR ld hl,0 inc l ld (ADDR+1),hl ld a,r xor (hl) pop hl ret START ... call RANDOM and 15 ;тут в А будет число от 0 до 15 ... call RANDOM and 31 ;а тут - от 0 до 31 ...
Последний раз редактировалось SAM style; 10.11.2012 в 20:14.
Все любят гипножабу
Тема о генераторах случайных чисел с примерами: http://zx.pk.ru/showthread.php?t=13188
Подскажите пожалуйста, как исправить ошибку?
Делаю, чтобы был вывод по одной букве. Но никак не выходит.
Что то с NUM не так...Код:LD D,10 L1 LD HL,(NUM) LD A,(HL) RST #10 INC HL LD (NUM),HL DEC D JR NZ,L1 RET NUM DEFB $+1 TEXT DEFB "prosto text"
И еще вопрос как в Alasm сделать, чтобы текст(строка TEXT) располагался с определенного адреса, например с 50000?
DEFB резервирует один байт. когда та берёшь число оттуда захватывается первая буква текста. скорее надо defw (два байта) или defb 1,0
Последний раз редактировалось goodboy; 11.06.2013 в 19:25.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)