Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Пояснить кое-чот надо.

261
23 марта 2006 года
ahilles
1.5K / / 03.11.2005
Я тут недавно asm изучать начал
Скажите пожалуйста что такое макропределения и чем его едят.
12K
31 марта 2006 года
ANdroid
37 / / 31.03.2006
Цитата:
Originally posted by ahilles
Я тут недавно asm изучать начал
Скажите пожалуйста что такое макропределения и чем его едят.

Ну это своего рода процедуры. Отличий несколько:
- могут быть параметры (как у процедур с параметрами в паскале)
- процедуры вызывается call [имя], а макрос: [имя] [параметры]
- при вызове процедуры осуществляется переход по cs:xxxx с последующим возвратом, а в случае макроса при трансляции на вместо строки вызова макроса вставляется весь код макроса и выполняется с дальнейшим увеличением ip регистра

макроопределение (описание макроса):
[имя] macro [аргументы]
тело
endm

Макроопределение может располагаться в начале исходного текста программы, в отдельном файле (включение: include имя_файла), в макробиблиотеке
пока это все... подробнее в книгах

13K
01 апреля 2006 года
ant-str
36 / / 01.04.2006
макросы- это одно из средств языка программирования, которое позволяет повторяющиеся участки кода не прописывать каждый раз
от процедур отличается тем, что повторяющийся код перед компиляцией (препроцессором) добавляется в текст программы, а затем компилируется.
процедуры же вызываются специальными командами процессора (если IA-32, то jump, jxx, call и так далее) и в откомпилированной программе встречаются только раз.
17K
07 апреля 2006 года
Potter
6 / / 07.04.2006
Цитата:
Originally posted by ahilles
Я тут недавно asm изучать начал
Скажите пожалуйста что такое макропределения и чем его едят.


Макросы могут выступать в роли надстройки над процедурой, так например в языках высокого уровня делается. Ведь главное отличие макроса от процедуры в том, что процедура не может иметь параметров, а макрос может, поэтому в паскале, си и проч. мы используем именно макросы, а не процедуры.

Например на С++ пишем:

proc(a, b);

На Асме это будет выглядеть так:

push bp
mov bp, sp
push b
push a
push cs
call proc
add sp, 4
mov sp, bp
pop bp

соответственно, в самой процедуре proc обращение к параметрам будет a = [bp - 4], а b = [bp - 2],да, кстати, в С и Pascal параметры передаются по разному: в С push b/push a, а в Pascal push a/push b.
Вот так. :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог