Структура программы на Ассемблере
Февраля. Лекция 1 (?)В прогрессе развития аппаратуры сегодня определяется в первую очередь элементной базой, степенью интеграции этой базой, технологиями использования параллельной обработки данных и технологиями картинного использования распределенных вычислительных систем. А прогресс в развитии программного обеспечения требует максимального использования автоматизации программирования для увеличения эффективности или уменьшения скорости выполнения критических участков программы. Для этой цели большое значение имеют машинно-ориентированные языки, то есть языки низкого уровня. Выделяют основные две сферы применения языков низкого уровня: - разработка системных программ, входящие в операционные системы(драйверы); - накопление и обработка информации в больших информационных вычислительных системах(управление баз данными, составными системами). Традиционно программное обеспечение делится на прикладное или проблемное и системное. К прикладному относятся долговременно хранящиеся пакеты прикладных программ, библиотеки стандартных модулей, которые используются для решения проблемных задач. А системные задачи ПО предназначены для автоматизации разработки программ как прикладного уровня, так и системных и для их автоматического исполнения, для управления вычислительных систем в целом. И вот системное программное обеспечение, в свою очередь еще делается на управляющихся системных. Часть управляющих программ, которая в ходит в ядро опер системы и отвечающая за бесперебойную работу машины постоянно находящаяся в оперативной памяти, называется резидентными, а управляющие системные программы, которые загружаются в оперативную память перед выполнением, называются транзитными. Архитектура ПК Архитектура ПК включает в себя набор блоков и устройств, объединенных в единую вычислительную систему и функциональную организацию, обеспечивающую автоматическую работу всех этих блоков и устройств. С точки зрения программиста архитектура компьютера – это набор средств, блоков, устройств доступных для программиста. Современные компьютеры использую магистрально-модульный принцип построения, при котором к системной шине (или центральной магистрали) с помощью стандартных интерфейсов подключаются все внешних устройства. х – количество устройств которые подключены к процессору. Если таких устройств меньше 8ми, то один алгоритм обработки. В современных ПК реализован магистрально-модульный принцип построения. Все устройства (модули) подключены к центральной магистрали, системной шине, которая включает в себя адресную шину, шину данных и шину управления. Шина – это набор линий связи, по которым передается информация от одного из источников к одному или нескольким приемникам. Адресная шина однонаправленная, адреса передаются от процессора. Шина данных двунаправленная, данные передаются как от процессора, так и к процессору. В шину управления входят линии связи и однонаправленные и двунаправленные. Внешние устройства работают значительно медленнее процессора, поэтому для организации параллельной работы процессора и внешних устройств в архитектуру компьютера входит система прямого доступа к памяти (ДМА) и интерфейсные блоки, включающие в себя устройства управления внешними устройствами (контроллеры, адаптеры). А для синхронизации работы всех устройств используется система прерываний. Если к какому-нибудь устройству требуется работа процесса (вывести информацию), это устройство посылает процессору специальный сигнал. И в зависимости от состояния процессора, это прерывание процессором обрабатывается и процессор прерывает выполнение текущей программы, обрабатывает сигнал прерывания (то есть с сигналом связана какая-то программа обработки этого прерывания), процессор переключается на выполнение другой программы и после успешного выполнения возвращается к прерванной программе. Существуют различные типы прерываний: - внешние - внутренние - маскируемые или не маскируемые (можно ли это прерывание маскировать, то есть заблокировать на некоторое время) У прерываний существуют различные приоритеты. Для организации работы прерываний в структуру архитектуры включается контролер прерываний (каскадный в случае если прерываний > 8). Архитектура процессора IX86 Процессоры семейства intel совместимы снизу-вверх, то есть это значит, что программа написанная для младшего процессора, может выполняться на процессоре старшего поколения. При включении питания процессор устанавливается в реальный режим работы процессора и адресации памяти. Современные операционные системы сразу переводят его в защищенный режим, обеспечивающий многозадачность и распределение ресурсов. Такие О.С. допускают еще один режим виртуальных машин. И опять с точки зрения программиста архитектура процессора это совокупность программно-доступных средств процессора. Начиная с Intel 386 программисту доступны16 основных регистров, 11 регистров для работы с сопроцессором и мультимедийными приложениями и в реальном режиме доступны еще некоторые режимы управления и некоторые специальные регистры. Регистры В 16 регистров входит 4 регистра общего назначения. Общие регистры: При работе с 32 разрядными данными используются EAX, EBX, ECX, EDX. При работе с 16 разрядными данными используются регистры AX, BX, CX, DX. И при работе с байтами - используются AL, AH, BL, BH, CL, CH, DH, DL.
Эти регистры имеют собственные имена, отражающие их специальные назначения: AX – аккумулятор, в который чаще всего записываются результат; BX – база, используется для сложной адресации операндов данных, участвующих в операции; CX – счетчик, используется в организации циклов, при работе со строками; DX – регистр данных. Регистры индексов и указателей: Регистры указателей и индексов имеют специальные назначения. Регистры SI и DI используются для сложной адресации операндов, где SI – индекс источника, а DI – индекс приемника, а указатели SP, BP – используются для работы со стеком (BasePointer и StackPointer). Процессор может работать с оперативной памятью как с одним непрерывным массивом байтов, а может работать с памятью, разбитой на участки, называемые сегментами, это сегментированная память. Для организации работы с сегментированной памятью в процессоре предусмотрены 6 сегментных регистров. С каждым из этих сегментных регистров – DS, ES, GS, FS, CS, SS, - С каждым сектором связан программно недоступный регистр, называемый дескриптором, а сегментный регистры называются селекторами, с которыми связан программно недоступный дескриптор, в котором хранится информация о сегменте: размер сегмента, и некоторая специальная информация – адрес сегмента, размер сегмента. Это справедливо для защищенного режима работы. В реальном режиме процессор может работать с 1 Мбайтом памяти. Адрес сегмента кратен 16. В 16 системе счисления он может быть записан в виде XXXХO16, где старшие четыре числа хранятся в сегментных регистрах. При этом программа хранится в кодовом сегменте, а ее адрес содержится в сегменте CS, адрес стека хранится в регистре SS, для сегмента данных предусмотрено 4 сегментных регистра: DS, ES, FS, GS. Кодовый сегмент только один, но это не значит, что программа может занимать только один сегмент оперативной памяти. В любой момент программист может изменить содержимое сегментного регистра, таким образом попасть на другой участок оперативной памяти. В реальном режиме работы размер сегмента фиксирован и равен 64Кб. XXXXO16 – адрес в реальном режиме, а в защищенном режиме размер сегмента может достигать 4Гб. Сегмент стека Сегмент организован специальным образом: адрес начала сегмента операционная система автоматически записывает в регистр SS, а указатель на вершину стека содержится в регистре SP. При добавлении элемента в стек содержимое указателя SP уменьшается. Это значит, что стек растет от максимально возможного значения, которое содержится в SS, вниз. Такая организация стека необходима для работы с памятью в режиме плат. Тогда стек размещается в старших адресах, а программа в младших адресах. Стек используется для временного хранения данных, для передачи параметров в подпрограммы, для организации работы с подпрограммами, в том числе рекурсивных. Для того, чтобы стек можно было использовать и для фактических параметров, и для локальных - после передачи параметров фактических в подпрограмму содержимое регистра SP(вершина стека) можно сохранить в регистре BP, а потом загружать локальный параметр. И обращаться и к фактически, и к локальным можно, используя регистр BP: BP + k – обращение к фактическим; BP – n – обращение к локальным; Где k и n - определяются количеством параметров и их размером. Регистр указатель команд или счетчик команд Регистр, называемый указатель команд или счетчик команд, используется для получения адреса следующей исполняемой команды. Регистр флагов FLAGS Это 32-х разрядный регистр, в котором 1,3,5,15,19-31 разряды не используются. Регистр флагов определяет состояние программы и процессора в каждый текущий момент времени. Используются в реальном и защищенном режиме: 1. CF - перенос 2. PF - четность 3. AF - полуперенос 4. ZF - флаг нуля 5. SF - флаг знака 6. TF - флаг трассировки 7. IF - флаг прерывания 8. DF - флаг направления 9. OF - флаг переполнения Используются только в защищенном режиме: 1. AC - флаг выравнивания операндов 2. VM - флаг виртуальных машин 3. RF - флаг маскирования прерывания 4. NT - флаг вложенной задачи 5. IOPL - уровень привилегий ввода/вывода. (2 разряда занимает 12 и 13) Есть флаги, которые определяют состояние программы, а есть которые определяют состояние процессора. 1. CF устанавливается (то есть автоматически) в 1, если в результате выполнения текущей команды произошел перенос в разрядной сетке (например, сложение, вычитание); 2. PF устанавливается в 1, если в младшем байте результата окажется четное количество единиц. (определяет правильность работы с памятью); 3. AF устанавливается в 1, если например, при сложении происходит перенос из третьего байта в четвертый, а при вычитании заем – из четвертого в третий; 4. ZFустанавливается в 1, если результат выполнения команд равен нулю; 5. SFвсегда равен старшему разряду результата; 6. TFустановленный в 1, переведет процессор в режим пошаговой отладки программы; 7. IF используется для маскирования на некоторое время прерывания 8. DFиспользуется при работе со строками, установленный в 1 определяет обработку строки от старших адресов к младшим, а установленный в 0 – иначе; 9. OFустанавливается в 1, если ряд операций превышает максимально допустимое значение для данной разрядной сетки. Например, при сложении произошел перенос из старшего цифрового разряда в знаковый, а из знакового не было переноса и наоборот. 10. AC установлен в 1, то процессор будет выдавать сообщения об ошибках – следит за кратностью адресов операндов(слова, двойного слова); 11. VMпозволяет перейти из защищенного режима в режим виртуальных машин; 12. RF позволяет маскировать некоторые прерывания процессора; 13. NT определяет режим работы вложенных задач; 14. IOPL = 1, если уровень привилегии текущей программы меньше значения этого флажка, то выполнение команды ввод/вывод для этой программы запрещен. Февраля. Лекция 2 Оперативная память ОП состоит из байтов, а байты состоят из битов. Байты состоят из 8-ми информационных разрядов с 0 – 3 байт - цифровая часть байта, с 4 – 7 зонная часть байта. 32-ух разрядный процессор может работать с оперативной памятью размером до 4-х Гб. Поэтому адреса байтов изменяются от нуля до 232 – 1, что в 16 системе счисления представляется от 00000000 до FFFFFFFF. Байты могут объединяться в поля переменной и фиксированной длины. Поля фиксированной длины имеют собственные имена. Слово состоит из 2-х байтов, а двойное слово из 4-х. Длина поля – это количество входящих в него байтов. Адрес поля – это адрес младшего входящего байта в поля. Адрес поля может быть любым. Если флаг АС установлен в 1, то адрес слова должен быть кратен 2-ум, а двойного слова - 4-м. Оперативная память может использоваться как непрерывный массив байтов или как режим сегментированной памяти.
В режиме сегментированной памяти физический адрес байта записывается следующим образом:
Сегмент : Смещение или Физический адрес = Адрес сегмента + Исполняемый адрес Исполняемый адрес или смещение формируется различным способом в зависимости от способа адресации операндов команды. В защищенном режиме программа может определить, а значит и использовать, до 16383 сегментов размером до 4Гбайт. Таким образом, может работать до 64Тбайт виртуальной памяти. А для реального режима адрес определяется сегментным регистром, но для получения 20-ти разрядного двоичного адреса байта, для получения физического адреса нужно содержимое сегментного регистра сместить на 4 разряда влево и к нему прибавляются 16-ти разрядное смещение ( то есть исполняемый адрес), которое формируется в команде. Физический адрес следующей исполняемой команды = содержимое CS + содержимое IP(указатель команд) Например, адрес следующей исполняемой команды: ФА = (CS) + (IP) (CS) = 7A1516 = 011110100001010100002, (IP) = C7D916 = 11000111110110012. ФА = 8692916 = 100001101001001010012 Формат данных Рассматриваемый процессор может работать с: - Целыми двоичными без знака; - Целыми двоичными со знаком; - Действительными с плавающей точкой; - Двоично-десятичными; - Строками и указателями. Двоичные десятичные без знака может занимать байт, слово или двойное слово и принимать значения от: 0..255 (для байта); 0..65535 (для слова); 0..4294967295 (для двойного слова). Двоичное со знаком, тоже могут занимать байт, слово или двойное слово. Они хранятся в дополнительном коде и формат у них такой: 7, 15, 31 – знаковый разряд; а остальные - цифровые. Дополнительный код любого числа в любой системе счисления может быть получен по формуле: X = 10n - |X|, где n – разрядность числа. Например, представим в слове отрицательное 16-ричное число -AC716 104 - AC7 = F539. Дополнительный код двоичного числа может быть получен инверсией разрядов и прибавлением 1 к младшему разряду. Например, - 12 в байте: 1) 12 = 000011002, 2) инверсия – 111100112, 3) дополнительный код – 111101002. В машине вычитание заменяется сложением числа с дополнительным кодом, поэтому удобно вычислить: Например: 65 – 42 = 23. 1) 65 = 010000012, 2) 42 = 001010102, 3) - 42 = 110101102, 4) 65 - 42 = 000101112 = 20 + 21 + 22 + 24 = 1+2+4+16=23 Числа с плавающей точкой могут занимать 32 бита или 64 бита или 80 бит, и называются короткое вещественное, длинное вещественное, рабочее вещественное. Формат числа с плавающей точкой состоит из трех полей: <знак числа>, <машинной порядок>, <мантисса>. короткое вещественное 1+ 8 + 23 - 10±32 - + 10±32 длинное вещественное 1+ 11 + 52 - 10±308 - + 10±308 рабочее вещественное 1+ 15 + 64 - 10±4932 - + 10±4932. Машинный порядок (Пм) включает в себя неявным образом знак порядка и связан с истинным порядком (Пи) формулой: Пм = Пи + 12710 (102310, 1638310). Предполагается, что мантисса нормализована и старший единичный разряд мантиссы не помещается в разрядную сетку. Например, для короткого вещественного: Пример, 306010 представить в виде числа с плавающей точкой, занимающего 4 байта. 1) 306010 = BF416 £ |M| <1
2) нормализуем число 0. BF4*10316 3) получим машинный порядок Пм = 316 + 7F16 = 8216 4) запишем в разрядную сетку в 2-ичной системе счисления: 0 1000 0010 011 1111 0100 0000 0000 00002 Или в 16-ричном виде: 413F400016. 0100 0001 0 011 1111 0100 0000 0000 00002 Двоично-десятичные данные - процессором могут обрабатываться 8-ми разрядные в упакованном и неупакованном формате, и сопроцессором могут обрабатываться 80-ти разрядные данные в упакованном формате. Упакованный формат предполагает хранение двух цифр в байте, а неупакованный – хранит одну цифру в цифровой части байта. Строки Строки – это последовательности бит, байтов, слов или двойных слов. Каждому символу отводится один байт и представляется в ASCII-коде. Указатели Указатели могут быть двух типов: - Длинный указатель, занимающий 48 бит: селектор(16разрядов) + смещение(32разряда); - Короткий указатель, занимающий 32 бита – только смещение(32 разряда). Форматы команд Команда – это последовательность двоичных кодов, разделенная на две подпоследовательности: (операционная часть) одна говорит процессору, что нужно сделать, то есть определяет операцию, а вторая (адресная часть) – где взять данные и куда отправить данные. Рассматриваемый процессор может работать с безадресными командами, одно-, двух- и трехадресными командами. При этом данные могут находится в регистрах, в оперативной памяти или непосредственно в команде. Команда в памяти может занимать в памяти различное количество байт в памяти от 1 до 15 байт и длина команды зависит от кода операции, количества и места расположения операндов. Наиболее часто используются двухадресные команды. Одноадресные команды могут работать с операндами, расположенными в памяти и регистрах, для двухадресных команд существует много форматов, такие, как: R-R M-M R-M M-R R-D M-D, где R – регистр, M – память, D – данные. Операнды могут находиться в регистрах, памяти и непосредственно в команде и размер операндов может быть - байт, слово или двойное слово. Исполняемый адрес операнда в общем случае может состоять из трех частей: <база><индекс><смещение>, например, [BX] [SI] M. Существуют различные способы адресации операндов, такие как: 1.регистровая 2.непосредственная 3.прямая 4.косвенно-регистровая 5.по базе со смещением 6.прямая с индексированием 7.по базе с индексированием 8.косвенная адресация с масштабированием 9.базово-индексная с масштабированием 10.базово-индексная с масштабированием и смещением. Адресации с 8 по 10 используются только в защищенном режиме. Машинный формат двухадресной команды, для которой один операнд находится всегда в регистре, а второй –в регистре или памяти можно представить следующим образом: “dispH/dispL” – “старшая / младшая часть смещения. Поля “код операции” и иногда “reg” определяют выполняемую операцию. Поле “d” определяет место хранения первого операнда. Поле “w” определяет с какими данными работают: с байтами, или словами. Если w = 0, команда работает с байтами, w = 1 - со словами. reg” - определяет один операнд, хранимый в регистре. Поля “mod”, “disp H” и “disp L” определяют второй операнд, который может храниться в регистре или в памяти. Если mod = 11, то второй операнд находится в регистре, он определяется полем “r/m”, а “disp H/disp L” – отсутствует, команда будет занимать 2 байта в памяти, если mod<> 11, то второй операнд находится в памяти. Значение поля “mod” определяет как используется смещение: mod
Поля “reg” и “r/m” определяют регистры:
Физический адрес определяется так:
Примеры команд с различной адресацией операндов: В командах на Ассемблере результат всегда пересылается по адресу первого операнда. 1) Регистровая. Операнд находится в регистре. MOVAX, BX ; (BX) ®AX (содержимое BX пересылается в AX) Машинный формат: 1001 0011 1100 0011 “код операции” 100100 “d” = 1 “w” = 1 “mod” = 11 “reg” = 000 “r/m” = 011 2) Непосредственная, то есть операнд содержится непосредственно в команде. MOVAX, 25; 25 ®AX CONSTEQU34h; именованная константа CONST MOV AX, CONST; 34h ® AX 3) Прямая Если известен адрес памяти, начиная с которого размещается операнд, то в команде можно непосредственно указать этот адрес. MOVAX, ES : 0001; ES – регистр сегмента данных, 0001 – смещение внутри сегмента. Содержимое двух байтов, начиная с адреса (ES) + 0001 пересылаются в AX - ((ES) + 0001) ®AX. Прямая адресация может быть записана с помощью символического имени, которое предварительно поставлено в соответствие некоторому адресу памяти, с помощью специальной директивы определения памяти, например: DB – байт, DW – слово, DD – двойное слово. Если в сегменте ES содержится директива Var_p DW, тогда по команде MOV AX, ES :Var_p; ((ES) + Var_p) ®AX. Например, если команда имеет вид: MOV AX,Var_p;((DS) + Var_p) ®AX. 4) Косвенно-регистровая Данный вид адресации отличается от регистровой адресации тем, что в регистре содержится не сам операнд, а адрес области памяти, в которой операнд содержится. MOVAX, [SI]; Могут использоваться регистры: SI, DI, BX, BP, EAX. EBX, ECX, EDX, EBP, ESI, EDI. Не могут использоваться: AX, CX, DX, SP, ESP. 5) По базе со смещением MOVAX, [BX]+2; ((DS) + (BX) + 2) ®AX. ºMOVAX, [BX + 2]; ºMOVAX, 2[BX];косвенно-регистровая адресация со смещением по умолчанию берем регистр DS прибавляем к нему содержимое регистра BX и еще прибавляется 2 и пересылается глобально с этого адреса в регистр АХ. MOV AX, [BP + 4]; ((SS) + (BP) + 4) ®AX. 6) Прямаясиндексированием MOV AX, MAS[SI] ; ((DS) + (SI) + MAS) ®AX MAS – адрес в области памяти. С помощью этой адресации можно работать с одномерными массивами или полями структур. Символическое имя определяет начало массива, а переход от одного элемента к другому осуществляется с помощью содержимого индексного регистра. 7) По базе с индексированием MOVAX, Arr[BX][DI] ; ((DS) + (BX) + (DI) + Arr) ®AX. – физический адрес двух байтов DI идем по строке, то есть от одного элемента к другому в строке, BX осуществляет переход от одной строки к другой. Эта адресация используется для работы с двумерными массивами (например, с массивами структур). Символическое имя определяет начало массива, с помощью базового регистра осуществляется переход от одной строки матрицы к другой, а с помощью индексного регистра - переход от одного элемента к другому внутри строки. Программист сам определяет содержимое индексного регистра на 1, 2, 4 в зависимости от желаемого типа байта, слова, двойного слова, а содержимое базового регистра на – количество элементов строки, умноженное на размерность элемента массива. Особенности использования команд пересылки: 1.Нельзя пересылать информацию из одной области памяти в другую; (можно через команды работы со строками) 2.Нельзя пересылать информацию из одного сегментного регистра в другой;(использование стека в качестве промежуточного хранения) 3.Нельзя пересылать непосредственный операнд в сегментный регистр, но если такая необходимость возникает, то нужно использовать в качестве промежуточного один из регистров общего назначения. MOV DX, 100h MOV DS, DX 4. Нельзя изменять командой MOV содержимое регистра CS. 5. Данные в памяти хранятся в «перевернутом» виде, а в регистрах в «нормальном» виде, и команда пересылки учитывает это, например,R DW 1234h В байте с адресом R будет 34h, в байте с адресом R+1 будет 12h. MOV AX, R ;12h ® AH, 34h ® AL. 6. Размер передаваемых данных определяется типом операндов в команде. XDB ?; Х - адрес одного байта в памяти. YDW ?; Y определяет поле в 2 байта в памяти. MOVX, 0; очищение одного байта в памяти. MOVY, 0; очищение двух байтов в памяти. MOVAX, 0 ; очищение двух байтов регистра MOV [SI], 0; сообщение об ошибке. В последнем случае необходимо использовать специальный оператор PTRдляопределение типа операнда. <тип>PTR<выражение> Выражение может быть константным или адресным, а тип это: BYTE, WORD, DWORD ит.д. bytePTR 0 ;0 воспринимается как байт wordPTR 0 ;0 воспринимается как слово bytePTRop1 ;один байт в памяти начиная с этого адреса MOV byte PTR [SI], 0; ºMOV [SI], byte PTR 0; ºMOV [SI], word PTR 0; 0® ((DS) +(SI)) 7. Если тип обоих операндов в команде определяется, то эти типы должны соответствовать друг другу. MOVAH, 500; сообщение об ошибке. MOVAX, X; ошибка, Х – 1байт, АХ – 2 байта. MOV AL, R; ошибка MOV AL, byte PTR R; (AL) = 34h MOV AL, byte PTR R+1; (AL) = 12h К командам пересылки относят команду обмена значений операндов. XCHG OP1, OP2; r«rÚr«m MOV AX, 10h; MOV BX, 20h; XCHG AX, BX; (AX) = 20h, (BX) = 10h Для перестановки значений байтов внутри регистра используют BSWOP. (EAX) = 12345678h BSWOP EAX; (EAX) = 78563412h Марта. Лекция 3 К командам пересылки относят: - Команды конвертирования: CBW ; безадресная команда, (AL) ®AX. CWD ;( AX) ®DX:AX CWE ; ( AX) ®EAX (для i386 и выше) CDF ; (EAX) ®EDX:EAX (для i386 и выше) - КомандыусловнойпересылкиCMOVxx CMOVL AL, BL;если (AL) < (BL), то (BL) ® (AL) - Загрузка адреса. LEAOP1, OP2; вычисляет адрес OP2 и пересылает первому операнду, который может быть только регистром. LEA BX, M[DX][DI] Структура программы на Ассемблере Ассемблер – это язык программирования низкого уровня и программа, написанная на Ассемблере, должна пройти три(четыре) этапа обработки на компьютере, как и программа, написанная на любом другом языке программирования. Этапы: I этап - преобразование исходного модуля в объектный – ассемблирование. Исходных модулей может быть один или несколько. II этап - с помощью компоновщика и программы редактора связей объектные модули (файлы) объединяются в загрузочный, исполняемый модуль (с расширением .EXE). III этап – выполнение программы, то есть файл может быть выполнен. Существует два типа исполняемых модулей (исполняемых файлов): exe-файл (<имя>.exe) и com-файл (<имя>.com). В результате выполнения второго этапа получается исполняемый exe-файл, чтобы получить com-файл, необходимо выполнить еще один этап обработки - преобразование exe-файла в com-файл, если удовлетворяет определенным требованиям. Исходный файл, то есть программа на Ассемблере состоит из команд и директив. Команды преобразуются в машинные коды, реализующие алгоритм решения задачи, а директивы определяют форматы данных, выделяют для них место в памяти и говорят, каким образом нужно провести ассемблирование и редактирование. Директивы описывают, каким образом необходимо выполнять ассемблирование и объединение модулей. Они описывают форматы данных, выделяемые области памяти для программ и т.д. В общем виде формат команд можно представить следующим образом: [<имя>[:]] <код операции> [<операнды>] [;комментарии] Поля отделяют друг от друга хотя бы одним пробелом. В квадратных скобках указаны необязательные поля, все поля, кроме <код операции>, могут отсутствовать.<имя> - символическое имя Ассемблера. Имя используется в качестве метки для обращения к этой команде, передачи управления на данную команду. [:] после имени означает, что метка является внутренней (на эту команду можно передать управление только из этого кодового сегмента, в котором она содержится). <код операции>определяет какое действие должен выполнить процессор. Поле <операнды> содержит адреса данных, или данные, участвующие в операции, а также место расположения результатов операции. Операнды могут отсутствовать, а если и есть, то их может быть от 1 до 3, они отделяются друг от друга запятой. [;комментарии]Комментарии отделяются кроме пробела еще и ";" и могут занимать всю строку или часть строки. Например: JMPM1 ;команда безусловной передачи управления на команду с меткой M1. ------------/-------/------------ M1: MOVAX, BX ;пересылка содержимого регистраBXв регистрAX. В комментарии будем записывать в виде (BX)®AX -----------/--------/------------ Директива, как и команда, состоит из четырех полей: [<имя>] <код псевдооперации><операнды> [;комментарии] Здесь <имя> - символическое имя Ассемблера, <код псевдооперации> - определяет назначение директивы. Операндов может быть различное количество и для одной директивы. Например: M1 DB 1, 0, 1, 0, 1 ;директива DB определяет 5 байтов памяти и заполняет их 0 или 1 соответственно, адрес первого байта – М1. M2 DB ?,?,?; директива DBопределяет три байта памяти ничем их не заполняя, адрес первого – M2. Proc ; директива начала процедуры, endp ; директива конца процедуры, Segment ; директива начала сегмента, ends ; директива конца сегмента. Исходный код на Ассемблере состоит из команд, директив и комментариев; оформляется с помощью трех сегментов( стека, данных и кода) и заканчивается директивой end, ее параметр определяет точку вохода в программу. ; сегментстека Sseg Segment… -----/------- Sseg ends ; сегментданных Dseg Segment… -----/------- Dseg ends ; сегменткода Cseg Segment… -----/------- Cseg ends Endstart Каждый сегмент начинается директивой начала сегмента - Segment и заканчивается директивой конца сегмента - ends, в операндах директивы Segment содержится информация о назначении сегмента. Назначение сегментов определяются параметрами в директивах начала сегмента, в кодовом сегменте сразу за директивой Segment должна располагаться директива, устанавливающая соответствия между именами в директивах Segment и сегментными регистрами В кодовом сегменте специальная директива ASSUMESS:SSeg, DS:DSeg, CS:CSeg, ES:DSeg; на DSeg ссылаются и DS, и ES. Кодовый сегмент оформляется как процедура, это может быть одна процедура или несколько последовательных процедур, или несколько вложенных процедур. Структура кодового сегмента с использованием двух вложенных процедур выглядит следующим образом: Cseg Segment…
Популярное: Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ... Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (413)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |