nar*_*tra 2 syntax x86 assembly
任何人都能解释一下这段汇编代码吗?
LINEAR_DATA_SEL equ $-gdt
dw 0FFFFh
dw 0
db 0
db 92h ; present, ring 0, data, expand-up, writable
db 0CFh ; page-granular (4 gig limit), 32-bit
db 0
Run Code Online (Sandbox Code Playgroud)
这里我已经搜索了命令equ,dw和db,但我无法理解这段代码实际上做了什么(尤其是第一行).什么是$ -gdt以及dw和db的参数?如果可能,请详细解释.提前致谢.
它实际上是全局描述符表中的一个8字节条目.它创建一个描述符,将整个4G地址空间作为选择器.
在equ $-gdt设置在汇编等于该位置(之间的差的值$)和gdt标签.换句话说,它是GDT本身内该条目的偏移量.
GDT条目的结构如下:

以下解释各个部分.

对于您的具体值:
(a) dw FFFFh
(b) dw 0
(c) db 0
(d) db 92h ; present, ring 0, data, expand-up, writable
(e) db CFh ; page-granular (4 gig limit), 32-bit
(f) db 0
Run Code Online (Sandbox Code Playgroud)
基址从计算f,c和b领域,从最显著到最低-因为这些都为零,基本为零.
选择器限制是从最右边的4位e和全部计算的a,0xfffff在这种情况下给出.这有1添加给它0x100000.请参阅下面第3点,了解这意味着什么.
e(标志)的前4位设置粒度(4K而不是1字节)和操作数大小(32位).它具有4K(12位)的粒度和0x100000(20位)的页数,可为您提供完整的32位(4G)地址空间.
该d字段是访问字节,并根据以下内容设置以下属性0x92:
Pr present(内存中)位为true.Privl privelege级别为0(需要响铃0才能访问).Ex 可执行位0(数据选择器).DC,方向位为0,段长大.RW 1,内存是可写的.Ac 访问位设置为0.