Сравнение средств разработки ассемблерных программ (TASM, MASM, NASM)

Понятие программирования и виды языков программирования. История развития ассемблера, формирования машинного кода. Обзор языков ассемблера и акроассемблера. Примеры программ MASM, TASM и NASM. Сводные программные характеристики данных ассемблеров.

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

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

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

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

Курсовой проект

по дисциплине "Системное программирование"

на тему: "Сравнение средств разработки ассемблерных программ (TASM, MASM, NASM)"

Москва 2013

Введение

Программирование - это процесс создания программных продуктов, которые написаны на языке программирования.

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

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

- машинные языки. Очень непонятно для человека, но очень понятно для компьютера.

-языки низкого уровня. Например, Ассемблер.

- языки программирования высокого уровня. Например, Паскаль, Си, Java.

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

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

Первым значительным шагом представляется переход к языку ассемблера (английское название assembly language, или assembler, на русский переводят именно тем термином, который был использован выше. Не очень заметный, казалось бы, шаг -- переход к символическому кодированию машинных команд -- имел на самом деле огромное значение. Программисту не надо было больше вникать в хитроумные способы кодирования команд на аппаратном уровне. Более того, зачастую одинаковые по сути команды кодировались совершенно различным образом в зависимости от своих параметров (широко известный пример из мира современных компьютеров -- это кодирование инструкции mov в процессорах Intel: существует несколько совершенно по-разному кодируемых вариантов команды; выбор того или иного варианта зависит от операндов, хотя суть выполняемой операции неизменна: поместить содержимое (или значение) второго операнда в первый). Появилась также возможность использования макросов и меток, что также упрощало создание, модификацию и отладку программ. Появилось даже некое подобие переносимости -- существовала возможность разработки целого семейства машин со сходной системой команд и некоего общего ассемблера для них, при этом не было нужды обеспечивать двоичную совместимость.

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

Морис Уилкс назвал мнемоническую схему для "Эдсака" и библиотеку подпрограмм собирающей системой (по-английски assembly system - отсюда слово "ассемблер"), поскольку она собирала последовательности подпрограмм.

Первая программа на компьютере, написанная в машинных кодах, была запущена в 1948 году в Англии. До 1950 года все программы для компьютеров составлялись исключительно в машинных кодах. Такой способ составления программ был очень трудоемким, так как алгоритм необходимо было детализировать до элементарных действий, которым отвечали команды компьютера. Как следствие, программы были громоздкими, содержали большое количество ошибок, для выявления и удаления которых, в свою очередь, требовалась кропотливая и продолжительная работа.

Довольно скоро стало понятно, что процесс формирования машинного кода можно автоматизировать. Уже в 1950 году для записи программ начали применять мнемонический язык - язык assembly. Язык ассемблера позволил представить машинный код в более удобной для человека форме: для обозначения команд и объектов, над которыми эти команды выполняются, вместо двоичных кодов использовались буквы или сокращенные слова, которые отражали суть команды. Например, на языке ассемблера команда сложения двух чисел обозначается словом add, тогда как ее машинный код может быть таким: 000010. Запись программы на языке ассемблера фактически является тем же машинным кодом, только представленным с помощью специальных обозначений. Приведу пример программы, которая выводит легендарное сообщение "Hello, World!".

.386

.model flat

extrn ExitProcess:PROC

extrn MessageBoxA:PROC

.data

Ttl db 'First ASSEMBLER program',0h

Msg db 'Hello, World!!!!',0h

.code

start:

push 0h

push offset Msg

push offset Ttl

push 0h

call MessageBoxA

push 0h

call ExitProcess

end start

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

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

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

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

1. Обзор языков ассемблера и макроассемблера.

MASM

Продукт жизнедеятельности ранней компании Microsoft, которой тот был нужен для создания MS-DOS, а позднее и для Windows 9x/NT. После выхода версии 6.13 продукт на некоторое время тормознул в развитии, но потом здравый смысл взял вверх и последняя версия (на момент написания этих строк - 6.13.8204) поддерживает уникод, все SSE/SSEII/SEEIII расширения (объявляемые двумя директивами .686/.XMM), а также архитектуру AMD x86-64. Платформа Intel IA64 не поддерживается, но Microsoft поставляет Intel-ассемблер IAS.EXE.

Аббревиатура MASM расшифровывается отнюдь не как Microsoft Assembler, а как Macro Assembler, то есть Ассемблер с поддержкой Макросов, покрывающих своими возможностями широкий круг задач: повторения однотипных операций с параметризацией (шаблоны), циклические макросы, условное ассемблирование и т.д., по сравнению с которым препроцессор языка Си выглядит жалкой подделкой. Имеется даже зачаточная поддержка основных парадигм ООП, впрочем, так и не получившая большого распространения, поскольку ассемблер и ООП концептуально несовместимы. Многие пишут даже без макросов на чистом ассемблере, считая свой путь идеологически наиболее правильным. Но о вкусах не спорят.

Рисунок 1 Упаковка официального дистрибутивного пакета MASM

Сначала MASM распространялся в виде самостоятельного (и притом весьма дорогостоящего) пакета, но позже он был включен в состав DDK (Driver Development Kit ), которое вплоть до Windows 2000 DDK раздавалось бесплатно, а сейчас доступно только подписчикам MSDN (Microsoft Developer Network). Впрочем, вполне полноценное DDK (с ассемблером) для Windows Server 2003 входит в Kernel-Mode Driver Framework, а сам транслятор MASM'а еще и в Visual Studio Express, которая бесплатна.

Стив Хатчессон собрал последние версии транслятора MASM'а, компоновщик от Microsoft, включаемые файлы, библиотеки, обширную документацию, статьи разных авторов, посвященные ассемблеры и даже простенькую IDE в один дистрибутив, известный под "пакетом хатча" (hutch), бесплатно раздаваемый всем желающим на вполне лицензионной основе, так что это не хак, а вполне удобный комплект инструментов для программирования под Windows на ассемблере.

MASM'у посвящено множество книг, что упрощает процесс обучения, а в сети можно найти кучу исходных текстов ассемблерных программ и библиотек, освобождающих программиста от необходимости изобретать велосипед. Также MASM является выходным языков для многих дизассемблеров (Sourcer, IDA Pro). Все это делает MASM транслятором номером один в программировании под Windows/Intel.

Поддерживаются два выходных формата: 16/32 Microsoft OMF и (16)/32/64 COFF, что позволяет транслировать 16/32-разрядные программы под MS-DOS, работающие в реальном и защищенном режиме, 16-разрядные приложения и драйвера для Windows 3.x, 32-разрядные приложения и драйвера для Windows 9x/NT, а также 64-разрядные приложения и драйвера для Windows NT 64-bit Edition. Для создания бинарных файлов потребуется линкер, который умеет это делать (например, ulink от Юрия Харона). Кстати говоря, последние версии штатного Microsoft Linker'а, входящие в SDK и DDK, утратили способность собирать 16-разряные файлы под MS-DOS/Windows 3.x и приходится возвращаться к старой версии, которая лежит в папке NTDDK\win_me\bin16.

MASM генерирует отладочную информацию в формате CodeView, которую Microsoft Linker может преобразовывать в PDB-формат, хоть и не документированный, но поддерживаемый библиотекой dbghelp.dll, позволяющей сторонним разработчикам "переваривать" отладочную информацию, поэтому файлы, оттранслированные MASM'ом, можно отлаживать в Soft-Ice, дизассемблировать в IDA Pro и прочих продуктах подобного типа.

Главный недостаток MASM'а - его жуткая багистность. Стоит только открыть Knowledge Base, посмотреть на список официально подтвержденных багов и... ужаснуться! Как только после этого на MASM'е вообще можно программировать?! Особенно много ошибок в штатной библиотеке. Вот только несколько примеров: dwtoa и atodw_ex не понимают знака и по скорости очень тормозят, хотя в документации написано: "A high speed ascii decimal string to DWORD conversion for applications that require high speed streaming of conversion data"; ucFind не находит в строке подстроку, если длина подстроки равна 1 символу; функции BMHBinsearch и SBMBinSearch (поиск алгоритмом Бойера-Мура) реализованы с ошибками; некоторые функции обрушивают программу (если передать ustr2dw строку длиннее пяти байт - программа падает).

Другой минус - отсутствие поддержки некоторых инструкций и режимов адресации процессора, например, невозможно сделать jmp far seg:offset, а попытка создания смешанного 16/32 разрядного кода - это настоящий кошмар, который приходится разгребать руками и всячески извращаться, преодолевая сопротивление "менталитета" транслятора.

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

Тем не менее, несмотря на все эти недостатки, MASM остается самым популярным профессиональным транслятором ассемблера при программировании под Windows NT, хотя разработчикам приходится сталкиваться с трудностями, но реальных альтернатив ему нет.

TASM

Самый популярный транслятор ассемблера времен MS-DOS, созданный фирмой Borland, и полностью совместимый с MASM'ом вплоть до версий 6.x и поддерживающий свой собственный режим IDEAL с большим количеством улучшений и расширений. TASM до сих пор используется для обучения программированию на ассемблере под архитектуру x86.

Удобство программирования, скромные системные требования и высокая скорость трансляции обеспечивали TASM'у лидерство на протяжении всего существования MS-DOS. Но с появлением Windows популярность TASM'а стала таять буквально на глазах. Не сумев (или не захотев) добиться совместимости с заголовочными файлами и библиотеками, входящими в комплект SDK/DDK, фирма Borland решила поставлять свой собственный порт, причем далеко не идеальный. К тому же штатный линкер tlink/tlink32 не поддерживает возможности создания драйверов, а формат выходных файлов (Microsoft OMF, IBM OMF, Phar Lap), не поддерживается текущими версиями линкера от Microsoft (впрочем, 16-битные версии это умеют). В довершение ко всему, формат отладочной информации несовместим с CodeView и реально поддерживается только TurboDebugger'ом и soft-ice.

И хотя эти проблемы в принципе разрешимы: возможность низкоуровневого ассемблерного программирования (без включаемых файлов и макросов) осталась там же, где и была, несовместимость форматов компенсируется наличием конверторов, но... преимущества режима IDEAL над стандартным синтаксисам MASM'а день ото дня казались все менее и менее значительными, ряды поклонников редели и в конце концов проект закрылся. Последней версией транслятора стал TASM 5.0, поддерживающий команды вплоть до 80486 процессора. Отдельно был выпушен патч, обновляющий TASM до версии 5.3 и поднимающий его вплоть до Pentium MMX, однако команды Pentium II - такие, например, как SYSENTER, как не работали, так и не работают. Поддержка уникода тоже отсутствует.

В настоящее время Borland прекратила распространение своего ассемблера и достать его можно только в магазинах торгующих старыми CD-ROM или у какого-нибудь коллекционера. !tE выпустил пакет TASM 5+, включающий в себя транслятор, линкер, библиотекарь, какое-то подобие документации, несколько заголовочных файлов под Windows и пару демонстрационных примеров. Когда будете искать это добро, не перепутайте его с TASM32 фирмы Squak Valley Software - это совершенно независимый кроссассемблер, ориентированный на процессоры 6502,6800/6801/68HC11, 6805, TMS32010, TMS320C25, TMS7000, 8048, 8051,8080/8085, Z80, 8096/80C196KC, о которых большинство из нас в лучшем случае просто слышало, что они есть.

TASM - это закрывшийся проект. Однако для разработки прикладных приложений под Windows 16/32 и MS-DOS он все-таки подходит, особенно если вы уже имеете опыт работы с ним и некоторые собственные наработки (библиотеки, макросы), с которыми жалко расставаться, а конвертировать под MASM - весьма проблематично. Возможно, вам понравится бесплатный Lazy Assembler (автор - Половников Степан), совместимый с режимом IDEAL TASM и поддерживающим команды из наборов MMX, SSE, SSEII, SSEIII, 3DNow!Pro.

NASM

Транслятор NASM (расшифровывается как Netwide Assembler - Ассемблер Шириной во Всю Сеть или просто Расширенный Ассемблер) вырос из идеи, поданной на comp.lang.asm.x86 (или возможно на alt.lang.asm - сейчас точно никто и не помнит), когда не было ни одного хорошего свободного ассемблера под x86. FASM'а тогда еще не существовало. MASM/TASM стоили денег и работали только под MS-DOS/Windows. Единственный более-менее работающий транслятор под UNIX - GAS (GNU Assembler) завязан на компилятор GCC и имеет такой ужасный синтаксис, что писать на нем могут только мазохисты (и ведь примеров программ, запрограммированных на GAS'е практически нет!). Остальные ассемблеры (типа A86, AS86) не позволяют писать 16/32-разрядный код или раздаются практически без документации.

Рисунок 2 Официальный логотип NASM'a

Кончилось это дело тем, что группа программистов во главе с Петром Анвином (Peter Anvin) решила разработать собственный ассемблер и это у нее получилось! MASM-подобный синтаксис, достаточно мощная макросистема (впрочем, несовместимая с MASM'ом и ничего не знающая об union'ах вместе с кучей других полезных фич), поддержка всей линейки x86-процессоров вплоть до IA64 в x86-режиме, богатство выходных файлов (bin, aout, aoutb, coff, elf, as86, obj, win32, rdf, ieee), генерация отладочной информации в форматах Borland, STABS и DWARF2 вкупе с портами под MS-DOS, Windows, Linux и BSD обеспечили NASM'у неслабую популярность, однако без ярко выраженного фанатизма, характерного для FASM'а. Количество ошибок в трансляторе довольно велико, причем в отличии от работающих продуктов (MASM/TASM) при "хитрых ошибках" NASM не падает, а генерирует ошибочный (по структуре) объектный файл. Вот и ищи, как он его сгенерировал, чем хочешь (даже матерым хакерам это сложно, а нормальный программист может даже и не пытаться). И, как это принято в Open Source-community, полное игнорирование баг-репортов "неудобных" для авторов (разработки даже утверждают, что ошибок в их трансляторе вообще нет, в смысле им не известен ни один). Тем не менее, в последней версии NASM'а, в зависимости от значения ключа -On, код может сгенерироваться в двух или более экземплярах или может пропасть весь экспорт (pubdef'ы).

К минусам NASM'а можно отнести отсутствие поддержки уникода, платформы AMD x86-64, формата отладочной информации CodeView и некоторые странности синтаксиса. В частности, команда "mov eax, 1" не оптимизируется и транслятор умышленно оставляет место для 32-разрядного операнда. Если же мы хотим получить "короткий" вариант, размер операнда необходимо специфицировать явно: "mov eax, byte 1", что очень сильно напрягает или... использовать опцию "-On" для автоматической оптимизации.

Также необходимо принудительно указывать длину переходов short или near, иначе очень легко нарваться на специфическую ошибку "short jump out of range". Впрочем, опять-таки, существует возможность настроить транслятор на генерацию near-переходов по умолчанию.

Гораздо хуже, что NASM не помнит типы объявляемых переменных и не имеет нормальной поддержки структур.

Из мелких недочетов можно называть невозможность автоматического генерации короткого варианта инструкции "push imm8" и отсутствие контроля за соответствием транслируемых инструкций типу указанного процессора (команда "cpuid" под ".486" ассемблируется вполне нормально, а ведь не должна).

Непосредственная трансляция примеров из SDK/DDK под NASM'ом невозможна, так что разрабатывать на нем драйвера под Windows может только очень большой поклонник. NASM - один из лучших ассемблеров под Linux/BSD, а вот под Windows его позиции уже не так сильны (в основном из-за неполной совместимости с MASM'ом).

2. Пример программы (MASM)

MASM

Программа Hello World на MASM32, которая выводит это сообщение и завершается.

.386

.model flat, stdcall

option casemap :none

include \masm32\include\masm32.inc

include \masm32\include\kernel32.inc

include \masm32\macros\macros.asm

includelib \masm32\lib\masm32.lib

includelib \masm32\lib\kernel32.lib

.code

start:

print "Hello world"

exit

end start

Пример той же программы на языке MASM версии 4.0 для процессора Intel 8086.

include io.asm

data segment

x db 'Hello world!', '$'

data ends

stack segment stack

db 128 dup (?)

stack ends

code segment

assume cs: code, ds: data, ss: stack

start: mov ax, data

mov ds, ax

lea dx, x

outstr

finish

code ends

end start

Пример той же программы для MS-DOS на языке MASM версии 6.1 для процессора Intel 8086.

.model tiny

.code

.startup

mov dx, offset Hello

mov ah, 9

int 21h

.exit

Hello db 'Hello world!$'

end

3. Пример программы (TASM)

Hello, world! написанный на этой платформе и диалекте:

Пример программы для MS-DOS на TASM:

.MODEL TINY

CODE SEGMENT

ASSUME CS:CODE, DS:CODE

ORG 100h

START:

mov ah,9

mov dx,OFFSET Msg

int 21h

int 20h

Msg DB 'Hello World',13,10,'$'

CODE ENDS

END START

Пример программы для MS-DOS на TASM (тот же пример в режиме IDEAL):

IDEAL

MODEL TINY

CODESEG

STARTUPCODE

mov ah,9

lea dx,[Msg]

int 21h

int 20h

Msg DB 'Hello World',13,10,'$'

END

Еще пример программы для MS-DOS на TASM (с описанием):

.model tiny ; Модель памяти, используемая для COM

.code ; Начало сегмента кода

org 100h ; Начальное значение счетчика - 100h

start: mov ah, 9 ; Номер функции DOS - в AH

mov dx, offset message ; Адрес строки - в DX

int 21h ; Вызов системной функции DOS

ret ; Завершение COM-программы

message db "Hello World!", 0Dh, 0Ah, '$' ; Строка для вывода

end start ; Конец программы

4. Примеры программы (NASM)

Программа Hello, world!, которая выводит соответствующее сообщение и завершается.

Под операционную систему DOS:

SECTION .text

org 0x100; эта директива нужна только в случае .com файла, в котором нет никаких секций

mov ah, 0x9

mov dx, hello

int 0x21

mov ax, 0x4c00;

ah == 0x4c al == 0x00

int 0x21

SECTION .data

hello DB "Hello, world!",0xd,0xa,'$'

Под операционную систему Windows (obj):

include 'WIN32N.INC'

EXTERN MessageBoxA

Import MessageBoxA user32.dll

EXTERN ExitProcess

Import ExitProcess kernel32.dll

SECTION CODE USE32 CLASS=CODE

..start:

push UINT MB_OK

push LPCTSTR title

push LPCTSTR banner

push HWND NULL

call [MessageBoxA]

push UINT NULL

call [ExitProcess]

SECTION DATA USE32 CLASS=DATA

banner db 'Hello, world!',0xD,0xA,0

title db 'Hello',0

Под операционную систему Windows x64 (obj):

; Hello.asm

EXTERN MessageBoxW

EXTERN ExitProcess

SECTION .text USE64

start:

sub rsp, 28h ; Microsoft x64 calling convention "shadow space"

xor rcx, rcx ; HWND hWnd = NULL

lea rdx, [banner] ; LPCTSTR lpText = banner

lea r8, [title] ; LPCTSTR lpCaption = title

xor r9, r9 ; UINT uType = MB_OK

call MessageBoxW ; MessageBox(hWnd, lpText, lpCaption, uType)

xor rcx, rcx ; UINT uExitCode = 0

call ExitProcess ; ExitProcess(uExitCode)

SECTION .data

banner dw __utf16__('Hello, world!'),0

title dw __utf16__('Hello!'),0

Под операционную систему Linux

SECTION .data

msg db "Hello, world!",0xa

len equ $ - msg

SECTION .text

global _start ; the program entry point

_start:

mov eax, 4 ; 'write' syscall

mov ebx, 1 ; file descr. 1 (stdout)

mov ecx, msg ; pointer to the data

mov edx, len ; amount of data

int 0x80 ; call to the kernel

mov eax, 1 ; '_exit' syscall

mov ebx, 0 ; zero exit code (success)

int 0x80 ; call to the kernel

Таблица Сводные характеристики ассемблеров

Критерий

MASM

TASM

NASM

Цена

Бесплатный

-

Бесплатный

Владелец

Microsoft

Borland

Community

Популярность

Огромная

Низкая

Умеренная

Masm-совместимость

Она и является

Хорошая

Низкая

Архитектуры

x86 16/32, x86-64

x86 16/32

x86 16/32

SEE и прочее

Поддерживает

Не поддерживает

Поддерживает

Платформы

DOS,WIN

DOS,WIN

dos,win,linux,bsd

Отладочная информация

CodeView, PDB

Borland

Borland, STABS, DWARF2

Выходные файлы

coff, ms omf

ms omf, IBM omf, Phar Lap

bin, aout, aoutb, coff, elf, as86, obj, win32, rdf, ieee

Уникод

Поддерживает

Не поддерживает

Не поддерживает

Документация

Отличная

Отличная

Хорошая

Багистность

Крайне высокая

Умеренная

Высокая

Использование

DDK, VC, IDA

Borland C++

-

Попробую подвести итог, обобщив все вышесказанное в нескольких словах:

MASM (Macro Assembler) - стандарт для программирования под Windows 9x/NT;

TASM (Turbo Assembler) - медленно угасающая программа, пригодная только для MS-DOS;

NASM (Netwide Assembler) - хороший ассемблер под Linux/BSD с Intel-синтаксисом;

Заключение

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

В данной работе рассмотрена история развития ассемблера, а также сделан обзор по языкам ассемблера и макроассемблера, MASM, TASM, NASM.

Список литературы

1. Юров В. Assembler. Учебник. - М.: Издательский дом "Питер", 2003.

2. Крупник А.Б. Изучаем Ассемблер. - М.: Издательский дом "Питер", 2005.

3. Tom Swan. Mastering Turbo Assembler. Carmel, Indiana: Howard W. Sams & Company, Hayden Books division of Macmillan Computer Publishing, 1989.

4. Рудольф Марек. Ассемблер на примерах. Базовый курс. -- СПб.: Наука и техника, 2005.

5. А. В. Столяров. Программирование на языке ассемблера NASM для ОС Unix. -- М.: МАКС Пресс, 2011.

6. http://www.physics.uni-altai.ru/community/wiki/DmitriyPylkov

7. http://www.insidepro.com/kk/108/108r.shtml

8. http://ru.wikipedia.org/wiki/SoftICE

9. http://libray.narod.ru/delphi/softice22.html

10. http://citforum.ru/programming/bcpp/r78_1.shtml

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


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

  • Понятия структурного программирования и алгоритма решения задачи. Краткая история развития языков программирования от машинных до языков ассемблера и языков высокого уровня. Процедурное программирование на C#. Методы и программы для моделирования.

    учебное пособие [1,7 M], добавлен 26.10.2010

  • Понятия языка программирования, разновидности и характеристика языков. Исторический обзор их создания и применения. Классификация, примеры использования. Характеристики языков программирования с точки зрения элементов объектной модели, их популярность.

    реферат [463,6 K], добавлен 07.09.2009

  • Рассмотрение общих сведений и уровней языков программирования. Ознакомление с историей развития, использования языков программирования. Обзор достоинств и недостатков таких языков как Ассемблер, Паскаль, Си, Си++, Фортран, Кобол, Бейсик, SQL, HTML, Java.

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

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

    презентация [873,4 K], добавлен 23.01.2013

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

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

  • Ознакомление с ситуацией распространения на рынке языков программирования. Определение плюсов и минусов Pascal, C++, VBA. Сравнение и анализ синтаксиса программ на основе одной задачи. Выявление лучшего языка для освоения первоначальных навыков.

    курсовая работа [1022,0 K], добавлен 13.10.2014

  • Оценка современного этапа развития компьютерных технологий. История развития, классификации, сведения и уровни языков программирования. Обзор современных языков программирования: Си, его разовидности, Паскаль, Фортран, Бейсик - тенденция их развития.

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

  • Рассмотрение и ознакомление с одним из наиболее используемых языков программирования - С++. Его применение в процессе работы со строковыми типами данных и символами. Исследование кодов написания программ в режиме разработки консольного приложения.

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

  • Характеристика языков программирования: краткая история, хронология. Основные виды языков программирования: ассемблер; бейсик. Создание и использование формул в Excel. Применение операторов в формулах. Использование функций в Excel. Сайт дома отдыха.

    отчет по практике [139,1 K], добавлен 03.06.2011

  • Характеристики и свойства языков программирования. Исследование эволюции объектно-ориентированных языков программирования. Построение эволюционной карты механизмов ООП. Разработка концептуальной модели функционирования пользовательского интерфейса.

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

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