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

Уроки по программированию (от Ассемблера до Делфи)


Информационный Канал Subscribe.Ru


Низкоуровневый язык программирования Ассемблер
урок 1
Введение

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

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

Для начала вам желательно где-нибудь раздобыть этот самый Ассемблер. Если вы не знаете где он обитает, то могу подсказать: www.masm32.com . Поскольку многим не нравится замечательная операционная система ДОС мы будем изучать Асм под Windows. А вникать мы в него начнем с небольшого примерчика:


.386
.model flat, stdcall
option casemap :none

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc

includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data
szDlgTitle db "MASM", 0
szMsg db "Hello world !!!",0

.code

start:

push MB_OK
push offset szDlgTitle
push offset szMsg
push 0
call MessageBox

push 0
call ExitProcess

end start

Результатом работы примера будет маленькое диалоговое окошечко, заголовком которого будет текст "MASM", а содержимым будет - "Hello world!!!". Теперь я дам краткое и сухое пояснение к строчкам примера (скорее всего большинство нижеизложенного вам будет непонятно, но сейчас смысл в том чтобы вы представили как выглядят программы на Ассемблере).

".386" - означает, что в программе используются инструкции (или просто - команды) 386-го процессора ( кто-нибудь помнит о таком?).

".model flat, stdcall" - этот пирожок говорит о многом и очень интересном, но к сожалению сейчас вам об этом лучше не знать...

"option casemap :none" - чувствительность к регистру, т.е., например, ZZZ и zzz - не одно и то же.

"include \masm32\include\windows.inc" - подключение заголовочного файла windows.inc ( в таких файлах обычно содержатся описания констант, различных структур и функций, какой-нибудь библиотеки).

"includelib \masm32\lib\user32.lib" - объявление используемых библиотек

".data" - говорит о том, что начинается описание переменных

"szDlgTitle db "MASM", 0" - объявление переменной szDlgTitle, в которой расположен текст "MASM"

"szMsg db "Hello world !!!",0" - объявление переменной szMsg

".code" - после этой строчки идет сам код программы, причем данная программа начинает работать со строчки "start:" и заканчивается строчкой "end start"

Эти строчки вызывают диалоговое окошечко:
"push MB_OK" - в окошке будет одна кнопочка Ok
"push offset szDlgTitle" - указание заголовка окна
"push offset szMsg" - указание содержания окна
"push 0" - маленький секрет
"call MessageBox" - вызов самой функции отображения окошечка

А эти строчки завершают выполнение программы:
"push 0" - еще один маленький секрет
"call ExitProcess" - вызов функции завершающей нашу программу

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

Исходный код программы, а также ее откомпилированная версия


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное