Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабораторная 2 Архитектура компютера.docx
Скачиваний:
9
Добавлен:
12.11.2019
Размер:
296.03 Кб
Скачать

Программирование на Ассемблере. Обучающие уроки

http://life-prog.ru/view_cat.php?cat=3

Язык Ассемблер (Assembler) - это низкоуровневый язык программирования. Он хоть и сложный, но написанные на нем программы работают быстрее, чем на Паскале и на Си. Хотя Си старается оптимизировать скорость выполнения программ, но она никогда не обгонит ассемблер. Достоинства языка состоят в том, что программист может написать более высокоскоростную программу, чем на других языках высокого уровня. Также Ассемблер используется для написания прошивок на BIOS, а также возможет непосредственный доступ к регистрам процессора, и к портам компьютера. В данном обучающем курсе приведены написания программ, или другими словами ассемблер на примерах, а также ассемблер под windows.

Написанная информация была с использованием книги: Рисований О.М. Системне програмування: Підручник. – Х.: НТУ “ХПІ”, 2010. – 912 с.

Введение в Ассемблер

Для того, чтобы программировать на Assembler, необходимо:

Программа MASM_v9.0 или MASM_v10.0 Отладчик, например: OLLYDBG.EXE В установленном месте, где находится программа MASM, создаете файл: aaa.bat

Я выбрал такое название (aaa.bat) для того, чтобы она была в самом верху. И вы могли всегда его видеть. В этом aaa.bat вносите такую информацию:

ml /c /coff "work.asm" link /SUBSYSTEM:CONSOLE "work.obj"

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

Ассемблер имеет:

- директиву определения типа микропроцессора, - метку начала программы, - тело программы, -метку окончания программы

В языке Ассемблер есть переменые разных типов: знаковые и беззнаковые форматы типов Shortlnt (signed char), Byte (unsigned char), Integer (int), Word (unsigned int) и т. д.

Напишем программу вычисления выражения: a – e/b – de, где:

a = 5; b = 27; c = 86; е = 1986; d = 1112;

и сохраним ее там же, где и aaa.bat: work.asm. Если мы хотил откомпилировать другую программу, то нужно в aaa.bat изменить имя файлов, т. е. вместо work заменить на ... имя. И сохранить его. Если программа не содержит синтаксические ошибки, то должен получиться файл с расширением exe.

Программа:

.686 ; директива определения типа микропроцессора .model flat,stdcall ; задание линейной модели памяти ; но соглашения ОС Windows

.data ; директива определения данных _a dw 5 ; запись в 16-разрядный амбарчик памяти с именем _а числа 5 _b dw 27 ; запись _b = 16h _c dw 86 ; запись _c = 56h _e dw 1986 ; запись _e = 7c2h _d dw 1112 ; запись _d = 458 res dw 0 ; резервирование памяти для сохранения переменной res

.code ; директива начала сегмента команд start: mov edx,0 ; очистка регистров mov ebx,0 mov ecx,0 mov ах,_e ; в регистр ах заносим число _e = 7c2h mul _d ; умножаем _e на _d SHL edx,16 ; делаем здвиг на 16 mov dx,ax push edx ; бросаем значение в стек mov edx,0 mov ах,_e mov cx,_b div cx ; делим ах на cx pop ecx ; достаем из стека значене sub ecx,eax ; отнимает mov ах,_a sub eax,ecx mov res, eax ret ; возвращение управления ОС end start ; окончание программы с именем _start

Результат работы программы:

как мы видим, комментарии ставятся после точки с запятой.

mov куда, откуда - это команда перевылки

mul _d - это команда умнжения регистра ax на _d. Результат попадает в ax

shl edx,16 - команда здвига на 16 разрядов

div cx - команда деления ах на cx. Результат попадает в ax

pop ecx - команда достает из стека значене

sub ecx,eax - команда отнимает значение ecx - eax. Результат попадает в ecx