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

Особенности ассемблера - машинно-ориентированного языка низкого уровня, применяемого для создания простых приложений. Связывание программ на разных языках. Типичный формат записи команд, инструкции и директивы языка ассемблера. Разработка игры "Змейка".

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 20.07.2014
Размер файла 215,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Введение

Ассеммблер (от англ. 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 не существует имеющего практическую ценность прикладного программного обеспечения, а производительность системы по причине высокой энтропии не столь велика, как можно было бы ожидать от программного обеспечения написанного целиком на ассемблере

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заключение

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

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

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

Приложение

org 100h

mov al,3

int 16

mov cx,-1

push 0B800h

pop es

mov ax,255

rep stosw

mov [gs:1Ch*4+2],ds

mov word[gs:1Ch*4],main

push ds

pop fs

push es

pop gs

a:

jmp a

quit:

xor ax,ax

int 21h

main: mov si,snake

mov bp,[fs:snakelen]

mov ax,[fs:bx+snake]

add ax,[fs:step]

mov di,[fs:snake+bp]

mov byte[gs:di],255

xchg ax,di

cmp ax,di

jne next

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

next:

xor cx,cx

mov ax,4000

add di,ax

cmp di,ax

cmovl ax,cx

sub di,ax

cmp di,ax

cmovl ax,cx

sub di,ax

inc bx

inc bx

cmp bx,bp

cmove bx,cx

xor byte[gs:di],255

je quit

xchg di,[fs:bx+snake]

mov [gs:di],cx

in al,60h

cbw

mov cx,ax

shld bp,ax,17

mov dx,[fs:move+bp-144]

sub bp,144

sub cx,81

xor cx,bp

cmovnl dx,[fs:step]

mov [fs:step],dx

dec ax

je quit

iret

step dw 2

move dw -160,0,0,-2,0,2,0,0,160

snakelen dw 6

snake dw 2005,2001,2003,2007

Размещено на Allbest.ru


Подобные документы

  • Изучение текстового режима языка программирования Turbo Pascal. Написание игры "Змейка" с помощью средств, процедур и функций языка программирование Turbo Pascal. Структурное и функциональное описание разработки. Листинг и общие примеры работы программы.

    контрольная работа [286,3 K], добавлен 10.04.2011

  • Разработка и реализация компьютерной игры "Змейка" с помощью языка программирования Pascal и модуля CRT. Составление общего алгоритма программы, выделение ее функциональных частей. Разработка тестовых примеров. Использование типизированных файлов.

    курсовая работа [2,1 M], добавлен 23.02.2011

  • Основные понятия абстракции, инкапсуляции, наследования и полиморфизма. Основы проектирования игр. Работа с графическими библиотеками. Создание дружественного пользовательского интерфейса. Разработка игры "Змейка", краткое описание классов, алгоритмы.

    курсовая работа [757,2 K], добавлен 19.06.2012

  • Оптимизация с использованием языка низкого уровня ассемблера. Его связь с языками высокого уровня. Отдельно компилируемые модули. Разработка программных модулей на ассемблере с использованием компиляторов TASM5.0 фирмы Borlandи MASM6.14 фирмы Microsoft.

    курсовая работа [405,5 K], добавлен 18.05.2014

  • Разработка и создание игры "Змейка". Использование динамически-активных принципов языка Java. Графические объекты программы. Описание игры, правила, теоретические сведения. Классы приложения. Типы данных. Реализация. Метод. Объект. Блок-схема игры.

    курсовая работа [12,4 K], добавлен 18.06.2008

  • Изучение некоторых аспектов языка Ассемблера и ЭВМ в целом. Построение алгоритмов решения поставленной задачи на языках программирования Си, Ассемблер УМ и IBM PC. Составление блок-схем решений и написание программ на каждом из перечисленных языков.

    курсовая работа [691,5 K], добавлен 20.10.2014

  • Знакомство с основными особенностями развития игровой индустрии. Создание компьютерных игр как одна из прикладных сфер программирования. Общая характеристика набора методов класса Area. Рассмотрение способов создания игры "Змейка", анализ этапов.

    курсовая работа [799,4 K], добавлен 13.06.2013

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

    дипломная работа [222,2 K], добавлен 25.03.2013

  • Особенности разработки автоматизированной справочной системы по основным элементам языка ассемблера, анализ среды Borland Delphi 7.0. Способы определения трудоемкости разработки программного продукта: этапы расчета сметной стоимости, планирование цены.

    дипломная работа [3,2 M], добавлен 03.04.2013

  • Основы языка программирвоания C++. Элементы управления в Microsoft Visual C++. Алгоритмические конструкции языка программирования Visual C++ и базовые элементы управления. Глобальные константы и переменные. Управление программой с помощью клавиатуры.

    курсовая работа [1,7 M], добавлен 08.04.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.