Язык ассемблера: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Строка 79: Строка 79:
Msgstr — [[метка]] (идентификатор), упрощающая доступ к данным.<br>
Msgstr — [[метка]] (идентификатор), упрощающая доступ к данным.<br>
== Компиляторы ассемблера ==
== Компиляторы ассемблера ==
*TASM
* TASM
*MASM
* MASM
*[http://flatassembler.net FASM]
* [http://www.masm32.com MASM32]
* [http://flatassembler.net FASM]
*NASM
* NASM
*AS (*nix системы)
* AS (*nix системы)
* GAS (*nix)
{{Языки программирования}}
{{Языки программирования}}

Версия от 02:24, 7 июля 2005

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

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

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

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

Синтаксис

Каждая инструкция записывается в отдельной строке.

Объектами, над которыми производятся действия, являются регистры и участки оперативной памяти. Обозначения для них также являются частью синтаксиса.

Часто команды ассемблера являются трёх- или четырёхбуквенными сокращениями их аналогов на английском языке, например:

jmp — jump
mov — move
sub — substraction
xchg — exchange

Синтаксис записи инструкций может существенно различаться даже для одного семейства процессоров. В частности, для Intel x86 различают Intel-синтаксис и AT&T-синтаксис записи.

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

Каждый ассемблер имеет собственные директивы.

Для упрощения и ускорения написания программ на языке ассемблера служат макросы.

Достоинства языка ассемблера

  • Максимальная оптимизация программ как по скорости выполнения, так и по размеру.
  • Использование расширений процессора (ММХ, SSE, SSE2).
  • Доступ к портам и особым регистрам процессора.
  • Возможность использования самомодифицирующегося кода.
  • Максимальная «подгонка» для нужной платформы.

Недостатки

  • Трудоёмкость написания программы больше, чем на языке высокого уровня
  • Трудоёмкость чтения (хотя здесь многое зависит от комментариев и стиля программирования)
  • Непереносимость на другие платформы, кроме совместимых
  • Ассемблер малопригоден для совместных проектов

Пример программы на языке ассемблера

Пример программы, выдающей на экран приветствие (написан на TASM для процессоров семейства intel x86, операционной системы DOS или совместимой):

 
TITLE Пример программы, выдающей на экран приветствие 

 STACK 256
DATASEG SEGMENT PARA 'DATASEG'
    Msgstr DB 'Hello, World!'
DATASEG ENDS
CODESEG SEGMENT PARA 'CODESEG'   ;Вот так правильно описываются сегменты памяти        
 start:    
    mov ax,DATASEG         ; занести в регистр AX смещение блока данных        
    mov ds,ax              ; установить регистр DS равным AX
    mov bx,1               ; указание направления вывода (на экран)
    mov cx,13              ; указание количества символов строки
    mov dx,offset Msgstr   ; поместить в регистр DX смещение строки
    mov ah,40h             ; выбор функции вывода строки
    int 21h                ; вызов прерывания DOS (вывод строки)
    mov ax, 04C00h         ; выбор функции завершения программы
    int 21h                ; вызов прерывания DOS (завершение программы)
 
CODESEG ENDS
end start    

Здесь всё записанное между строками 'start:' и 'end start' — это символические записи инструкций процессора,
(после знака ; и до конца строки — комментарии)

MODEL 
STACK
SEGMENT
ENDS

— это директивы ассемблера (TASM),

DB 'Hello, World!'

— это непосредственные данные (строка для вывода);
Msgstr — метка (идентификатор), упрощающая доступ к данным.

Компиляторы ассемблера

  • TASM
  • MASM
  • MASM32
  • FASM
  • NASM
  • AS (*nix системы)
  • GAS (*nix)