nasm汇编中的宏定义

最近看orange’s 一个操作系统的实现,发现nasm中的宏汇编不是很清楚,在此详细记录一下

256 %macro Descriptor 3

258 dw %1 & 0FFFFh ; 段基址1 257 dw %2 & 0FFFFh ; 段界限1 259 db (%1>>16) & 0FFh ; 段基址2
260 dw ((%2>>8) & 0F00h) | (%3 & 0F0FFh) ; 属性1+段界限2+属 性2
261 db (%1>>24) & 0FFh ; 段基址3 262 %endmacro; 共 8 字节 在段[SECTION.gdt]中并列有3个Descriptor,看上去是个结构数

上面的是宏的详细情况,下面是调用宏

LABEL_GDT: Descriptor 0, 0, 0 ; 空描述符

其中Descriptor 0,0,0表示传入的三个参数,这三个参数在宏定义中就是以%1,%2,%3表示,所以将%1用传入的参数替换掉即可

替换后的情况即:

 dw  0& 0FFFFh ; 段基址1 257 dw %2 & 0FFFFh ; 段界限1 259 db (%1>>16) & 0FFh ; 段基址2
 dw ((0>>8) & 0F00h) | (%3 & 0F0FFh) ; 属性1+段界限2+属 性2
 db (0>>24) & 0FFh ; 段基址3 262 %endmacro; 共 8 字节 在段[SECTION.gdt]中并列有3个Descriptor,看上去是个结构数

就是这么简单


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章