Assembler - это вещь серьезная. У моего преподавателя по программированию была история. Он как-то решил начать обучение программированию не с паскаля, а именно с ассемблера. В конечном итоге из 12 человек осталось только 5, которые прошли весь курс. Сейчас это самые опытные программисты, работающие в различных организация в разных городах. У меня предложение, может нам самим попытаться изучить ассемблер? Как вы смотрите на эту идею? Ведь знание машинного языка - это круто, и вам будут доступны ВСЕ ресурсы компа. И с его помощью можно реализовать все. НО это очень сложно. Что бы привлечь ваше внимание, вот небольшой пример программы на ASM. 64 байта весит программа. http://depositfiles.com/files/jnizeg12a Код:
Code
org 100h use16
mov al, 13h cmc inc dx int 10h push 0A000h pop es
loc_1: mul bx inc ax add ax, di adc [si], bx div word[si+0Ch]
Добавлено (24.02.2009, 12:05) --------------------------------------------- Даа...! Желания никто не изъявил.
Добавлено (24.02.2009, 12:18) --------------------------------------------- Тогда я один начну, может потом народ присоединится.
Итак! Первой задачей я себе поставил изучить работу процессора. Вот что самого интересного я откопал. В процессоре есть кэш нескольких уровней 1,2. Кэш используется для запоминания адресации памяти ячее, чтобы в дальнейшем можно было быстро обратиться к той ячейке, к которой мы обращаемся несколько раз подряд. Кэш первого уровня самый приближенный к процессору, имеет небольшое кол-во памяти, но доступ к памяти осуществляется ~10-12 тактов. Кэш второго уровня, более отдаленный от процессора, но имеет больше памяти. Доступ ~20-30 тактов. Бывает кэш третьего уровня, обычно в многоядерных процессорах, и он является общим для всех "ядер" процессора. Для сравнения, просто доступ к оперативной памяти осуществляется примерно за 100-200 тактов.
Также в процессоре имеется предсказатель переходов, что тоже увеличивает работу процессора. Поэтому важно знать, что все массивы в памяти представлены в виде одной длинной колбасы и если скакать по элементам скажем 2D массива не по x, а по y, то это будет более медленно. Поэтому стоит пользоваться такой конструкцией:
Code
var m: array[1..10,1..10]of integer; i: integer; begin for y:=1 to 10 do for x:=1 to 10 do m[x,y]:=50; end;
И при создании игр типа тетриса, лучше перевернуть массив на 90 градусов, а вывод делать наоборот. И не стоит забывать, что изображение тоже массив.
Сообщение отредактировал Kostia - Суббота, 21.02.2009, 07:33
не всё так сразу ... сейчас праздники пройдут... Ассемблер я ещё на спектруме пытался изучать, здесь конечно разница есть ... ну могу сказать что язык действительно сложный, но очень пригодится для создания какой нибудь примочечки для ваших программ на любом языке... например работы с портами или быстрого получения какого нибудь потокового обсчёта данных... Полностью написать программу на ассемблере это убийство ... хотя весить она будет мало и работать на много быстрее )
Да, но с изучение этого языка начинаешь понимать работу самого компьютера, процессора, оперативной памяти..., а значит и на языке высокого уровня можно написать программу которая ни в чем не будет уступать программе на asm. Главное знать как все это работает и как это раелизуется на ассемблере. Ведь компилятор языка высокого уровня сначала переведет код на asm и только потом будет его компилировать.
Kostia, здесь ты абсолютно прав... даже та маленькая доля знаний машинного кода со спектрума, мне очень облегчает программирование ... Например в магическом квадрате для постройки и генерации карты я использовал 8 битную систему вычислений, хоть и внедрял это в бейсик... Алгоритм получился маленький и очень быстрый... До сих пор пользуюсь для хранения данных не в переменные а в массивы... - с помощи такого хитрого хранения, мы можем в большой программе ограничится всего десятками переменных...
Что это такое? Наверное, каждый из нас думает, что ассемблер это что-то сложное, очень трудное для изучения и вообще недосягаемое. Поверьте мне, я тоже так, когда-то думал. Невозможное возможно. Этот туториал рассчитан для тех, кто даже не знает никакого языка программирования, я вообще выступаю, за то, что надо сначала изучать ассемблер, а потом только языки высокого уровня. Если вы перечитаете весь туториал от этих строк до самого конца то вам будет намного проще изучать другие языки программирования, и вы уже никогда не будете спорить о том какой язык лучше С++ или Delphi.