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,看上去是個結構數

就是這麼簡單


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