一个操作系统实现里面汇编看不懂
%macro Descriptor 3
dw %2 & 0FFFFh ; 段界限1
dw %1 & 0FFFFh ; 段基址1
db (%1 >> 16) & 0FFh ; 段基址2
dw ((%2 >> 8) & 0F00h) | (%3 & 0F0FFh) ; 属性1 + 段界限2 + 属性2
db (%1 >> 24) & 0FFh ; 段基址3
%endmacro ; 共 8 字节
%macro Gate 4
dw (%2 & 0FFFFh) ; 偏移1
dw %1 ; 选择子
dw (%3 & 1Fh) | ((%4 << 8) & 0FF00h) ; 属性
dw ((%2 >> 16) & 0FFFFh) ; 偏移2
%endmacro ; 共 8 字节我以前学过汇编但这个汇编我从来没看过
%1 、%2、%3 是什么意思
& 这个又是什么意思
>> 这个又是什么意思
dw %2 & 0FFFFh 还有这个%2 & 0FFFFh 什么意思
dw ((%2 >> 16) & 0FFFFh)还有这个什么意思
或者把这些汇编GDT结构 用C语言方式 表示 比如 mov ax,5相当C语言ax=5
这是一个宏,是个很巧妙的手法,将分散存储的段基址、段界限、段属性很好的统一了起来,便于查看。
%macro是NASM里的多行宏标识。
这里的意思是定义一个名为Descriptor的标识,存在3个参数,一般默认就是%1~%3.
至于为什么是那个结构,那是因为描述符就是那个样子的,关于描述符是什么书里有说到吧?(GDT或LDT的一个表项)。
%macro Gate 4说明定义了一个Gate标识,有四个参数。这个宏很好的说明了门描述符的结构。
最后,建议lz学点基础性的知识,目前这些不适合你 这个Linux下的AT&T的汇编吧,楼主可以自己去看一下, 慢慢看,没有什么不懂的
页:
[1]