Читайте также:
|
|
Хотя структура ассемблерного оператора отражает структуру соответствующей машинной команды, языки ассемблера для разных машин и разных уровней во многом похожи, что позволяет говорить о языке ассемблера в целом. В листингах 7.1-7.3 показаны фрагменты программ на ассемблерах х86 вычисление формулы N = I + J. операторы над пустой строкой выполняют вычисление, а операторы под пустой строкой резервируют память для переменных I, J и N. То есть последние операторы не являются символьными представлениями машинных команд.
Для компьютеров семейства Intel (х86) существует несколько ассемблеров, которые отличаются друг от друга синтаксисим. Мы будем использовать язык ассемблера Microsoft MASM.
Листинг 7.1. Вычисление выражения N = I + J на ассемблере х86
FORMULA: MOV ЕАХ,I; регистр ЕАХ = I
ADD ЕАХ,J; регистр ЕАХ = I + J
MOV N,ЕАХ; N = I + J
I DD 3; резервирование 4 байт
; и их инициализация значением 3
J DD 4; резервирование 4 байт
; и их инициализация значением 4
N DD 0; резервирование 4 байт
; и их инициализация значением О
Ассемблерные операторы состоят из четырех полей: метки, операции, операндов и комментариев. Метки служат символическими именами для адресов памяти. Они позволяют переходить к командам и данным, позволяя по символическому имени получить доступ к тому месту, где хранятся команды и данные. Если оператор снабжен меткой, то эта метка обычно располагается в начале строки.
В ассемблере компьютеров Intel двоеточие ставится только после меток команд, но не после меток данных. Данное различие вовсе не является чем-то фундаментальным, просто у разработчиков разных ассемблеров разные вкусы. Архитектура машины никак не влияет на тот или иной выбор. Единственное достоинство двоеточия состоит в том, что метку можно написать на отдельной строке, а код операции - на следующей строке с тем же отступом, что и метка. Без двоеточия компилятору невозможно было бы отличить метку от кода операции при их размещении в отдельных строках.
В некоторых ассемблерах длина метки ограничена значением 6 или 8 символов. В то же время в большинстве языков высокого уровня длина имен произвольна. Длинные и хорошо подобранные имена упрощают чтение и понимание программы.
В каждой машине есть несколько регистров, но названия у них совершенно разные. Регистры Pentium 4 называются ЕАХ, ЕВХ, ЕСХ и т. д.,
В поле кода операции содержится либо символическая аббревиатура этого кода (если оператор является символическим представлением машинной команды), либо команда самого ассемблера. Выбор имени - дело вкуса, и поэтому разные разработчики называют их по-разному. Разработчики ассемблера Intel решили использовать обозначение MОV и для загрузки регистра из памяти и сохранения регистра в память. Очевидно, что выбор названий в данном случае никак не связан с архитектурой машины.
Программа на языке Ассемблер часто требует резервировать пространство для данных.Разработчики ассемблера х86 выбрали для этой операции название DD (Define Double - определить двойное слово), поскольку слово процессора 8088 имело длину 16 бит.
В поле операндов оператора задаются адреса и регистры, которые являются операндами машинной команды. В поле операндов команды целочисленного сложения указывается, что и к чему нужно прибавить. Поле операндов команд перехода определяет, куда совершается переход. Операндами могут быть регистры, константы, ячейки памяти и т. д.
В поле комментариев поясняются действия программы. Эти пояснения могут пригодиться программистам, которым потом придется использовать и дорабатывать чужую программу, а также самому автору программы, когда он через год вернется к работе над ней. Ассемблерная программа без таких комментариев - нечто совершенно невразумительное (даже для ее автора). Комментарии могут быть полезны только людям и никак не влияют на работу программы.
Дата добавления: 2014-12-19; просмотров: 116 | Поможем написать вашу работу | Нарушение авторских прав |