Главная страница

Ассемблер для блондинок (и блондинов). И блондинов


Скачать 0.75 Mb.
НазваниеИ блондинов
АнкорАссемблер для блондинок (и блондинов).pdf
Дата14.12.2021
Размер0.75 Mb.
Формат файлаpdf
Имя файлаАссемблер для блондинок (и блондинов).pdf
ТипПрактическая работа
#303672
страница1 из 6
  1   2   3   4   5   6
Ассемблер для блондинок
... и блондинов
1. Практическая работа на Ассемблере Необходимые учебные материалы
[1] Баула В.Г. Введение в архитектуру ЭВМ и системы программирования. http://arch32.cs.msu.su/ Здесь можно читать пособие для студентов, разбитое по главам. Каждую главу можно скачать в формате pdf, щѐлкнув правой кнопкой мыши по еѐ названию в левом окне (оглавлении) и выбрав пункт меню "сохранить как.
[2] Бордаченкова Е.А. Упражнения по MASM 6.14. http://arch32.cs.msu.su/semestr2
[3] Пильщиков В.Н. Программирование на языке ассемблера IBM PC. http://arch32.cs.msu.su/semestr2 Сразу заметим, что Ассемблер, на котором мы собираемся программировать, описан в [1], поэтому никаких отличий данного материала или работы Ассемблера отбыть не должно (кто заметит – пишите по адресу в [1]). Надо сделать следующее.
1. Скачать программное обеспечение. Сайт http://arch32.cs.msu.su/semestr2, папка masm 6.14.zip
. Это упакованная папка, ее надо разархивировать, причем никакие названия папок менять нельзя. Получившуюся папку с файлами под названием masm 6.14 лучше всего поместить в корневой каталог любого диска (можно и на флешку), а вот на рабочий стол или в какие-то другие папки со сложными именами (Мои Документы и т.д.) лучше не помещать.
2. Попробовать, работает ли. В папке _Examples откройте один из первых примеров, кликните 2 раза по файлу makeit.bat (расширение у вас может не отображаться, файл может быть помечен как "пакетный файл. Появится черное окно консоли. Не волнуйтесь, если придется немножко подождать это система безопасности Windows и антивирус производят свои проверки. Возможно, вам придется успокоить ее, уведомив, что создатель файла вам известен, и запускать этот файл можно. Для тех, кто умеет, рекомендуется внести каталог masm 6.14 в список исключений для проверки антивирусом. Вскоре сверху окошка появится заголовок, а внутри окошка выбудете видеть работу программы. Рекомендуется сразу войти в свойства окна (щѐлкнув ПРАВОЙ кнопкой мышки на его заголовке, и установить достаточно большой размер шрифта для комфортной работы с экраном.
3. Если что-то не получилось. Проверьте, разархивирована ли папка (Windows может вам показывать, какие файлы находятся в сжатой папке, такие файлы можно только просматривать, работать сними нельзя. Проверьте, правильное ли у Вас название главной папки, не пропущен ли пробел или точка. Теперь Вы можете посматривать тексты программ и наблюдать, как они работают. Каждая програм- ма-пример находится в отдельной папке. Текст ассемблерной программы находится в файле a.asm, посмотреть (и изменить) его можно любым редактором, например, блокнотом. Лучше сразу настроить компьютер, чтобы файлы с расширением .asm по щелчку мыши (а лучше по клавише ENTER) открывались блокнотом. В противном случае надо открывать правой кнопкой мыши открыть с помощью ивы- бирать блокнот. В популярных файловых менеджерах Far Commander и Total Commander для входа в редактор можно использовать клавишу F4.
4. Написать свою программу. В папке _Examples есть подпапка Шаблон, там содержится все необходимое для изготовления и запуска собственной программы. Первым делом надо продублировать эту папку, чтобы не испортить и использовать в дальнейшем. Копию (например, с именем _MyProg1) надо поместить в той же папке (_Examples). Теперь открываем файл a.asm, в нем находится заготовка для программы уже написан комментарий (после слова COMMENT) и есть макрокоманда, печатающая заголовок консольного окна (ConsoleTitle "Заготовка программы. А далее, перед словом exit – место
для наших команд. Измените текст заголовка, запишите туда свою фамилию и что делает программа преподавателю будет удобно проверять такую программу. Далее наберите макрокоманду печати строки "Здравствуй, мир" Можно и более "красиво, с большими буквами, OutstrLn "Здравствуй, мир. Затем сохраним измен нный файл и запустим нашу программу с помощью файла makeit.bat. В окне консоли должен появиться написанный Ваш текст. Поздравляем Вы написали первую программу на Ассемблере Подобным образом можно писать и другие программы создавать копию папки Шаблон ив ней писать программу в файле a.asm. Вы можете добавить вывод несколько строчек разноцветного текста, которые будут появляться в разных местах экрана по нажатию клавиши, поэкспериментировав с макрокомандами, в которых ненужны переменные и регистры newline, outstr и outstrln, GotoXY,
SetTextAttr
. Обратите внимание, что по синтаксису Ассемблера в именах макрокоманд большие и маленькие буквы различаются, так что писать команды надо строго теми буквами, какими определено. Правда, некоторые имена макрокоманд имеют СИНОНИМЫ, например outint, Outint. Описание команд см. [1, раздел 6.5.1]. Чтобы свободнее ориентироваться в шаблоне программы, разберем остальные его составляющие. Программа на Ассемблере состоит из строчек-предложений. В каждой строчке обычно помещается одна команда или директива. Для наглядности группы строчек можно писать со смещением на 2-3 позиции. Как ив Паскале, везде, где стоит пробел или любой другой разделитель (скобка, запятая, можно поставить любое количество пробелов. Первая строка нашей программы include concole.inc подключает очень нужный файл (в частности, там находятся используемые нами макрокоманды. Эта строка должна быть всегда и самой первой. Далее идѐт многострочный комментарий. Он начинается служебным словом COMMENT, а вместо звездочки за ним можно ставить любой символ. Этот символ задаѐт начало и конец комментария. Таким образом, оформляются длинные комментарии (в несколько строк, короткие комментарии, пояснения к одной строке, можно писать сразу после строки через точку с запятой. Наша программа состоит из двух секций с заголовками .data и .code – эти названия менять нельзя. Понятно, что это секции для данных и кода (команд. Работа программы начнется с выполнения команды, помеченной меткой Start. А откуда машина узнает, что именно эта метка – самая главная (она не обязана стоять впервой строке секции кода Ассемблер узнает это, "посмотрев" на последнюю строчку программы. Там стоит слово end и после него указывается та самая "главная" метка. Метку можно называть как угодно (по правилам формирования имѐн), только надо помнить, что большие и маленькие буквы для имен пользователя в Ассемблере различаются. Макрокоманда exit завершает программу. Собственные программы можно хранить и запускать немного по-другому, но для этого надо немножко разобраться, что за файлы у нас в папке, что они делают, как сними можно работать. Мы уже знаем, что в файле с расширением .asm находится текст программы на Ассемблере. Чтобы программа заработала, надо перевести этот текст на машинный язык, сохранить полученный результат в так называемом исполняемом файле, а потом запустить данный файл на счѐт. При работе с Паскаль- программой надо было произвести, в общем-то, такие же действия, нотам у нас была среда, которая вызывала нужные программы. Здесь у насесть специальный пакетный файл makeit.bat. Кстати, настала пора сказать, что вы можете этому файлу дать любое имя – оно нигде не используется, только расширение менять нельзя. В этом файле собраны команды, которые должен выполнить компьютер (точнее, его системная программа – командный интерпретатор. Давайте посмотрим, как этот файл устроен. Открыть этот файл для просмотра можно по правой кнопке мыши командой "изменить" (команда "открыть" производит выполнение записанных в файле команд) или кнопкой F4 в файловом менеджере. Первая строка файла читается как "выключить эхо" и запрещает вывод на экран протокола работы пакетного файла. Далее команда set Name=a указывает, какое имя имеет файл с программой на Ассемблере, у нас это имя "а. Именно поэтому наш файл на Ассемблере обязан называться "a.asm". Теперь вы можете назвать его по-другому, одновременно вписав это имя в строку пакетного файла. Не советуем давать файлам длинные имена, содержащие какие-либо символы кроме букв и цифр. В следующей строках указываются пути к нужным для работы Ассемблера библиотекам, их менять нельзя. Главные команды, ради которых всѐ и затеяно, это ml и Link, которые задают трансляцию и сборку выполняемой программы (см. [1]). Эти команды вызываются с параметрами, о которых, вы, узнаете позже, так что пока в этих строчках ничего менять нельзя. Элементарные знания английского языка позволяют догадаться, что если при выполнении каждой из программ произошла ошибка, происходит переход на печать сообщения об этом и завершение работы. Если ошибки не произошло, программа ml создает файл a.obj и a.lst (вместо a может подставляется, как описано выше, и Ваше собственное имя программы. Файл с расширением lst – это листинг протокол работы программы-переводчика), хороший помощник программиста, а файл с расширением obj нужен программе Link. Она его обрабатывает и создает файл a.exe, укоторый и является исполняемым файлом. Посмотрите в Вашей папке _MyProg1 – там теперь присутствуют все эти файлы. А пакетный файл завершает свою работу, запуская на выполнение получившийся файл a.exe. Кстати, вы тоже можете это сделать, дважды кликнув по нему мышкой. Таким образом, если вам хочется держать водной папке несколько ассемблерных программ с разными именами, можно для выполнения каждой сделать свой пакетный файл (вписав в него ее имя, а можно использовать один файл, меняя в нем имя программы. Сразу хочу предупредить, что очень много файлов водной папке держать не следует в ней будет трудно ориентироваться, так как для каждого исходного ассемблерного файла создается еще ТРИ файла (.obj, .lst и .exe).
2. Работа в командной строке Это еще один способ выполнять ассемблерные программы. Возможно, кому-то он пригодится (может быть, не сейчас, а к концу семестра. При работе в командной строке у вас не будет для выполнения каждой программы открываться новое окошко, все будет делаться водном. Но сначала это окошко надо вызвать. Отыщите на своем компьютере программу "командная строка" (все программы" – "стандартные" или воспользуйтесь поиском. На экране появляется черное окошко с надписью о том, что у вас работает
Windows итак называемое "приглашение командной строки" – сообщение системы о том, что она готова к работе и ждет от вас команды. Этот способ общения появился на заре компьютерной эры, машины тогда были немногословны, так что приглашение выглядит как значок ">". Символы передним указывают папку (при работе с командной строкой ее по старинке принято называть "директория, в которой может вестись работа. Сначала нам надо "сменить директорию, те. перейти в ту папку, в которой находятся наши файлы. Команда смены директории называется cd (Change Directory). Чтобы подняться на уровень вверх, надо набрать cd.. Для подъма на два уровня можно набрать команду 2 раза или объединить водной команде. Чтобы перейти на другой диск (это понадобится, если файлы находятся на флешке), надо набрать его имя и двоеточие (посмотрите "мой компьютер, какое имя дано вашей флешке), например
F:
. Чтобы спуститься в нужную директорию, надо набрать cd имя директории. Можно все эти команды собрать воедино, выписав путь к нужной директории водной строке, но обычно легче выполнять команды по очереди, так как после каждой команды меняется приглашение, вы видите, в какой директории оказались. Иногда полезна команда dir – она показывает содержимое текущего каталога. Особо продвинутые могут собрать нужные команды для смены директории в собственный пакетный файл (только расположить его надо в правильной папке. Можно сразу открыть окно "командная строка" в нужной папке. Для этого надо навести мышку на нужную папку и, удерживая клавишу SHIFT, нажать правую кнопку мыши. В появившемся меню выбрать пункт "Открыть окно команд. Итак, в результате этой деятельности перед нами черный экран консоли, где выписан путь к папке с программой на Ассемблере и приглашение к вводу, например c:\masm 6.14\_Exampes\_Myprog1>
В этой строке можно набирать команды, они будут выполняться. Собственно, мы уже набирали команду. Исполняемый файл с расширением exe, который получился в результате трансляции ассемблерной программы, также является командой. Если набрать его имя в этой строке (без расширения, он выполнится. Так как окно не исчезнет, результат работы не пропадет. Пакетный файл также рассматривается как команда, так что, если набрать его имя (можно и без расширения, выполнятся содержащиеся в нем команды. Однако, просто набрав имя имеющегося у нас пакетного файла, мы ничего не приобретем, для запуска разных программ также придется менять файл. Можно изменить пакетный файл один раз, настроив его для запуска любой программы. Для этого надо в нем изменить вторую строку, где прописывается имя файла, на
set Name=%1 Теперь пакетный файл надо запускать с параметром, например, если программа на Ассемблере содержится в файле prog1.asm, надо написать makeit prog1 Следует учесть, что измененный таким образом пакетный файл нельзя запускать "старым способом, кликнув по нему мышью, так как имя программы в нем не указано. Работа в командной строке расширяет наши возможности – можно легко работать водном окне с файлами из разных папок (перед именем файла пишем путь к нему. При работе в командной строке удобно пользоваться клавишами "стрелки. Они позволяют быстро продублировать в новой строке команды, которые набирались ранее. Таким образом, можно дублировать старые команды, меняя в них, например, название файла.
2. Представление данных Вспомним, что еще в школе узнали вся информация в памяти компьютера хранится в двоичном виде. Числа и символы, да и сами команды, имеют одинаковое двоичное представление, "внутри" они неразличимы. Каждому символу сопоставляется число размером в байт – его код. В памяти компьютера хранится двоичное представление этого числа. В программе на Ассемблере записать символ можно как в виде символа в апострофах, таки в виде числа. Целые числа могут иметь размер в байт, слово (2 байта, двойное слово (4 байта) и четверное слово
(8 байт. Положительные числа представляются в двоичной системе счисления в прямом коде, отрицательные в дополнительном коде [1, п. Таким образом, исследуя содержимого некоторого байта, невозможно определить, находится в нем символ, положительное или отрицательное число, или это только часть какого-то большого (например, четырехбайтового числа. Как "поймет" это представление компьютер зависит от программиста. Например, байт 11001000 2
можно трактовать как беззнаковое число 200, как знаковое число –56 или как символ 'ИВ качестве примера рассмотрим программу, которая будет выводить числа и символы с помощью макрокоманд вывода. Почему такое название "макокоманды"? Это понятие мы будем изучать ближе к концу курса. Пока лишь скажем, что, так как в Ассемблере (в отличие от языков высокого уровня) нет хороших команд ввода и вывода, для Вас специально подготовлено несколько наборов команд для ввода и вывода разного вида данных. Вот эти-но наборы и вызываются макрокомандами. Имена макрокомандам дал их автор [1], напомним, что в именах большие и маленькие буквы различаются. Будем использовать следующие макрокоманды вывода [1, разд. 6.5.1]
outchar операнд Операндом может быть символ, переменная или число размером в один байт. Если операнд – символ, он выводится на экран, если операнд – число, на экран выводится символ с соответствующим кодом в алфавите. Аналогично трактуется значение переменной. о операнд и
outword операнд Как уже говорилось, у некоторых макрокоманд могут быть и "красивые" синонимы, например,
Outint
. Операндом может быть число или переменная любого допустимого размера. Операнд трактуется как десятичное число (знаковое для outint и беззнаковое для outword) и выводится на экран. Операндом может быть и символ. Напомним, что символ для Ассемблера – его код, то есть число размером в байт. Таким образом, если, например, выводить этой командой символ 'A', получим его код, те. ord('A'). У этих команд есть модификации. Во-первых, можно в конце приписать ln, тогда после вывода числа будет переведена строка (по аналогии с Паскалем. Во-вторых, можно через запятую указать второй необязательный операнд размером в байт, он будет определять количество позиций, отводимых под число на экране. Внимание Этими командами можно выводить только ОДНО число. Команда outword 12,3 понимается как вывод числа 12 в трех позициях на экране. Для вывода нескольких чисел надо использовать несколько макрокоманд или выполнять макрокоманду в цикле. Ну и для самых "продвинутых можно использовать вывод с текстом-пояснением. В этих командах существует третий (необязательный) операнд, строка в кавычках, которая выводится на экран перед числом. Например, если A=52, макрокоманда outint
A,4,'A=' выведет A= 52. Советуем аккуратно пользоваться этим дополнительными операндами в этих командах. Лучше, пока вы не чувствуете себя "продвинутым, выводить все по отдельности, использовать команды с одним операндом. Дело в том, что, так как Ассемблер может трактовать буквы как числа, если вы перепутаете порядок операндов, ошибка зафиксирована не будет, но выведено будет неизвестно что. Также нив коем случае нельзя опускать второй операнд. Макрокоманда outint A,'A=' зафиксирует ошибку текст стоит на месте длины поля вывода, надо писать outint A,,'A='. Чтобы покончить с командами вывода, напомним о макрокомандах вывода строки outstr и out-
strln
. Операндом является текст в апострофах или в двойных кавычках. Для перевода строки используется макрокоманда newline (аналог WriteLn в Паскале. Итак, обещанная программа
include console.inc
COMMENT * Программа показывает, что одно и тоже число разные макрокоманды вывода будут выводить по-разному
*
.code
Start:
ConsoleTitle " Вывод чисел"
outcharln 200
outcharln
outwordln 'И'
exit
end Start Исследуем выведенное. Первая макрокоманда трактует число 200 как код символа и выводит букву 'И. Следующая макрокоманда также трактует 'И' как код символа и выводит туже букву. А вот последняя макрокоманда трактует букву 'И' как целое без знака и, соответственно, выводит число 200. Если мы используем команды
outintln -100
outwordln -100 то получим знаковое число –10 и беззнаковое (байтовое) число 4294967196.
  1   2   3   4   5   6


написать администратору сайта