16.02.12
Основа программирования на языке Ассемблер.
В МПС используется программирование на языка Ассемблер. Термин Ассемблер имеент два значения:
Ассемблером называется язык программирования мнемокодов команд.
Ассемблером называется и специальная команда, транслятор, которая переводит (транслирует) мнемокоды в машинные коды, считываемые микропроцессором из памяти программ, дешифруемые и выполняемые. Процесс перевода мнекодов в машинные команды называется ассемблированием.
Программа на языке ассемблера содержит 2 типа выражения:
Команды, которые транслируются в машинные коды
Дерективы, которые управляют ходом трансляции.
Выражение имеет вид
{(метка)}:(мнемокод) {(операнд)}{,}{(операнд)>}{;комент}
В фигурных скобках мнемокод и операнды отделяются хотя бы одним пробелом или тобуляцией. Максимальная длина строки - 132 символа. Однако более часто используются строки их 80 символов, что приведены элементы выражения, которых может и не быть в некоторых командах. Метка соответствует длине экрана.
Dely:MOVAX,BX;метка, команда ;два операнда ;пример команды ассемблера
Метка на языке Ассемблера является символическим адресом команды. Метками обозначчаются не все команды, а только те, к которым нужно выполнять переход с помощью команд переходов или вызовов подпрограмм. После метки ставится ":". Первым символом в метке может быть буква или 1 из специальных символов (? . @ ____, $). Максимальная длина метки - 31 символ. Пример меток:
COVNT;
PAGE25/
РКОМИНДУЕТСЯ ПИСАТЬ СМЫСЛОВЫЕ МЕТКИ. Все метки в проге должны быть уникальными, т.е. не может быть команд с одинаковыми метками.
Нельзя использовать в качестве меток зарезервированные ассемблером слова к которым принадлежат коды команд, дерективы, имена регистров.
................являются зарезервированными и используются только для указания соответствующих регистров.
В командах переходов или вызовов подпрограмм обозначенние метки используется как операнд - Символический адрес перехода, например:
call,dely;вызов подпрограммы с меткойdely
Снемокод идентифицирует команды ассемблера. для мнемокодов используют сокращенные или полные английские слова, которые передают значения основной фуенкции команды add- сложить,sub- вычесть,xchg- обмен. Операнды отделяются запятыми. если заняты 2 операнда, то первые отделются источником, а второй приемником информации. Команда может содержать различные операнды разных типов. Комментарии игнорируются в процессе трансляции и используются для документирования и лучшего понимания содержания программы. Комментраии всегда начинаются с ";" и может содержать любые символы. комметрарий может занимать всю строку или быть расположенным за командой в одной строке. Поскольку комментарий не транслируется ........
17.02
Пргорамма на языке ассембела называется начальной, или начальным исходным программным модулем.
Ассемблированием - перевод исходного модуля в машинные коды, которые выполняет программа - Транслятор (TASM.COM).
в ЗЗАВИСИМОСТИ ОТ УСТАНОВОК ЗАДАВАЕМЫХ ПОЛЬЗОВАТЕЛЕЙ программа переводит исходный модуль в один из 2-х программных модулей: командный модуль (файл с расширением .comили объектный модуль .obj.
Командный модуль содкржит машинный коды команд с абсолютными адрксами и выполняется микропроцессором. Командый модуль целесообразно использовать, когда емкость программы не превышает размера одного сигмента. Первым оператором командного модуля является деректива ORG100H, которая распологает первую команду в сегменте кода со смещением 100h. Заканчиваться программа должна командойRETили стандартной процедурой корректного выхода вms-dos. Последней строкой программы может быть дериктиваEND.
Объектный модуль содержит машинные коды команд с относительными адресами. Объектный модуль выполняется в МПС после замены относительных адресов на абсолютные с помощью программы - компоновщика, например Linc.exe, которые генерирует модуль с расширением .exeфайл.Exeфайл в отличии от команлдного модуля может превышать объем одного сиигмента, однако в этом случае обязательно определять сигменты с помощью деректив ассемблера. Заканчиветсяexeфайл стандартной процедурой корректоного выхода вms-dos.
Программа - компоновщик имеет еще 1 назначение. Она оарпеделяет модуль с библеотечницми модулями или несколько отдельных модулей в один exе файл. Библеотечнми модулями называются оптечне файлы, которые содержат наиболее распростаненные подпрограммы. Библеотечные модули раззмещаются в специальном системном файле - библеотике.
При ассемблировании программа транслятор гененирует листинг и файл листинга - программы.
Листинг - это отображение на дисплее или бумаги текстов начального программного модуля (com) и сообщений, которые указывают на ошибки программирования, связанные с нарушением правил записи выражений, например, нет операнда или непралиный мнемокод команды.
Дерективы предназначены для управления процессом ассемблирования и формирования листинга. Они действуют только в процессе ассемблирования программы и не переводятся в машинные коды. Язык ассемблера содержит такие основные дериктивы:
SEGMENT иENDS
Начало и конца процедуры ProcиENDP
Назанчение процедуры ASSUME
начало ORG
распределения и инициирования памяти DB,DW,DD
END
конец метки LABEL.
Пример написаня простой программы.
Простые программы целесообразно оформлять в виде командных файлов. Первой директивой таких программ является ORG100H, посденей -END. Написать программу сложения 2-х 8-разрядных ячеек памяти, которые находятся в сегменте данныхDSсо смещениями 1000Hи 1001Hсоответственно. Результат размистить в ячеейке памяти с адресом DS:1002H.
Мнемокод |
Операнд |
Комментарий |
ORG |
100H |
; начало программы |
MOV |
AL [1000H] |
;AL-DS [100H] Переслать в 8-разрядные регистр ALв содержимое ячейки памяти с адресомDS[1000H] |
ADD |
AL, [1001H] |
; AL-AL+DS; [1001H] |
MOV |
[1002H], AL |
;DS:1002H-AL ; переслать содержимое ALв ячейкуDS[1002H] |
END |
|
;завершение программы |
Задание 1 обнулить нечетные разряды
№2 кстановть единицы в четных разрядов
№проинфентироваать