Endm L: inc word ptr W
Jmp M Здесь параметром является имя команды и тип операнда. 3) Вид заголовка:IRPC P , S1S2….SK IRPC P , S1S2….SK <тело> еndm P - формальный параметр, Si –символы, любые, кроме пробелов и точки с запятой, если необходимо использовать здесь пробел или точку с запятой, то надо всю последовательность символов записать в угловых скобках. Встречая такой блок, макрогенератор заменяет его на k копий тела так, что в i-той копии параметр Р заменен на символ Si. Например: IRPC A, 175P add AX , 1 add AX, A → add AX , 7 endm add AX , 5 add AX , P
31) Макрооператоры в Ассемблере В макроопределениях и в блоках повторения могут использоваться специальные операторы Ассемблера, называемые макрооператорами, для записи формальных и фактических параметров. 1) & - амперсанд – используется для того, чтобы указать границы формального параметра, выделить его из окружающего текста, при этом в текст программы он не записывается. Например: а) IRP W, <1,5,7> var1 DW ? VAR&W DW? → var5 DW ? endm var7 DW ? б) IRPC A, ″ < DB ′A, ″, ″B′ DB ′A, &A, &A&B′ → DB ′A, <, <B’ endm Здесь параметры W и А заменяются на фактические параметры только в том месте, где они выделены макрооператором &. Если знаков & рядом несколько, то макрогенератор удаляет за один проход только один из них, и это используется для организации вложенных блоков повторений и макросов. Например: ………………………….. IRPC P1, AB IRPC P2, HL inc AH IRPC P2, HL inc A&P2 inc AL inc P1&&P2 → endm → inc BH endm IRPC P2, HL inc BL endm inc B&P2 endm 2) Макрооператор < > -угловые скобки действует так, что весь текст, заключенный в эти скобки, рассматривается как одна текстовая строка, и в неё могут входить пробелы, запятые и другие разделители. Этот макрооператор часто используется для передачи текстовых строк в качестве параметров для макросов и для передачи списка параметров вложенному макроопределению или блоку повторений. а) IPR V , <<1,2>,3> DB 1,2 DB V → DB 3 endm б) IRPC S, <A; B> DB ´A´ DB ´S´ → DB ´ ; ´ endm DB ´B´ Если в примере б) скобок < > не будет, то символ В будет восприниматься как комментарий после; 3) Макрооператор ! - восклицательный знак используется аналогично угловым скобкам, но действует только на один следующий символ, так что, если этим символом является один из символов ограничения - запятая, угловая скобка и т.д., то он будет передаваться как параметр или часть параметра. 4) Макрооператор % - процент указывает на то, что следующий за ним текст является выражением, которое должно быть вычислено, и результат передается как параметр. Например: K EQU 4 ………… DW k+1 IRP A, <k+1, % k+1, W% k+1> DW 5 DW A → DW W5 Endm 5) Макрооператор ;; - две точки с запятой определяют начало макрокомментария. Текст макрокомментария не включается в макрорасширения и в листинг программы.
22) Макросы в Ассемблере, их описание и использование Описание макроса, макроопределение, имеет вид: <имя макроса> Macro <формальные параметры> LOCAL <список имен> <тело> Endm Первая строка - это заголовок макроса, имя макроса будет использоваться для обращения к этому Макроопределению. Формальные параметры записываются через запятую и/или пробел, это локальные имена, никак не связанные с объектами программы. Количество Формальных параметров не ограничено, но они должны умещаться в одной строке. Поскольку на место каждой Макрокоманды записывается Макрорасширение, кроме того, одни и те же метки могут использоваться и в самой программе, чтобы не возникало ошибки «метка уже определена», директива LOCAL <список имен> перечисляет через запятую имена меток, которые будут использоваться в теле макроса. <тело> - это копируемый фрагмент программы, любое количество любых директив и команд Ассемблера, в которых используются формальные параметры. Макрокоманда – обращение к макросу:<имя макроса> <фактические параметры> Фактические параметры указываются через запятую или/и пробел. В качестве фактического параметра может быть использован любой текст, в том числе и пустой, но он должен быть сбалансирован по кавычкам и угловым скобкам, и в нем не должно быть запятых, пробелов и точек с запятой вне кавычек и скобок, т.к. запятая и пробел могут отделять один параметр от другого, а точкой с запятой начинается комментарий. С помощью директивы EXITM можно осуществить досрочный выход из макроса, если использовать команды условной генерации IF x … endif. C помощью директивы PURGE <имя макроса> можно отменить определенный ранее макрос. Эта директива часто используется сразу после директивы INCLUDE, включившей в текст программы файл с большим количеством готовых макроопределений. Примеры макросов 1)Использование макросов позволяет составлять программу в терминах более крупных операций. Опишем в виде макроса оператор IF x< y then GOTO L. IF_L MACRO x, y, L Mov AX, x Cmp AX, Y Jl L Endm Используя этот макрос, поиск После макрогенерации в программе будет текст: минимального из 3-х чисел запишется так: ------------------------------ ; DX = min (A,B,C) mov DX, A Mov DX, A mov AX, A IF_L A, B, M1 cmp AX, B Mov DX, B jl, M1 M1: IF_L DX, C, M2 mov DX, B Mov DX, C M1: mov AX, DX M2: ---------------------- cmp AX, C Jl M2 Mov DX, C M2: ------------------------------ 2) Обращение к процедурам будет нагляднее, если передачу параметров оформить как макрос. Например: Вычислить CX = NOD(A,B) + NOD(C,D), если есть процедура вычисления NOD(x,y), и результат ее находится в АХ. CALL_NOD MACRO x, y Mov AX, x Mov BX, y call NOD ; (AX) = NOD(x, y) Endm
Популярное: Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (536)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |