Когда был создан ассемблер(assembler) и машинный язык? Язык программирования ассемблер Язык ассемблер для разных процессоров.


Язык программирования

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

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

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

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

Достоинства и недостатки

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

Синтаксис

Общепринятого стандарта для синтаксиса языков ассемблера не существует. Однако, существуют стандарты де-факто - традиционные подходы, которых придерживаются большинство разработчиков языков ассемблера. Основными такими стандартами являются Intel-синтаксис и AT&T-синтаксис.

Общий формат записи инструкций одинаков для обоих стандартов:

`[метка:] опкод [операнды] [;комментарий]`

Опкод - непосредственно мнемоника инструкции процессору. К ней могут быть добавлены префиксы (повторения, изменения типа адресации и пр.). В качестве операндов могут выступать константы, названия регистров, адреса в оперативной памяти и пр.. Различия между стандартами Intel и AT&T касаются, в основном, порядка перечисления операндов и их синтаксиса при различных методах адресации.

Используемые мнемоники обычно одинаковы для всех процессоров одной архитектуры или семейства архитектур (среди широко известных — мнемоники процессоров и контроллеров Motorola, ARM, x86). Они описываются в спецификации процессоров.

Например, процессор Zilog Z80 наследовал систему команд Intel i8080, расширил ее и поменял мнемоники (и обозначения регистров) на свой лад. Например, сменил интеловские mov на ld . Процессоры Motorola Fireball наследовали систему команд Z80, несколько её урезав. Вместе с тем, Motorola официально вернулась к мнемоникам Intel. и в данный момент половина ассемблеров для Fireball работает с интеловскими мнемониками, а половина с мнемониками Zilog.

Директивы

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

  • определение данных (констант и переменных)
  • управление организацией программы в памяти и параметрами выходного файла
  • задание режима работы компилятора
  • всевозможные абстракции (т.е. элементы языков высокого уровня) - от оформления процедур и функций (для упрощения реализации парадигмы процедурного программирования) до условных конструкций и циклов (для парадигмы структурного программирования)
  • макросы

Происхождение и критика термина «язык ассемблера»

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

Язык ассемблера в русском языке часто называют «ассемблером» (а что-то связанное с ним - «ассемблерный»), что, согласно английскому переводу слова, неправильно, но вписывается в правила русского языка. Однако, сам ассемблер (программу) тоже называют просто «ассемблером», а не «компилятором языка ассемблера» и т. п.

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

Элементы синтаксиса:

Примеры:

Hello, World!:

Пример для версий Intel x86 (IA32)

mov ax , cs mov ds , ax mov ah , 9 mov dx , offset Hello int 21h xor ax , ax int 21h Hello : db "Hello World !", 13, 10, "$"

Hello, World!:

Пример для версий Amiga

move . l #DOS move . l 4. w , a6 jsr - $0198(a6 ) ; OldOpenLibrary move . l d0 , a6 beq . s . Out move . l #HelloWorld , d1 A ) moveq #13, d2 jsr - $03AE (a6 ) ; WriteChars B ) jsr - $03B4 ; PutStr move . l a6 , a1 move . l 4. w , a6 jsr - $019E (a6 ) ; CloseLibrary . Out rts DOS dc . b "dos.library" , 0 HelloWorld dc . b "Hello World!" , $A , 0

Hello, World!:

Пример для версий AtariST

move . l #helloworld , - (A7 ) move #9, - (A7 ) trap #1 addq . l #6, A7 move #0, - (A7 ) trap #1 helloworld : dc . b "Hello World !", $0d , $0a , 0

Hello, World!:

Пример для версий Intel x86 (IA32)

NASM Linux , используется Intel синтаксис. Компиляция и линковка:

  • nasm –f elf –o hello.o hello.asm
  • ld -o hello hello.o

SECTION . data msg db "Hello , world !", 0xa len equ $ - msg SECTION . text global _start _start : ; Точка входа в программу mov eax , 4 ; "write" системный вызов mov ebx , 1 mov ecx , msg ; Указатель на данные mov edx , len ; Количество данных int 0x80 ; Вызов ядра mov eax , 1 ; "_exit" системный вызов mov ebx , 0 ; Возвращаем 0 (все хорошо) int 0x80 ; Вызов ядра

Hello, World!:

Пример для версий PDP-8

/ — комментарии.

/ Hello World на ассемблере для DEC PDP - 8 * 200 hello , cla cll tls / tls устанавливает флаг печати. tad charac / создает индексный регистр dca ir1 / для получения символов tad m6 / настроить счетчик для dca count / ввода символов. next , tad i ir1 / получить символ. jms type / его тип. isz count / сделать что нибудь еще? jmp next / нет, ввести другой символ hlt type , 0 / подпрограмма type tsf jmp . - 1 tls cla jmp i type charac , . / используется в качестве начального значения ir1 . 310 / H 305 / E 314 / L 314 / L 317 / O 254 / , 240 / 327 / W 317 / O 322 / R 314 / L 304 / D 241 / ! m6 , - 15 count , 0 ir1 = 10 $

Hello, World!:

Пример для версий PDP-11

Программа написана на макроассемблере MACRO-11 Для компиляции и запуска этой программы в ОС RT-11 командуем:

MACRO HELLO

ERRORS DETECTED: 0

LINK HELLO -- Линкуем. RUN HELLO -- Запускаем

TITLE HELLO WORLD ; Название . MCALL . TTYOUT ,. EXIT HELLO :: MOV #MSG , R1 ; Начальный адрес строки 1$: MOVB (R1 ) + , R0 ; Получаем следующий символ BEQ DONE ; Если ноль, выходим из цикла . TTYOUT ; Иначе печатаем символ BR 1$ ; Повтор цикла DONE : . EXIT MSG : . ASCIZ / Hello , world !/ ; Строка Hello , world ! . END HELLO ; Конец программы HELLO

Hello, World!:

Пример для версий System/360 , System/370

IBM System/360/370/390 Basic Assembler Language .

// EXEC ASSEMBLY START MAIN BALR 2 , 0 USING * , 2 OPEN PRINT MVC BUF , HW PUT PRINT CLOSE PRINT EOJ HW DC CL132 " HELLO WORLD " BUF DS CL132 PRINT DTFPR IOAREA1 = BUF , DEVADDR = SYSLST , BLKSIZE = 132 , * DEVICE = 3203 , CONTROL = YES , PRINTOV = YES END MAIN /* // EXEC LNKEDT // EXEC /* /&

Hello, World!:

Пример для версий Apple II

* HELLO WORLD FOR 6502 APPLE ][ * ******************************** STROUT EQU $DB3A LDY #> HELLO LDA #< HELLO JMP STROUT HELLO ASC "HELLO WORLD !", 00

Hello, World!:

Пример для версий PDP-10

CHTTYO — весь ввод/вывод осуществляется с помощью каналов ввода/вывода. Лучше всего сделать символические имена для тех каналов, которые вы используете, и начинать их с CH. Определите эти имена с помощью MIDAS оператора == .

CALL — это символическое обозначение для вызова системного вызова. Его формат: .CALL .

OPEN открывает канал ввода/вывода для использования. Требует два параметра — номер канала и имя устройства в SIXBIT.

LOSE %LSFIL — системный вызов, который печатает сообщение об ошибке ввода/вывода, если вдруг она произошла.

IOT — системный вызов, который фактически занимается вводом/выводом. В качестве параметра нужно указать канал и адрес, содержащий код символа для вывода. Например, “H представляет H .

TITLE PRINTHELLO A = 1 CHTTYO == 1 ; Канал для вывода. START : ; Открытие TTY канала. . CALL [ SETZ ? SIXBIT / OPEN / [. UAO , CHTTYO ] ? [ SIXBIT / TTY / ] ((SETZ ))] . LOSE %LSFIL . IOT CHTTYO ,[ "H ] ; Печать HELLO WORLD посимвольно. . IOT CHTTYO ,[ "E ] . IOT CHTTYO ,[ "L ] . IOT CHTTYO ,[ "L ] . IOT CHTTYO ,[ "O ] . IOT CHTTYO ,[ ^M ] ; Символ новой строки . IOT CHTTYO ,[ "W ] . IOT CHTTYO ,[ "O ] . IOT CHTTYO ,[ "R ] . IOT CHTTYO ,[ "L ] . IOT CHTTYO ,[ "D ] . VALUE ; Программка, остановись :) END START

Числа Фибоначчи:

Пример для версий MIPS32

Эмулятор MARS. Вывод консоли MARS:

The Fibonacci numbers are: 1 1 2 3 5 8 13 21 34 55 89 144 -- program is finished running --

Программа выводит 15 чисел Фибоначчи. Количество чисел можно изменить в секции.data.

Data space: .asciiz " " head : .asciiz "The Fibonacci numbers are:\n" fib: .word 0 : 15 size : .word 15 .text main: la $t0 , fib la $t5 , size lw $t5 , 0 ($t5 ) li $t2 , 1 add.d $f0 , $f2 , $f4 sw $t2 , 0 ($t0 ) sw $t2 , 4 ($t0 ) addi $t1 , $t5 , - 2 loop : lw $t3 , 0 ($t0 ) lw $t4 , 4 ($t0 ) add $t2 , $t3 , $t4 sw $t2 , 8 ($t0 ) addi $t0 , $t0 , 4 addi $t1 , $t1 , - 1 bgtz $t1 , loop la $a0 , fib move $a1 , $t5 jal print li $v0 , 10 syscall print : add $t0 , $zero , $a0 add $t1 , $zero , $a1 la $a0 , head li $v0 , 4 syscall out : lw $a0 , 0 ($t0 ) li $v0 , 1 syscall la $a0 , space li $v0 , 4 syscall addi li $v0 , 1 la $a0 , ($t2 ) syscall la $a0 , string1 li $v0 , 4 syscall mult $t1 , $t2 mflo $t1 li $v0 , 1 la $a0 , ($t1 ) syscall la $a0 , string2 li $v0 , 4 syscall addiu $t2 , $t2 , 1 beq $t2 , 16 , endloop j loop endloop: li $v0 , 10 syscall



Ассе́мблер (asm, assembler); от англ. assemble - собирать, монтировать) - язык программирования низкого уровня, вспомогательная программа в составе операционной системы для автоматического перевода исходной программы, подлежащей выполнению на компьютере, на машинный язык; вид транслятора . Понятия ассемблера отражают архитектуру электронно-вычислительной машины. Ассемблер - символьная форма записи машинного языка, использование которой упрощает написание машинных программ. Для одного и того же компьютера могут быть разработаны разные языки ассемблера. В отличие от языков высокого уровня, в котором проблемы реализации алгоритмов скрыты от разработчиков, язык ассемблера тесно связан с системой команд компьютера. Ассемблер обеспечивает доступ к регистрам, указание методов адресации и описание операций в терминах команд процессора. Он может содержать средства более высокого уровня: встроенные и определяемые макрокоманды, соответствующие нескольким машинным командам, автоматический выбор команды в зависимости от типов операндов, средства описания структур данных.

Особенности ассемблера

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

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

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

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

В таком случае используют модульную компиляцию, когда каждый файл программы компилируется в объектный модуль, которые затем линкуются (связываются) в готовую программу. Объектные файлы представляют собой блоки машинного кода и данных, с неопределенными адресами ссылок на данные и процедуры в других объектных модулях, а также список своих процедур и данных. Линкер собирает код и данные каждого объектного модуля в программу, вычисляет и заполняет адреса перекрестных ссылок между модулями. В процессе линковки происходит связывание программы со статическими и динамическими библиотеками (являющихся архивами объектных файлов).При модульной компиляции каждый объектный модуль программы может быть написан на своем языке программирования и скомпилирован своим компилятором (ассемблером).

1. Когда и кем были изобретены счетно-перфорационные машины? Какие задачи на них решались?

2. Что такое электромеханическое реле? Когда создавались релейные вычислительные машины? Каким быстродействием они обладали?
3. Где и когда была построена первая ЭВМ? Как она называлась?
4. Какова роль Джона фон Неймана в создании ЭВМ?
5. Кто был конструктором первых отечественных ЭВМ?
6. На какой элементной базе создавались машины первого поколения? Каковы были их основные характеристики?
7. На какой элементной базе создавались машины второго поколения? В чем их преимущества по сравнению с первым поколением ЭВМ?
8. Что такое интегральная схема? Когда были созданы первые ЭВМ на интегральных схемах? Как они назывались?
9. Какие новые области применения ЭВМ возникли с появлением машин третьего поколения?
10. Что такое микропроцессор? Когда и где был создан первый микропроцессор?
11. Что такое микроЭВМ и персональный компьютер?
12. Какие типы ПК наиболее распространены в мире?
13. Что такое суперкомпьютер?
14. Что такое кластерные системы ПК?
15. В чем особенность компьютеров пятого поколения?

Назовите первое вычислительное устройство. Абак Калькулятор Арифмометр русские счеты Какую идею выдвинул в середине

19 века английский математик Чарльз Бэббидж?

Идею создания программно управляемой счетной машины, имеющей арифметическое устройство, устройство управления, а также устройство ввода и печати

Идею создания сотового телефона

Идею создания роботов, управляемых компьютером

В каком году и где была создана первая ЭВМ на основе электронных ламп?

1945 год, США

1944 г, Англия

1946 г, Франция

На какой базе были созданы ЭВМ третьего поколения?

Интегральные схемы

полупроводники

электронные лампы

сверхбольшие интегральные схемы

Как назывался первый персональный компьютер?

Назовите центральное устройство компьютера.

Процессор

Системный блок

Блок питания

Материнская плата

Процессор обрабатывает информацию представленную:

В десятичной системе счисления

На английском языке

На русском языке

На машинном языке (в двоичном коде)

Для ввода числовой и текстовой информации используется

Клавиатура

Сканер используется для…

Для ввода в компьютер изображений и текстовых документов

Для рисования на ней специальной ручкой

Перемещения курсора на экране монитора

Получения голографических изображений

10. Какой тип принтера целесообразно использовать для печати финансовых документов?

Матричный принтер

Струйный принтер

Лазерный принтер

Какой тип принтера целесообразно использовать для печати рефератов?

Матричный принтер

Струйный принтер

Лазерный принтер

Какой тип принтера целесообразно использовать для печати фотографий?

Матричный принтер

Струйный принтер

Лазерный принтер

При несоблюдении санитарно – гигиенических требований компьютера вредное влияние на здоровье человека может оказать…

Монитор на электронно – лучевой трубке

Монитор на жидких кристаллах

Плазменные панели

При выключении компьютера вся информация стирается из…

Оперативной памяти

Жесткого диска

Лазерного диска

В каком устройстве компьютера осуществляется хранение информации?

Внешняя память;

процессор;

Оптические дорожки имеют меньшую толщину и размещены более плотно на …

Цифровом видеодиске (DVD – диске)

Компакт диске (CD – диске)

В устройства ввода входят…

В устройства вывода входят…

Клавиатура, мышь, джойстик, световое перо, сканер, цифровая камера, микрофон

Звуковые колонки, монитор, принтер, наушник

Жесткий диск, процессор, модули памяти, материнская плата, дискета

Программой называется…

Компьютерная программа может управлять работой компьютера, если она находится…

В оперативной памяти

На гибком диске

На жестком диске

На CD – диске

Данные – это…

Последовательность команд, которую выполняет компьютер в процессе обработки данных

Информация, представленная в цифровой форме и обрабатываемая на компьютере

Данные, имеющие имя и хранящиеся в долговременной памяти

Файл – это…

Текст распечатанный на компьютере

Информация, представленная в цифровой форме и обрабатываемая на компьютере

Программа или данные, имеющие имя и хранящиеся в долговременной памяти

При быстром форматировании гибкого диска …

Производится очистка каталога диска

Стираются все данные

Производится дефрагментация диска

Производится проверка поверхности диска

При полном форматировании гибкого диска…

стираются все данные

производится полная проверка диска

производится очистка каталога диска

диск становится системным

В многоуровневой иерархической файловой системе...

Файлы хранятся в системе, представляющей собой систему вложенных папок

Файлы хранятся в системе, которая представляет собой линейную последовательность

История развития вычислительной техники:

1. Назовите первое вычислительное устройство.
1) Абак
2) Калькулятор
3) Арифмометр
4) русские счеты

2. Какую идею выдвинул в середине 19 века английский математик Чарльз Бэббидж?
1) Идею создания программно управляемой счетной машины, имеющей арифметическое устройство, устройство управления, а также устройство ввода и печати
2) Идею создания сотового телефона
3) Идею создания роботов, управляемых компьютером
3. Назовите первого программиста вычислительных машин.
1) Ада Лавлейс
2) Сергей Лебедев
3) Билл Гейтс
4) Софья Ковалевская

4. В каком году и где была создана первая ЭВМ на основе электронных ламп?
1) 1945 год, США
2) 1950, СССР
3) 1944 г, Англия
4) 1946 г, Франция

5. На какой базе были созданы ЭВМ третьего поколения?
1) Интегральные схемы
2) полупроводники
3) электронные лампы
4) сверхбольшие интегральные схемы

6. Как назывался первый персональный компьютер?
1) Apple II
2) IBM PC
3) Dell
4) Корвет
Устройство компьютера.........................15
1. Назовите центральное устройство компьютера.
1) Процессор
2) Системный блок
3) Блок питания
4) Материнская плата
2. Как записывается и передается физическая информации в ЭВМ?
1) цифрами;
2) с помощью программ;
3) представляется в форме электрических сигналов.

3. Процессор обрабатывает информацию представленную:
1) В десятичной системе счисления
2) На английском языке
3) На русском языке
4) На машинном языке (в двоичном коде)
4. Для ввода числовой и текстовой информации используется
1) Клавиатура
2) Мышь
3) Трекбол
4) Ручка
5. Важнейшей характеристикой координатных устройств ввода является разрешающая способность, которая обычно составляет 500 dpi (dot per inch – точек на дюйм (1 дюйм = 2,54 см)), что означает…
1) При перемещении мыши на один дюйм указатель мыши перемещается на 500 точек
2) При перемещении мыши на 500 точек указатель мыши перемещается на один дюйм
6. Сканер используется для…
1) Для ввода в компьютер изображений и текстовых документов
2) Для рисования на ней специальной ручкой
3) Перемещения курсора на экране монитора
4) Получения голографических изображений
Устройства вывода информации.................21
1. Какой тип принтера целесообразно использовать для печати финансовых документов?
1) Матричный принтер
2) Струйный принтер
3) Лазерный принтер
2. Какой тип принтера целесообразно использовать для печати рефератов?
1) Матричный принтер
2) Струйный принтер
3) Лазерный принтер

1. Какой тип принтера целесообразно использовать для печати фотографий?
1) Матричный принтер
2) Струйный принтер
3) Лазерный принтер
2. При несоблюдении санитарно – гигиенических требований компьютера вредное влияние на здоровье человека может оказать…
1) Монитор на электронно – лучевой трубке
2) Монитор на жидких кристаллах
4) Плазменные панели
3. Устройство, которое обеспечивает запись и считывание информации называется…
1) Дисководом или накопителем

4. При выключении компьютера вся информация стирается из…
4) Оперативной памяти
5) Жесткого диска
6) Лазерного диска
7) Дискеты
13. В каком устройстве компьютера осуществляется хранение информации?
1) Внешняя память;
2) монитор;
3) процессор;
2. Оптические дорожки имеют меньшую толщину и размещены более плотно на …
1) Цифровом видеодиске (DVD – диске)
2) Компакт диске (CD – диске)
3) Дискете
3. На каком диске информация хранится на концентрических дорожках, на которых чередуются намагниченные и ненамагниченные участки
1) На дискете
2) На компакт диске
3) На DVD – диске

4. В устройства ввода входят…

1) Жесткий диск, процессор, модули памяти, материнская плата, дискета
5. В устройства вывода входят…
1) Клавиатура, мышь, джойстик, световое перо, сканер, цифровая камера, микрофон
2) Звуковые колонки, монитор, принтер, наушник
3) Жесткий диск, процессор, модули памяти, материнская плата, дискета
6. Программой называется…

7. Компьютерная программа может управлять работой компьютера, если она находится…
1) В оперативной памяти
2) На гибком диске
3) На жестком диске
4) На CD – диске
8. Данные – это…
1) Последовательность команд, которую выполняет компьютер в процессе обработки данных
2) Информация, представленная в цифровой форме и обрабатываемая на компьютере
3) Данные, имеющие имя и хранящиеся в долговременной памяти
9. Файл – это…
1) Текст распечатанный на компьютере
2) Информация, представленная в цифровой форме и обрабатываемая на компьютере
3) Программа или данные, имеющие имя и хранящиеся в долговременной памяти

10. При быстром форматировании гибкого диска …
1) Производится очистка каталога диска
2) Стираются все данные
3) Производится дефрагментация диска
4) Производится проверка по

Ассемблер

Ассемблер ― язык программирования низкого уровня. Язык получил свое название от слова assembler - сборщик. Возник еще в 50-е гг. как символический аналог машинного языка.
Команды Ассемблера один в один соответствуют командам процессора и фактически, представляют собой удобную символьную форму записи команд и аргументов. Также, Ассемблер обеспечивает связывание частей программы и данныx через метки, выполняемое при ассемблировании (для каждой метки высчитывается адрес, после чего каждое вхождение метки заменяется на этот адрес).
Поскольку системы команд микропроцессоров различаются, каждый процессор имеет свой набор команд на языке ассемблера.
С помощью ассемблера можно написать такие программы, которые невозможно, или очень сложно написать на других языках програмирования. Например: генераторы ключей (keygen), системные мониторы, драйвера для оборудования или даже операционные системы.
Языки высокого уровня ("C","Pascal","Delphi" и т.д.) не обеспечивают надёжного контроля за потоками данных, адресами памяти или регистрами процессора, а также все они были разработаны под определённый вид операционной системы, ассемблер же может стать этим-же ассемблером, но работающим на неизвестной науке платформе, и делающий программы под эту-же платформу.
Программы на ассемблере, в отличие от программ, написанных на языках высокого уровня получаются в десятки раз меньше, а работают в десятки раз быстрее. Примером может послужить операционная система MenuetOS, которая написана на Flat Assembler и умещающаяся на одной дискете (1.44 Мб), причём в комплект входят прикладные программы, такие как: редактор ассемблерного кода с подсветкой, работа с файловой системой, 3d заставки, некоторое количество игр, просмоторщик картинок, компилятор Flat Assembler, терминал, CD плейер и многое другое. Преимущество состоит в том, что его можно быстро скачать с интернета (даже при маленькой скорости соединения).
На данный момент, большинство специалистов в области программного обеспечения ведут разработки на языках высокого уровня, таких как Паскаль или С, что проще при написании программ, но наиболее мощное и эффективное программное обеспечение полностью или частично написано на языке ассемблера.

Литература
1. Питер Абель - Ассемблер. Язык и программирование для IBM PC - М., 1999.

Ассемблер

Ассемблер (от англ. assembler - сборщик) - компилятор исходного текста программы, написанной на языке ассемблера, в программу на машинном языке.
Как и сам язык, ассемблеры, как правило, специфичны для конкретной архитектуры, операционной системы и варианта синтаксиса языка. Вместе с тем существуют мультиплатформенные или вовсе универсальные (точнее, ограниченно-универсальные, потому что на языке низкого уровня нельзя написать аппаратно-независимые программы) ассемблеры, которые могут работать на разных платформах и операционных системах. Среди последних можно также выделить группу кросс-ассемблеров, способных собирать машинный код и исполняемые модули (файлы) для других архитектур и ОС.
Ассемблирование может быть не первым и не последним этапом на пути получения исполнимого модуля программы. Так, многие компиляторы с языков программирования высокого уровня выдают результат в виде программы на языке ассемблера, которую в дальнейшем обрабатывает ассемблер. Также результатом ассемблирования может быть не исполнимый, а объектный модуль, содержащий разрозненные блоки машинного кода и данных программы, из которого (или из нескольких объектных модулей) в дальнейшем с помощью редактора связей может быть получен исполнимый файл.
Специальные ячейки памяти, расположенные непосредственно в процессоре. Работа с регистрами выполняется намного быстрее, чем с ячейками оперативной памяти, поэтому регистры активно используются как в программах на языке ассемблера, так и компиляторами языков высокого уровня.
Названия регистров происходят от их назначения:

EAX/AX/AH/AL (accumulator register) - аккумулятор;
EBX/BX/BH/BL (base register) -регистр базы;
ECX/CX/CH/CL (counter register) - счётчик;
EDX/DX/DH/DL (data register) - регистр данных;
ESI/SI (source index register) - индекс источника;
EDI/DI (destination index register) - индекс приёмника (получателя);
ESP/SP (stack pointer register) - регистр указателя стека;
EBP/BP (base pointer register) - регистр указателя базы кадра стека.

Команды обработки строк
Для работы со строками, или цепочками символов или чисел (т.е. попросту говоря, с массивами произвольных данных) в МП предусмотрен ряд специальных команд:
movs - пересылка строки;
cmps - сравнение двух строк;
seas - поиск в строке заданного элемента;
lods - загрузка аккумулятора (регистров AL или АХ) из строки;
stos - запись элемента строки из аккумулятора (регистров АХ или AL).

Достоинства

· Язык ассемблера позволяет писать самый быстрый и компактный код, какой вообще возможен для данного процессора.
· Скорость работы - за счёт оптимизации вычислительного алгоритма и/или более рационального обращения к оперативной памяти (например, если все исходные данные хранятся в регистрах процессора, то можно исключить излишние обращения к ОП), перераспределения данных, табличного вычисления функций;
· Объём кода (в том числе за счёт эффективного использования промежуточных результатов). Сокращение объёма кода также нередко повышает скорость выполнения программы.
· Обеспечение максимального использования специфических возможностей конкретной платформы, что также позволяет создавать более эффективные программы, в том числе менее ресурсоёмкие.
· При программировании на языке ассемблера возможен непосредственный доступ к аппаратуре, и, в частности, портам ввода-вывода, регистрам процессора и др. Во многих операционных системах прямое обращение из прикладных программ для записи в регистры периферийного оборудования блокировано для надёжности работы системы и исключения "зависаний".
· Язык ассемблера часто применяется для создания драйверов оборудования и ядра операционной системы, когда важно временное согласование работы периферийных устройств с центральным процессором.
· Язык ассемблера используется для создания "прошивок" BIOS.
· С помощью языка ассемблера часто создаются машиннозависимые подпрограммы компиляторов и интерпретаторы языков высокого уровня, а также реализуется совместимость платформ.
· С помощью программы дизассемблера можно понять алгоритмы работы исследуемой программы при отсутствии листинга на высокоуровневом языке, изучая только машинные коды, но в сложных нетривиальных программах это очень и очень трудоёмко.

Недостатки
· В силу машинной ориентации ("низкого" уровня) языка ассемблера человеку сложнее читать и понимать программу на нём по сравнению с языками программирования высокого уровня; программа состоит из слишком "мелких" элементов - машинных команд, соответственно, усложняются программирование и отладка, растут трудоёмкость и вероятность внесения ошибок.
· Требуется повышенная квалификация программиста для получения качественного кода: код, написанный средним программистом на языке ассемблера, обыкновенно оказывается не лучше или даже хуже кода, порождаемого оптимизирующим компилятором для сравнимых программ, написанных на языке высокого уровня.
· Программа на языке высокого уровня может быть перекомпилирована с автоматической оптимизацией под особенности новой целевой платформы, программа же на языке ассемблера на новой платформе может потерять своё преимущество в скорости без ручного переписывания кода.
· Как правило, меньшее количество доступных библиотек по сравнению с современными индустриальными языками программирования.
· Отсутствует переносимость программ на компьютеры с другой архитектурой и системой команд.

Совместимость
Программа, предназначенная для одного типа ассемблеров, не может быть откомпилирована на другом без радикальной переделки или автоматической конвертации! Но даже среди ассемблеров "своего" типа наблюдается разброд, разнобой и множество различий: в ключевых словах, в правилах оформления листинга, в поставляемых библиотеках и заголовочных файлов и т. д. Если только совместимость не заявлена явно, транслировать программу нужно тем и только тем ассемблером для которого она предназначена. В противном случае - готовьтесь к переделкам (то есть, к адоптации). Отличия зачастую проявляются в самых неожиданных местах. Некоторые ассемблеры понимают, что "mov eax, x" это тоже самое, что и "mov eax,[x]", некоторые - нет. Они спотыкаются и выдают ошибку. Но еще ничего! Гораздо хуже, когда транслятор молчаливо трактует эту конструкцию как "mov eax, offset x", что совсем не одно и тоже! Так что при переносе программы приходится быть очень и очень осторожным.

Совместимость операционных систем. Программы, ориентированные на MS-DOS, без не только не транспортабельны, но и непереносимы. Для них характерно прямое взаимодействие с оборудованием, доступное в NT только с ядерного уровня, не говоря уже о том, что 16-разрядный код вызывается из 32-разрядных приложений только через DPMI, да и то не без ухищрений.

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

Ассемблирование программы

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

Asm --> .obj --> .exe/.dll/.com

На первой стадии (.asm --> .obj) из ассемблерного файла путем компиляции получаются файлы промежуточного объектного кода, имеющего расширение.obj (при этом могут использоваться дополнительные inc-файлы). Файл с расширением.obj содержит оптимизированный машинный код при условии, что не встретились синтаксические и семантические ошибки. Если в исходном файле с программой на языке ассемблера обнаруживаются ошибки, то программисту выдается список обнаруженных ошибок, в котором ошибки указываются с номером строки, в которой они обнаружены. Программист циклически выполняет действия по редактированию и компиляции до тех пор, пока не будут устранены все ошибки в исходном файле. На этом этапе уже возможно получение готовой программы, но чаще всего в ней не хватает некоторых компонентов. Если компилятор по какой-либо причине (неверно прописан путь к такому файлу или файл отсутствует) не может найти inc-файл, то выдается предупреждение и obj-файл получен не будет.

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

В результате ассемблирования получается так называемый "объектный файл". В качестве дополнительной возможности ассемблер может создать файл листинга программы.

Обычно для получения файлов объектного кода необходимо выполнить соответствующую программу ассемблера (программы ML.EXE фирмы Microsoft и TASM.EXE фирмы Borland), указав в командной строке имя файла с текстом программы.

Эта форма вызова является минимально необходимой. Кроме имени текстового файла, необходимо указывать опции ассемблирования. Более подробную информацию об опциях программы ассемблирования следует искать в документации к этим программам.

Компоновка программы

Следующая стадия (.obj --> .exe/.dll/.com) называется линковкой или компоновкой и служит для замещения символьных имен, используемых программистом, на реальные адреса.

Сравните шестнадцатеричное содержимое OBJ и EXE файла, который у вас получился. В EXE-файле присутствует та же последовательность байтов, что и в OBJ-файле. Но помимо этого еще присутствует: имя ассемблированного файла, версия ассемблера, "имя собственное" сегмента и так далее.

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

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

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

Процесс объединения объектных модулей в один файл осуществляется специальной программой-компоновщиком или сборщиком (программа LINK.EXE фирмы Microsoft и TLINK.EXE фирмы Borland), которая выполняет связывание объектных модулей и машинного кода стандартных функций, находя их в библиотеках, и формирует на выходе работоспособное приложение - исполнимый код для конкретной платформы.

Исполнимый код - это законченная программа с расширением COM, DLL или EXE, которую можно запустить на компьютере с установленной операционной системой, для которой эта программа создавалась. Имя исполняемого файла задастся именем первого.OBJ файла. Для линковки нужно в командной строке набрать:

link prog1.obj prog2.obj или tlink prog1.obj prog2.obj

Содержимое объектного файла анализируется компоновщиком. Он определяет, есть ли в программе внешние ссылки, то есть содержит ли программа команды вызовов процедур, находящихся в одной из библиотек объектных модулей (link library). Компоновщик находит эти ссылки в объектном файле, копирует необходимые процедуры из библиотек, объединяет их вместе с объектным файлом и создает исполняемый файл (executable file). В качестве дополнительных возможностей компоновщик может создать файл перекрестных ссылок, содержащих план полученного исполняемого файла.

Используемые источники
1. https://ru.wikipedia.org/
2. http://natalia.appmat.ru/
3. http://www.codenet.ru/
4. http://wasm.ru/
5. Нортон П., Соухэ Д. Язык ассемблера для IBM PC. М.: Компьютер, 1992.







2024 © gtavrl.ru.