Пояснить кое-чот надо.
Скажите пожалуйста что такое макропределения и чем его едят.
Я тут недавно asm изучать начал
Скажите пожалуйста что такое макропределения и чем его едят.
Ну это своего рода процедуры. Отличий несколько:
- могут быть параметры (как у процедур с параметрами в паскале)
- процедуры вызывается call [имя], а макрос: [имя] [параметры]
- при вызове процедуры осуществляется переход по cs:xxxx с последующим возвратом, а в случае макроса при трансляции на вместо строки вызова макроса вставляется весь код макроса и выполняется с дальнейшим увеличением ip регистра
макроопределение (описание макроса):
[имя] macro [аргументы]
тело
endm
Макроопределение может располагаться в начале исходного текста программы, в отдельном файле (включение: include имя_файла), в макробиблиотеке
пока это все... подробнее в книгах
от процедур отличается тем, что повторяющийся код перед компиляцией (препроцессором) добавляется в текст программы, а затем компилируется.
процедуры же вызываются специальными командами процессора (если IA-32, то jump, jxx, call и так далее) и в откомпилированной программе встречаются только раз.
Я тут недавно 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.
Вот так. :)