Основные сведения о языке Ассемблер — КиберПедия 

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Основные сведения о языке Ассемблер

2017-12-21 246
Основные сведения о языке Ассемблер 0.00 из 5.00 0 оценок
Заказать работу

Введение

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

В тех, случаях, когда необходимо построить наиболее компактный машинный код и создать самые быстродействующие программы, используют машинно-ориентированные языки [1].

Преобразование исходного машинно-ориентированного описания в машинный код осуществляется специальной программой-компилятором, называемой Ассемблер. Машинно-ориентированный язык, в терминах которого готовится исходно описание, называется Ассемблер

Виды ассемблера:

Ассемблерыдля DOS

НаиболееизвестнымиассемблерамидляоперационнойсистемыDOSявлялисьBorlandTurboAssembler (TASM), MicrosoftMacroAssembler (MASM) иWatcomAssembler (WASM). Такжевсвоёвремябылпопуляренпростойассемблер A86.

Windows.

ПрипоявленииоперационнойсистемыWindowsпоявилосьрасширение TASM, именуемое TASM 5+ (неофициальныйпакет, созданныйчеловекомсником!tE), позволившеесоздаватьпрограммыдлявыполнениявсредеWindows. Последняяизвестнаяверсия TASM — 5.3, поддерживающаяинструкции MMX, наданныймоментвключенав Turbo C++ Explorer. Ноофициальноразвитиепрограммыполностьюостановлено. ПоследнееразвитиекомпиляторполучилблагодарясовременнойсредеразработкиTASM Visual. Среданеофициальная, носеёпомощьюработаскомпилятороммногократноупрощается [2].

Microsoftподдерживаетсвойпродуктподназванием MicrosoftMacroAssembler. Онапродолжаетразвиватьсяипосейдень, последниеверсиивключенывнаборы DDK. Новерсияпрограммы, направленнаянасозданиепрограммдля DOS, неразвивается. Крометого, СтивенХатчессонсоздалпакетдляпрограммированияна MASM подназванием «MASM32».

GNU иLinux.

Проблема: Наименьшая единица информации, которая обычно используется в различных языках программирования, - байт. Но при теоретических изысканиях и в практической деятельности (например, в сетевых технологиях, цифровой технике) возникают ситуации, требующие работы с информацией на более низком уровне – на уровне битов. Для этого существуют специальные битовые операции, которые доступны в языках низкого уровня (ассемблерах) [1].

Цель работы: изучить основные понятия языка Ассемблер, теорию и применение битовых операций на этом языке.

Задачи работы:

1. Изучить основные сведения о языке Ассемблер (структура и компоненты программы на Ассемблере, формат команд, представление данных в памяти, режимы адресации и др.);

2. Изучить виды битовых операций, формат и логику работы логических команд Ассемблера;

3. Рассмотреть примеры использования логических команд в Ассемблере;

4. Решить индивидуальную задачу на применение логических битовых операций в Ассемблере;

5. Сформулировать вывод о проделанной работе.

 

 

Теоретический раздел

Предложения.

Программа на ассемблере состоит из предложений, каждое из которых записывается на отдельной строке, <предложение>… Переносить предложение на следующую строку или записывать два предложения на одной строке нельзя.

Директивы определения данных.

Для того чтобы в программе на ASM зарезервировать ячейки памяти под переменные и константы, необходимо воспользоваться директивами определения данных- с названиями db- (описывает данные размером в байт),

dw-(размером в слово), dd- (размером в двойное слово).

В простейшем случае в директивеdb,dwилиdd описывается одна константа, которой дается имя для последующих ссылок на неё. По этой директиве ассемблер формирует машинное представление константы и записывает в очередную ячейку памяти. Адрес этой ячейки становиться значением имени: все вхождения имени в программу ассемблер будет заменять на этот адрес.

Имена, указанные в директивах db, dwиdd, называются именами переменных (в отличии от меток- имени команд).

В ASM числа записываются в нормальном виде в системах счисления с основанием 10, 16, 8 или 2.

Десятичные числа записываются как обычно, за шестнадцатиричным числом ставится буква (если число начинается с “цифры” А, В, …, F, то вначале обязателен 0), за восьмиричным числом- буква qили о, за двоичным числом- буква b.

Константы-символы описываются в директиве двояка: указывается либо код символа (целое от 0 до 255), либо сам символ в кавычках (одинарных или двойных); в последнем случае ассемблер сам заменит символ на его код.

Примеры использования битовых операций.

Примеры с использованием командыOR:

Установить 3 и 0 биты в регистре al, остальные биты не изменять.

oral, 00001001b

Допустим:

al, 11000011, тогда 3 и 0 биты будут равняться 1,т.к.:

Таким образом, операция OR служит для установки бита в 1.

 

Пример с использованием командыAND:

Сбросить 4 и 6 биты в регистре al, остальные биты не изменять.

andal, 10101111

Допустим:

al, 1101000, тогда 4 и 6 биты сбросятся до 1, т.к.:

 

Таким образом, операция ANDслужит для сбрасывания каких-то определённых битов.

 

Пример с использованием команды NOT:

Посчитать число единицы в регистре al, рассматривая байт, как набор бит.

movcx, b:число сдвига

xorbl, bl:обнуление Bl

LL: shlal, 1:сдвиг влево на один разряд

jncNO:переход, если нет переноса

incbl:иначе увеличитьBl

NO: loopLL:возврат, если сх 0

Получается, что команда NOTсчитает число единиц в регистре, при этом рассматривая байт, как набор битов.

 

Пример с использованием команды XOR:

Инвертировать 2 и 4 биты в регистре al, остальные биты не изменять.

xoral, 00010100b

Допустим al, 00001111

Из этого следует, что команда XORинвертирует биты в регистре.

 

Пример с использованием команды TEST:

Дан массив из 10 байт. Все байты имеют нулевые старшие биты. Необходимо каждый байт содержащий единицу в нулевом бите дополнить до чётного числа единиц установкой седьмого бита.

data segment

NB db 04h, 07h, 14h, 23h, 04h, 38h, 3Fh, 2Ah0Dh, 34h

data ends

code segment

assumecs: code, ds:data

start: mov ax, data

movds, ax;загрузитьсегментныйадресданных

leabx, NB;bx-текущий адрес массиваNB

movcx, 10;cx-счетчик числа интерации

BEG: moval, [bx];считать очередной байт массива

testal, 1b;установлен ли бит 0?

jzBITOCLR;нет, бит 0 сброшен

;бит 0 установлен

testal, ffh;четное число единиц?

jpOK;да, больше ничего делать не надо

oral, 80h;нечетное дополнить до четного

jmpshortOK;бит 0 сброшен

BITOCLR: testal, ffh;четноечислоединиц?

jnpOK;нет, больше делать не нужно

oral, 80h;нечетное дополнить до четного

OK: mov [bx], al;записать измененный байт массива

loopBEG

QUIT: movax, 4c00h;код завершения 0

int 21h;выход в DOS

codeends

endstart

 

 

Практический раздел

2.1 Индивидуальное задание практической части

Задача:

Дан массив из 8 байт. Рассматривая его как массив логических значений (trueесть не нулевые биты в байте, falseвсе биты нулевые), вычислить логическую формулу:

Решение:

include io.asm

data segment

masdb 8 dup (?);исходный массив

xdb 8 dup (?)

fdw?

data ends

code segment

assumeCS:code,ds:data

start: movax,data

movds,ax;загрузить сегментный адрес данных

;ввод элементов массива

movcx,8

movbx, offsetmas;перенос первых байтов массива в ячейку bx

m4: inintax;ввод знака целого числа

mov [bx],al;переходим в [bx],адрес которого лежит в al

incbx;увеличение значенияbx в регистре

loopm4;возвращение на метку m4

mov cx,8

movbx,offsetmas;вbxзаписывается адрес начала mas

xorsi,si; обнулениеsi

m3: moval,[bx];вal записывается начала массива [bx]

cmpal,0;сравнение al с 0

jem1;прыжок на метку m1

movx[si],1;записывание 1 в x[si]

jmpm2;выполнение условного перехода на метку m2

m1: movx[si],0;записывание 0 в x[si]

; outintx[si],2;вывод целого числа

m2: incbx;увеличение значенияbxв регистре

incsi;увеличение значения siв регистре

loopm3;возвращение к метке m3

xoral,al;обнулениеal

moval,x[7];занесли в al значение х[7]

andal,x[6];х[7]and x[6]

andal,x[1];х[6] and [1]

movah,x[6];занесли в аh значение х[6]

andah,x[4];х[6] and х[4]

andah,x[2];х[4] and х[2]

andah,x[1];х[2] and х[1]

andah,x[0];х[1] and х[0]

movbl,x[7];занесли в bl значение х[7]

andbl,x[6];х[7] and х[6]

andbl,x[3];х[6] and х[3]

andbl,x[1];х[3] and х[1]

oral,ah

oral,bl

cbw;расширение байта до ворда

movf,ax;переходим с ах на f

outintf;вывод результата f

finish;завершение программы

;стандартное завершение программы

;mov ah,4ch

;int 21h

code ends

endstart

 

 

 

Заключение

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

Повторили виды битовых операций,логику и формат логических команд Ассемблера.

Рассмотрели примеры использования логических команд в Ассемблере.

Сделали решение и описание задачи.Предоставили скрин индивидуального задания с применением логических битовых операций в Ассемблере.

Все поставленные задачи решены.

 

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

1. http://progopedia.ru/language/assembler/

2. Аблязов Р.- Программирование на Ассемблере на платформе х86,х64, 2011 г.

3. Столяров А.- Программирование на языке Ассемблера Nasm для OCUnix, 2011 г.

4. Владислав Пирогов.- Ассемблер и дизассемблирование. 2006 г.,464 стр.

5. Калашников О.А.- Ассемблер? Это просто!, 2008 г.

6. https://bobych.ru/lection/informatika/glava2.html

7. Вострикова З.П.- Программирование на языке ассемблера ЕС ЭВМ. М.: Наука, 1985г.

8. Юров В., Хорошенко С., Assembler: учебный курс. 2000 г., 672 стр.

Введение

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

В тех, случаях, когда необходимо построить наиболее компактный машинный код и создать самые быстродействующие программы, используют машинно-ориентированные языки [1].

Преобразование исходного машинно-ориентированного описания в машинный код осуществляется специальной программой-компилятором, называемой Ассемблер. Машинно-ориентированный язык, в терминах которого готовится исходно описание, называется Ассемблер

Виды ассемблера:

Ассемблерыдля DOS

НаиболееизвестнымиассемблерамидляоперационнойсистемыDOSявлялисьBorlandTurboAssembler (TASM), MicrosoftMacroAssembler (MASM) иWatcomAssembler (WASM). Такжевсвоёвремябылпопуляренпростойассемблер A86.

Windows.

ПрипоявленииоперационнойсистемыWindowsпоявилосьрасширение TASM, именуемое TASM 5+ (неофициальныйпакет, созданныйчеловекомсником!tE), позволившеесоздаватьпрограммыдлявыполнениявсредеWindows. Последняяизвестнаяверсия TASM — 5.3, поддерживающаяинструкции MMX, наданныймоментвключенав Turbo C++ Explorer. Ноофициальноразвитиепрограммыполностьюостановлено. ПоследнееразвитиекомпиляторполучилблагодарясовременнойсредеразработкиTASM Visual. Среданеофициальная, носеёпомощьюработаскомпилятороммногократноупрощается [2].

Microsoftподдерживаетсвойпродуктподназванием MicrosoftMacroAssembler. Онапродолжаетразвиватьсяипосейдень, последниеверсиивключенывнаборы DDK. Новерсияпрограммы, направленнаянасозданиепрограммдля DOS, неразвивается. Крометого, СтивенХатчессонсоздалпакетдляпрограммированияна MASM подназванием «MASM32».

GNU иLinux.

Проблема: Наименьшая единица информации, которая обычно используется в различных языках программирования, - байт. Но при теоретических изысканиях и в практической деятельности (например, в сетевых технологиях, цифровой технике) возникают ситуации, требующие работы с информацией на более низком уровне – на уровне битов. Для этого существуют специальные битовые операции, которые доступны в языках низкого уровня (ассемблерах) [1].

Цель работы: изучить основные понятия языка Ассемблер, теорию и применение битовых операций на этом языке.

Задачи работы:

1. Изучить основные сведения о языке Ассемблер (структура и компоненты программы на Ассемблере, формат команд, представление данных в памяти, режимы адресации и др.);

2. Изучить виды битовых операций, формат и логику работы логических команд Ассемблера;

3. Рассмотреть примеры использования логических команд в Ассемблере;

4. Решить индивидуальную задачу на применение логических битовых операций в Ассемблере;

5. Сформулировать вывод о проделанной работе.

 

 

Теоретический раздел

Основные сведения о языке Ассемблер

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

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

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

Данный тип языков получил свое название от названия транслятора (компилятора) с этих языков — ассемблера (англ. assembler — сборщик).

Использование термина «язык ассемблера» также может вызвать ошибочное мнение о существовании единого языка низкого уровня, или хотя бы стандарта на такие языки [7].

Типичными командами языка ассемблера являются (большинство примеров даны для Intel-синтаксиса архитектуры x86):

Команды пересылки данных (mov, lea и т. д.)

Арифметичекие команды (add, sub, imul и т. д.)

Логические и побитовые операции (or, and, xor, shr и т. д.)

Команды управления ходом выполнения программы (jmp, loop, ret и т. д.)

Команды вызова прерываний (иногда относят к командам управления): int, into.

Команды ввода/вывода в порты (in, out).

Для микроконтроллеров и микрокомпьютеров характерны также команды, выполняющие проверку и переход по условию, например:

cbne — перейти, если не равно;

dbnz — декрементировать, и если результат ненулевой, то перейти;

cfsneq — сравнить, и если не равно, пропустить следующую команду.

Достоинства:

-язык ассемблера позволяет писать самый быстрый и компактный код, какой вообще возможен для данного процессора.

-объём кода. Сокращение объёма кода также не редко повышает скорость выполнения программы.

-язык ассемблера используется для создания “прошивок”BIOS.

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

Недостатки:

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

-отсутствует переносимость программ на компьютеры с другой архитектурой и системой команд [8].

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

· Оптимизация критичных к скорости участков программ в программах на языках высокого уровня, таких как C++ или Pascal. Это особенно актуально для игровых приставок, имеющих фиксированную производительность, и для мультимедийных кодеков, которые стремятся делать менее ресурсоёмкими и более быстрыми.

· Создание операционных систем (ОС) или их компонентов. В настоящее время подавляющее большинство ОС пишут на более высокоуровневых языках (в основном на Си — языке высокого уровня, который специально был создан для написания одной из первых версий UNIX). Аппаратно зависимые участки кода, такие как загрузчик ОС, уровень абстрагирования от аппаратного обеспечения (hardwareabstractionlayer) и ядро, часто пишутся на языке ассемблера. Фактически, ассемблерного кода в ядрах Windows или Linux совсем немного, поскольку авторы стремятся обеспечить переносимость и надёжность, но, тем не менее, он там присутствует. Некоторые любительские ОС, такие как MenuetOS и KolibriOS, целиком написаны на языке ассемблера. При этом MenuetOS и KolibriOS помещаются на дискету и содержат графический многооконный интерфейс.

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

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

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

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


Поделиться с друзьями:

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

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.01 с.