Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Низкоуровневое программирование для дZeнствующих


Служба Рассылок Subscribe.Ru проекта Citycat.Ru
<< ТЕПЕРЬ ЕСТЬ ЗЕРКАЛО В РУНЕТЕ Сайт | Зеркало | eGroup НИЗКОУРОВНЕВОЕ ПРОГРАММИРОВАНИЕ ДЛЯ ДZЕНСTВУЮЩИХ #13 ПРЕДУПРЕЖДЕНИЯ: ПРИГЛАШАЮТСЯ: САЙТ HI-TECH: > В связи с присутствием в рассылке графики настоятельно рекомендуем подписываться на HTML-версию. > В связи с затянувшимся "расширением канала" у нашего провайдера возможны задержки с выпуском рассылки. > авторы. > корректоры. > художники/дизайнеры. > владельцы сайтов, авторы рассылок (для взаимной рекламы) > (хм) спонсоры и рекламодатели. > архив рассылки > коллекция инструментов > исходные тексты > документация > учебники, статьи > форум и хм... гостевая книга НОВОСТИ ПРОЕКТА HI-TECH Хороший сегодня выпуск :). Тринадцатый!! Для кого-то это, может быть, и несчастливое число, но для нас, в общем-то, скорее наоборот :). 13 - это хорошее число! Потому что новостей сегодня много :). И все - приятные!! Ура! ДZенствующие братья и сестры! Поздравляю! Мы сделали для вас зеркало! Теперь вам не нужно с дрожью в коленках ждать, когда же, наконец, загрузится наш гребаный сайт (который, как известно, в BY-нете находится). Теперь вам не нужно эксплуатировать нашего многострадального почтового робота! Теперь вам... а впрочем хватит словоблудия :). Вот он, адрес нашего первого зеркала: http://hi-tech.ph.ru :). Делал его для вас (нам оно, в принципе, нафиг сдалось) DZ Void. Он же будет его поддерживать в более-менее работоспособном состоянии. Он же и сядет, если что :). Так что прошу любить и жаловать :) Вот его (Void'а) мыл: vovikoid@mail.ru. Со всеми вопросами насчет зеркала - к нему! Думаете это все? Как бы не так! Есть еще одна новость! У нас появился "карректар", который "красным фламастиром" будет фиксить все наши грамматические очепятки и прочие досадные ляпы :). Эт хорроший корректор :). Рулит! Это ж не каждому корректору дано понять, что слово "щас" ошибкой не является! А наш - понимает! Более того - он даже не пытается исправить слово "гребаный" пошлым зачеркиванием первых двух букв :). Я и говорю - карректар у нас супер! Вы только посмотрите, что он с архивом рассылки сделал, гад! Намазюкал красным фламастиром, как последняя школьная училка, и доволен! Зовут корректора LeXa, и он тоже DZ. Вот его мыл: le-xa@freemail.ukr.net. Прошу любить и жаловать! Предпочтительно в тoй же извращенной форме, в какой он две ночи напролет "любил и жаловал" архив нашей рассылки... И да пребудет с вами сила, братья (ну и сестры тож)! СЛОВО МОДЕРАТОРУ RTFM_HELPERS ДZенствующий народ!! В первый и последний раз объясняю вам политику партии (читай: политику eGroup)! Если вы хотите получать глупые ответы на ваши глупые вопросы, вы должны: 1. Подписаться на сообщения eGroup. Для этого нужно выслать пустое письмо по адресу RTFM_Helpers-subscribe@egroups.com. Сие означает, что вы подписываетесь на ВСЕ сообщения группы. Соответственно, все ваши вопросы и все наши/ваши ответы будут автоматически рассылаться ВСЕМ ПОДПИСАВШИМСЯ. 2. Задать вопрос. После успешной регистрации это нужно делать мылом по адресу RTFM_Helpers@egroups.com. Внимание! Ответ на ваш вопрос будет приходить в группу! То есть: если вы НЕ ПОДПИСАЛИСЬ на сообщения данной группы, НО ЗАДАЛИ ВОПРОС, то ОТВЕТА ВЫ НЕ ПОЛУЧИТЕ :). Вернее, ответ-то, конечно, будет, :) но на ваш почтовый ящик он не придет :(. Вывод: сначала нужно подписаться... Если кто чего не понял - мыльте: bejenari@beltsy.md. ДZенского вам всем настроения! НОВЫЕ ПОСТУПЛЕНИЯ В разделе "Справочные системы": - Справочная система по языкам программирования (ASM'у в том числе). - Справочная система HelpPC 2.10. В разделе "Документация": - Мануал по процессору Intel 80386. - Мануал по процессору Intel 80486. - MS-DOS Interrupt List. Наиболее полное описание прерываний. - Архитектура ввода-вывода персональных ЭВМ IBM под ред. некоего Ю. С. Лукача. ВДОГОНКУ К ПРОШЛОМУ НОМЕРУ (ТРАДИЦИЯ, ОДНАКО!) DZ Sashok или облажался, или времени у него не было проверять... Так или иначе, DZ Kir777 вот какую очепятку нашел: - под 5 пунктом вместо "адреса 100...200" читать надо "адреса 100...104". Оно-то и ежу понятно, что это очепятка, но вдруг кого из вас это не той дорогой повело? Публичный сенькс тебе, DZ Kir777! УСОВЕРШЕНСТВОВАНЫЙ "СУПЕРПАИНТ" BY STS В прошлом номере я предложил дZенствующим братьям усовершенствовать наш "суперпаинт" (ну рисовалку, то бишь). Молодцы, народ! Хорошо поработали! :0100 MOV AX,0013 :0103 INT 10 :0105 XOR DX,DX :0107 XOR CX,CX :0109 MOV BL,1E :010B MOV AL,BL :010D MOV AH,0C :010F INT 10 :0111 XOR AH,AH :0113 INT 16 :0115 CMP AH,4A :0118 JNZ 011B :011A DEC BX :011B CMP AH,4E :011E JNZ 0121 :0120 INC BX :0121 CMP AH,4B :0124 JNZ 0127 :0126 DEC CX :0127 CMP AH,4D :012A JNZ 012D :012C INC CX :012D CMP AH,48 :0130 JNZ 0133 :0132 DEC DX :0133 CMP AH,50 :0136 JNZ 0139 :0138 INC DX :0139 CMP AL,1B :013B JNZ 010B :013D MOV AX,0003 :0140 INT 10 :0142 INT 20 Ну а лучше всех поработал DZ STS, который, пользуясь удобным случаем, передает привет 2 GMS, Volos and all ZX-Spectrum Users! Моих глубокомысленных комментариев вы на этот раз не найдете... тут все понятно (конечно же, если вы прогу из прошлого номера досконально расколупали...). Помимо курсорных клавиш можно теперь использовать ESC для выхода и "+","-" для переключения цвета... Если есть какие вопросы - мыльте автору на z80@CHAT.RU. И да пребудет с вами сила, братья! ЗЫ: STS! Я надеюсь, ты примешь участие в работе группы RTFM_Helpers? В качестве эксперта? Predator! Ты - тоже! Только без матов! Al-Gali! То, что ты скоро станешь соавтором рассылки, вовсе не означает, что можно отлынивать от черновой работы! Sergey Kondratenko! Тебя это тоже касается ;). Serge Vetroff! Пользуясь случаем, (я тут попросту пустое место словоблудием всяческим забиваю) передаю тебе большой пламенный привет! (В mbr его сам прошей, ладно? А не прошьешь - на eGroup подпишем! Правда, страшно?) К ВОПРОСУ О СИСТЕМЕ СЧИСЛЕНИЯ (НЕСКЛАДУШКА) 0A программеров с утра "продукт" решили сделать, Один спросил: "А платит кто?" и их осталось 9... 9 программеров потом предстали перед боссом, Один из них не знал FoxPro и их осталось 8... 8 программеров затем купили IBM Один из них сказал: "MAC-класс!", и их осталось 7... 7 программистов с бодуна хотели хелп прочесть, Один английского не знал и их осталось 6... 5 программистов за свой счет купили CD-ROM, Один принес пиратский диск - остались вчетвером... И вчетвером они взялись лабать "продукт" на Си, Один из них знал лишь Паскаль и их осталось 3... 3 программиста по сети сыграть решили в DOOM, Один Game Wizard подгрузил и счет стал равен двум... 2 програмиста, отдохнув, набрали дружно "win" Один устал загрузки ждать - остался лишь 1... В один прекрасный день 1 все взял под свой контроль! Но встретился с заказчиком и их осталось 0... 00 программеров ругал отборным матом шеф, Потом уволил одного... и стало их FF! :) Чей копилефт не знаю, но амфибрахий еще тот! ОБРАЩАЕМСЯ К СЕГМЕНТУ ДАННЫХ [1] Зачем нужен сегмент данных, вы уже знаете - чтобы хранить в нем данные. Зачем нужен сегмент кода, вы тоже знаете - чтобы хранить в нем последовательность команд, которые должен выполнить ваш компьютер. Вводить всякую лабуду в сегмент кода вы уже умеете. А вот вводить лабуду в сегмент данных мы с вами сейчас научимся... В принципе это уже описано в NYRON'овском мануале по DZEBUG'у, но повторить лишний раз никогда не помешает... Итак, запускаем DZEBUG и вводим следующую команду: -e cs:115 Которая означает: "набиваем сегмент данных всяким дерьмом начиная со смещения 115". В ответ он вам выплюнет: 17B3:0115 00. Что означает: байт по смещению 115 равно 00. И точка. Но это не простая точка - это приглашение ввести НОВОЕ ЗНАЧЕНИЕ этого байта. Когда вы его ввели, нужно нажать на пробел. Если вы вознамеритесь последовательно ввести 1,2,3,4,5, то это будет выглядеть приблизительно так: 17B3:0115 00.1 75.2 AD.3 17B3:0118 66.4 FF.5 [Enter] А теперь делаем дамп памяти и смотрим, что за дрянь у нас получилась... А ведь получилoсь же!! [2] Мы запросто умеем "присваивать" регистру любое значение (mov AL,1C какой-нить), запросто можем "копировать" содержимое одного регистра в другой (mov AL,BL например)... А сейчас мы с вами научимся при помощи той же команды MOV еще и с сегментом данных работать. Все проще пареной репы... Если мы напишем MOV AL,[115] , то в результате выполнения этой команды в регистр AL "внесутся" две шестнадцатеричные циферки (байт), которые по адресу 115 находятся. То есть в нашем случае AL станет равным 1. А теперь посмотрите, что делает "обратная" команда: mov AL,55 mov [115],AL В первой строчке мы присвоили AL значение 55, а второй строчкой "скопировали" значения регистра в байт по адресу 115. Правда, проще некуда? Обязательно посмотрите на этот процесс под отладчиком! А еще обращаю ваше внимание на то, что фокус MOV [115],55 у вас не пройдет... Команда эта, все же, больше для регистров "придумана" :)), не могет MOV без них жить... Как говаривал В. И. Ленин по этому поводу: "формально - верно, а по существу - издевательство"... [3] А еще вот какой изврат с этим можно делать: mov BX,115 mov AL,[BX] Сие присваивает регистру AL значение байта по адресу 115 :). Ну... через посредника "BX" присваивает! Который у нас "переменная", как известно :). mov AL,1C mov BX,115 mov [BX],AL А этот кусок кода у нас "записал" 1C в сегмент данных по адресу 115 :). Ну, и извращения наподобие: mov AL,[BX+1] и mov [BX+1],AL Тоже весьма и весьма полезны в программерском деле :). Короче: все, что в квадратных скобках, - это адрес в памяти, с которым вы собираетесь "работать". Другой вопрос, что этот адрес может быть "составным"... Задание на медитирование: перепробовать все возможные комбинации операндов команды MOV, работающих с сегментом данных. Особо продвинутые могут поэкспериментировать с выражениями наподобие MOV AX,[BX*SIN(2/pi^2)+1]... или с MOV AX,[DX]... работает это, кстати, абсолютно одинаково... [4] Низкоуровневый Paint мы с вами уже писали. Сегодня напишем низкоуровневый дZенский EXCEL. Задание простое... Есть у нас табличка типа: 1 8 2 9 3 1 4 2 5 2 в которой данные в формате HEX. И все, что нам нужно с ними сделать - это просуммировать каждую "строчку", а сумму занести в третий "столбец"... В EXCEL'е это делается элементарно... А на машинном уровне, в общем-то, не намного сложней!! Для начала мы наберем "исходные данные" и зарезервируем место (например, забьем нулями) под третий столбец, в который собираемся помещать результат... Данные у нас где?? В сегменте данных! Вот его и набиваем, начиная с адреса, например, 115: -e ds:115 17EA:0115 01.1 08.8 02.0 17EA:0118 09.2 02.9 00.0 03.3 03.1 00.0 04.4 04.2 17EA:0120 00.0 05.5 05.2 00.0 Вот так это у меня в DZEBUG'е выглядело :). Только я еще дамп посмотрел, правильно ли я ввел: 17EA:0110 03 E2 F3 CD 20 01 08 00-02 09 00 03 01 00 04 02 .... ........... 17EA:0120 00 05 02 00 6A 87 04 FF-76 FE 57 57 9A 5C 6C 87 ....j...v.WW.\l. Вроде правильно :)). Ну а программу я вот какую придумал: 17EA:0100 BB1501 MOV BX,0115 17EA:0103 B90500 MOV CX,0005 17EA:0106 8A07 MOV AL,[BX] 17EA:0108 024701 ADD AL,[BX+01] 17EA:010B 884702 MOV [BX+02],AL 17EA:010E 83C303 ADD BX,3 17EA:0111 E2F3 LOOP 0106 17EA:0113 CD20 INT 20 В BX я занес адрес начала сегмента данных (он же - верхний левый угол нашей таблицы). В CX внес 5, чтобы столько раз цикл выполнился (LOOP по адресу 111). А тело цикла вообще простое: команда по адресу 106 забирает в AL цифирь из первого столбца; 108 - суммирует "цифирь из первого столбца с цифирью из второго столбца" (сумма, само собой, в AL'е остается); 10B - записывает сумму в третий столбец :). Ну и ADD BX,3 для перехода на следующую строчку :). И все на этом... Сделайте трассировку (внутрь INT 20 залезать не надо) и посмотрите на дамп нашего сегмента данных :) Я и говорю: ПРОЩЕ ПАРЕНОЙ РЕПЫ!! ;) [5] Видите? В качестве переменных "в компьютере" можно использовать не только регистры, но и "куски" памяти! А уж там вы можете клепать свои переменные в почти неограниченном количестве! Единственное, что нужно иметь ввиду: с переменными-регистрами компьютер работает намного быстрее, чем с переменными-в-сегменте-данных :). Кстати, если вы хотите сохранить плод своих сегодняшних трудов на веник, то имейте ввиду, что вы и сегмент данных тоже должны сохранить! То есть: вам нужно сохранить весь "диапазон" от адреса 100 до 123 включительно :). Ну и, само собой, при попытке дизассемблирования с адреса 115 у вас абракадабра пойдет... мы об этом уже говорили... один из принципов фон Неймана упоминали... На сегодня все... ДZенствуйте до следующего понедельника! Уффф... устал я сегодня, однако... ОБЗОР ДZЕНСКИХ САЙТОВ - HOMEPAGE АЛЕКСЕЯ ФРУНЗЕ Однажды монах спросил своего учителя: "В чем сущность дзен-буддизма?" В ответ старый мастер стукнул ему по голове бамбуковой палкой и ушел медитировать. Ученик, вмиг достигший просветления, выполз в сад и написал на земле: :0102 MOV CX,0000 :0105 MOV AX,0001 :0108 LOOP 0105 Намного позже этот дZенствующий монах научился программировать на TASM, MASM, NASM, Watcom C, DJGPP; отбил почки, свернул шею своему учителю (интересно, в какой последовательности он это делал), и уединился в трехэтажной келье, откуда он время от времени являет миру свои PMode (и не только PMode) откровения... Как то (авторские разработки): - Frounze Commander (в детстве Алексей занимался детским грехом в виде программирования на Паскале); - 3-х мерные движки (создатели DOOM'a их потом сплагитили); - демонстрационные программы, в том числе по 2-х-мерной и 3-х-мерной графике (текстурирование, z-буфер), звуку, работе с системными ресурсами (память, сеть, порты и пр.); - обучающие программы по тематике защищенного режима и разработке ОС: 32-битный защищенный режим 386+ процессора, обработка исключений, обработка прерываний, переключение задач, страничная адресация, монитор режима v86. Исходные тексты для TASM 3.2+; - COFF-утилиты, преобразующие объектные файлы в исполняемые. Исходные тексты для NASM и C (компилятор DJPP); - программы загрузочного сектора, обеспечивающие запуск программ с диска. Исходные тексты для NASM; - статьи по программированию микроконтроллеров... Ну и подборка документов на этом сайте соответствующая, то есть самая, что ни на есть, дZенская: - по 2-х-мерной и 3-х-мерной графике (более 10 документов, 10...600 Кбайт, 3 на русском); - описание формата файла 3d Studio; - алгоритмы архивации / компрессии (8 документов, 4 на русском); - документация по программированию на TASM и MASM (6 документов, 75...500 Кбайт, 4 на русском); - книга по программированию Дэвида Брэдли (на русском); - документы и книги по программированию на C/C++ (15, 10...500 Кбайт, в основном на русском); - справочники по форматам файлов (coff, elf, exe, gif, omf); - программирование жестких дисков (7 документов, 2 на русском); - программирование процессоров Intel (8 документов, 4 на русском); - оптимизация программ, в том числе для Pentium; - программирование на Паскале (более 10 документов, в основном на русском); - The great PC Games Programmers Encyclopedy 1.0 (746 Кбайт, английский). Огромное количество специфических советов и примеров для программирования игр; - Asphyxia VGA Trainers by Denthor (английский) - основы 2d/3d-графики на пальцах; - документы по программированию CD-ROM, мыши, портов, LAN, Sound Blaster, DPMI, драйверов для DOS, видеоадаптеров, файловых систем; Вот... обозрили мы, так сказать, DZ Алексея Фрунзе, а адрес его сайта указать чуть не забыли!! Итак, вот он, продукт кипения возмущенного дZенского разума: http://www.chat.ru/~alexfru. Обязательно посетите! Ведь среди многочисленных плевел "программерских сайтов" так редко попадаются настоящие крепкие зерна... АНОНС! В следующем номере - "второе погружение в регистры". Может быть... если мне на голову опять не уронят кирпич... мыльте-to:serrgio@gorki.unibel.by и да пребудет с вами сила!

http://subscribe.ru/
E-mail: ask@subscribe.ru
Поиск

В избранное