汇编代码的解释

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的参数?如果可能,请详细解释.提前致谢.

pax*_*blo 7

它实际上是全局描述符表中的一个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)
  1. 基址从计算f,cb领域,从最显著到最低-因为这些都为零,基本为零.

  2. 选择器限制是从最右边的4位e和全部计算的a,0xfffff在这种情况下给出.这有1添加给它0x100000.请参阅下面第3点,了解这意味着什么.

  3. e(标志)的前4位设置粒度(4K而不是1字节)和操作数大小(32位).它具有4K(12位)的粒度和0x100000(20位)的页数,可为您提供完整的32位(4G)地址空间.

  4. d字段是访问字节,并根据以下内容设置以下属性0x92:

    • Pr present(内存中)位为true.
    • Privl privelege级别为0(需要响铃0才能访问).
    • Ex 可执行位0(数据选择器).
    • DC,方向位为0,段长大.
    • RW 1,内存是可写的.
    • Ac 访问位设置为0.