gpt4 book ai didi

assembly - NASM:发出非标量(链接时间)值的 MSW

转载 作者:行者123 更新时间:2023-12-02 00:09:20 26 4
gpt4 key购买 nike

<分区>

我试图定义一个常量 IDT (Interrupt Descriptor Table)输入 NASM ,为此,我需要将双字地址的高位字发送到数据表中,直到链接时才解析。有办法吗?

这是中断处理程序:

;;; Interrupt 3 (breakpoint) handler.  For now, just poke the screen and halt.

align 8
int3:
mov [0xb8000],dword '* * '
hlt

这是引用它的 IDT 条目。偏移量的最重要和最不重要的字需要分开存储并且不连续:

        ;; Interrupt 3 - breakpoint
dw int3 ; offset (low) <---- WORKS
dw codesel ; code selector
db 0 ; unused
db 0b10001111 ; present, ring 0, 32-bit trap gate
dw int3 >> 16 ; offset (high) <---- ASSEMBLY ERROR

NASM 正确地导致 LD 发出 int3 地址的低位字,但高位字在汇编时失败并出现此错误:

pgm.asm:240: error: shift operator may only be applied to scalar values

NASM 不会对链接时未定义的值进行数学计算。我明白,但我需要一种方法来解决这个问题。我可以:

  • 绝对定位 int3
  • 在运行时而非汇编时构建 IDT

我可能最终会在运行时构建 IDT,但最好知道是否有一种方法可以使汇编器/链接器将未解析的地址的高位字发送到数据表中直到链接时间。


详情:

  • NASM 2.20.011
  • NASM 输出格式 aout
  • LD 版本 2.22
  • 32 位模式(NASM“bits 32”指令发布)

1 这可能是一个错字;今天我的发行版中的最新版本是 2.12.01。在我写这个问题时可用的最新版本 nasm 是 2.10.01。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com