公告

Gentoo交流群:87709706 欢迎您的加入

#1 2022-08-26 14:59:40

batsom
管理团队
注册时间: 2022-08-03
帖子: 594
个人网站

宏语法格式如下:
%macro 宏名称 参数个数
宏的内容
%endmacro
宏的第一个参数用%1表示,第二个参数用%2表示,依次类推。



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

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

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

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

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

替换后的情况即:

dw  0 & 0FFFFh                     ; 段基址1
dw  0 & 0FFFFh                     ; 段界限1
db (0>>16) & 0FFh                  ; 段基址2
dw ((0>>8) & 0F00h) | (0 & 0F0FFh) ; 属性1+段界限2+属 性2
db (0>>24) & 0FFh                 ; 段基址3
%endmacro;

共 8 字节 在段[SECTION.gdt]中并列有3个Descriptor,看上去是个结构数

就是这么简单

离线

页脚

Powered by FluxBB

本站由XREA提供空间支持