Игра 'Змейка'

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    141,18 Кб
  • Опубликовано:
    2014-08-19
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Игра 'Змейка'

Введение

Ассе́мблер (от англ. assembler - сборщик) - компьютерная программа, компилятор исходного текста программы, написанной на языке ассемблера, в программу на машинном языке.

Как и сам язык (ассемблер), ассемблеры, как правило, специфичны конкретной архитектуре, операционной системе и варианту синтаксиса языка. Вместе с тем существуют мультиплатформенные или вовсе универсальные (точнее, ограниченно-универсальные, потому что на языке низкого уровня нельзя написать аппаратно-независимые программы) ассемблеры, которые могут работать на разных платформах и операционных системах. Среди последних можно также выделить группу кросс-ассемблеров, способных собирать машинный код и исполняемые модули (файлы) для других архитектур и ОС.

Ассемблирование может быть не первым и не последним этапом на пути получения исполнимого модуля программы. Так, многие компиляторы с языков программирования высокого уровня выдают результат в виде программы на языке ассемблера, которую в дальнейшем обрабатывает ассемблер. Также результатом ассемблирования может быть не исполнимый, а объектный модуль, содержащий разрозненные и непривязанные друг к другу части машинного кода и данных программы, из которого (или из нескольких объектных модулей) в дальнейшем с помощью программы-компоновщика ("линкера") может быть скомпонован исполнимый файл.

1. Язы́к ассе́мблера

Язы́к ассе́мблера - язык программирования низкого уровня, мнемонические команды которого (за редким исключением) соответствуют инструкциям процессора вычислительной системы. Трансляция программы в исполняемый машинный код производится ассемблером (от англ. assembler - сборщик) - программой-транслятором, которая и дала языку ассемблера его название.

1.1 Содержание языка

Команды языка ассемблера один к одному соответствуют командам процессора. Фактически, они и представляют собой более удобную для человека символьную форму записи - мнемокоды - команд и их аргументов. При этом одной команде языка ассемблера может соответствовать несколько вариантов команд процессора.

Кроме того, язык ассемблера позволяет использовать символические метки вместо адресов ячеек памяти, которые при ассемблировании заменяются на вычисляемые ассемблером или компоновщиком абсолютные или относительные адреса, а также так называемые директивы (команды ассемблера, не переводимые в машинные команды процессора, а выполняемые самим ассемблером).

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

Каждая модель (или семейство) процессоров имеет свой набор - систему - команд и соответствующий ему язык ассемблера. Наиболее популярные синтаксисы языков ассемблера - Intel-синтаксис и AT&T-синтаксис.

Существуют компьютеры, реализующие в качестве машинного язык программирования высокого уровня (Forth, Lisp, Эль-76). Фактически, в таких компьютерах они выполняют роль языков ассемблера.

1.2 Достоинства и недостатки

 

Достоинства

Язык ассемблера позволяет писать самый быстрый и компактный код, какой вообще возможен для данного процессора.

Если код программы достаточно большой, - данные, которыми он оперирует, не помещаются целиком в регистрах процессора, то есть частично или полностью находятся в оперативной памяти, то искусный программист, как правило, способен значительно оптимизировать программу по сравнению с транслятором с языка высокого уровня по одному или нескольким параметрам:

·          скорость работы - за счёт оптимизации вычислительного алгоритма и/или более рационального обращения к ОП, перераспределения данных;

·        объём кода (в том числе за счёт эффективного использования промежуточных результатов). (Сокращение объема кода также нередко повышает скорость выполнения программы.)

Обеспечение максимального использования специфических возможностей конкретной платформы, что также позволяет создавать более эффективные программы, - в том числе менее ресурсоемкие.

·          портам ввода-вывода,

·        регистрам процессора и др.

Язык ассемблера часто применяется для создания драйверов оборудования и ядра операционной системы (или машинозависимых подсистем ядра ОС).

Язык ассемблера используется для создания "прошивок" BIOS.

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

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

Недостатки

Сложную программу написать на языке ассемблера намного сложнее - вплоть до невозможности, по причине сложности, - чем на языке высокого уровня.

В силу машинной ориентации - "низкого" уровня - языка ассемблера человеку сложнее читать и понимать программу на нём по сравнению с программой на языке высокого уровня. А подлежащий редактированию ассемблерный код сравнительно большой, - программа на языке ассемблера состоит из слишком "мелких" элементов - машинных команд. Соответственно, усложняются программирование и отладка, растёт трудоёмкость разработки, сравнительно велика вероятность программных ошибок.

Требуется высокая квалификация программиста. Код на ассемблере выполняется быстрее, но написанный неопытным программистом, обычно оказывается хуже сгенерированного компилятором с языка высокого уровня

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

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

1.3 Применение

Исторически можно рассматривать язык ассемблера как второе поколение языков программирования ЭВМ. (Если первым считать числовые двоичные коды машинных команд.) Недостатки языка ассемблера, сложность разработки на нём больших программных комплексов привели к появлению языков третьего поколения - языков программирования высокого уровня. В частности: Фортран, Лисп, Кобол, Паскаль, Си и многих др. Именно языки программирования высокого уровня и их наследники в основном используются в настоящее время в индустрии информационных технологий. Однако языки ассемблера сохраняют свою нишу, обусловливаемую их уникальными преимуществами в части эффективности и возможности полного использования специфических средств конкретной платформы.

На языке ассемблера пишут подпрограммы (в настоящее время довольно редко программы пишутся на ассемблере целиком), для которых критически важны:

·          быстродействие (драйверы);

·        объем используемой памяти (загрузочные секторы, встраиваемое (англ. embedded) программное обеспечение, программы для микроконтроллеров и процессоров с ограниченными ресурсами, вирусы, программные защиты).

С использованием программирования на языке ассемблера производятся:

Оптимизация критичных к скорости подпрограмм в программах на языках высокого уровня, таких как C++ или Pascal. Это особенно актуально для игровых приставок, имеющих фиксированную производительность, и для мультимедиа-кодеков, которые стремятся делать менее ресурсоёмкими и более быстрыми и, следовательно, более популярными.

Создание операционных систем (ОС) или машинозависимых компонентов ОС. Причем подавляющее большинство ОС в настоящее время пишут на Си - языке высокого уровня, который специально был создан для написания одной из первых версий UNIX. Небольшие кусочки ОС, такие как загрузчик ОС, уровень абстрагирования от аппаратного обеспечения (hardware abstraction layer) и ядро, часто пишутся с применением ассемблерных вставок или ассемблерных подпрограмм. Фактически, ассемблерного кода в ядрах Windows или Linux совсем немного, поскольку авторы стремятся обеспечить переносимость и надёжность, но, тем не менее, он там присутствует. Некоторые любительские ОС, такие как MenuetOS, целиком написаны на языке ассемблера. При этом MenuetOS помещается на дискету и содержит графический многооконный интерфейс. При этом по причине сложности написания больших программ на ассемблере на MenuetOS не существует имеющего практическую ценность прикладного программного обеспечения, а производительность системы по причине высокой энтропии не столь велика, как можно было бы ожидать от программного обеспечения написанного целиком на ассемблере

Создание драйверов. Некоторые участки драйверов, программируют на языке ассемблера. Хотя в целом в настоящее время драйверы также стараются писать на языках высокого уровня в связи с повышенными требованиями к надёжности и достаточной производительностью современных процессоров и достаточным совершенством компиляторов с языков выского уровня. Надёжность для драйверов играет особую роль, поскольку в Windows NT и UNIX (в том числе в Linux) драйверы работают в режиме ядра. Одна ошибка в драйвере может привести к краху всей системы.

Создание антивирусов и других защитных программ.

Написание трансляторов языков программирования.

1.4 Связывание программ на разных языках

Поскольку уже начиная с эпохи третьего поколения компьютеров на языке ассемблера часто разрабатываются лишь только фрагменты программ, их необходимо связывать с остальными частями программной системы, написанными на других языках программирования (практически всегда на языках высокого уровня).

Это достигается двумя основными способами:

На фазе трансляции - вставка в текст программы на языке высокого уровня ассемблерных фрагментов (англ. inline assembler) с помощью специальных директив языка. В частности, данный способ поддерживается языками программирования Си и Delphi), в том числе написание функций на языке ассемблера. Способ удобен для несложных преобразований данных, но полноценного ассемблерного кода, с данными и подпрограммами, включая подпрограммы со множеством входов и выходов, не поддерживаемых языком высокого уровня, с его помощью сделать невозможно.

На этапе компоновки при раздельной трансляции. Для взаимодействия компонуемых модулей достаточно, чтобы импортируемые функции - определённые в одних модулях и используемые в других поддерживали соглашения вызова (англ. calling conventions) и типы данных, применяемые в базовом языке высокого уровня, используемого в качестве основного средства разработки. Написаны же отдельные модули могут быть на любых других языках, в том числе и на языке ассемблера.

2. Описание программы

Программа реализует генерирование движущихся изображений. На черном экране движется белая полоска "змейка", которая управляется клавишами "вверх", "вниз", "вправо" и соответственно "влево". Цель игры состоит в том чтобы "поедать", т.е. с помощью нажатий управляющих клавиш направить "змейку" на белый квадратик который в этот момент присутствует на экране. После этого программа увеличит длину "змейки" на длину объекта "съеденного" ею. Белые квадратики появляются произвольно на определенной для игры области. Игра продолжается до тех пор пока пользователь не нажмет клавишу "Esc" или "змейка" не пересечет сама себя, тогда наступит конец игры. Еще одна особенность игры что если "змейка приближается к границам окошка то она появиться на том же уровне окна только с другой стороны, что позволит значительно увеличить сеанс игры.

Моя программа реализована на языке ассемблера и скомпилирована в приложении Flat assembler (FASM) который является свободно распространяемым и многопроходным компилятором языка ассемблер.

В начальный момент времени змейка находиться посередине ближе к нижнему краю окна (Рис.1).

После непродолжительной игры и "съев" несколько белых квадратов, мы получаем змейку более длинных размеров (Рис. 2).


Заключение

ассемблер язык приложение игра

В данной курсовой работе я научился применять низкоуровневый язык ассемблер для создания простых приложений. Для создания приложения на языке ассемблера мне пришлось работать с прерывания и регистрами. Как и все языки программирования в ассемблере мы столкнулись с переменными, и они определялись по определенным директивам. В процессе работы над программой мы использовали так же циклы и условные и безусловные переходы.

Хоть и ассемблер и является одним из самых известных низкоуровневых языков программирования, он не очень востребован из-за того что многие их объектно-ориентированных языков предлагают более богатый выбор возможностей для создания и компиляции приложения, так же обеспечивают большую понятность и приятный пользовательский интерфейс.

Приложение

add di,[fs:step]

random:rdtsc

and ax,4094

cmp ax,3998

ja random

inc ax

mov [fs:snake+bp+2],ax

add [fs:snakelen],2:cx,cxax,4000di,axdi,axax,cxdi,axdi,axax,cxdi,axbxbxbx,bpbx,cxbyte[gs:di],255quitdi,[fs:bx+snake][gs:di],cxal,60hcx,axbp,ax,17dx,[fs:move+bp-144]bp,144cx,81cx,bpdx,[fs:step][fs:step],dxaxquitdw 2

move dw -160,0,0,-2,0,2,0,0,160dw 6dw 2005,2001,2003,2007

Похожие работы на - Игра 'Змейка'

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!