【发布时间】:2021-08-06 01:12:25
【问题描述】:
有中断什么是关机:
shutdown:
mov ax, 0x1000
mov ax, ss
mov sp, 0xf000
mov ax, 0x5307
mov bx, 0x0001
mov cx, 0x0003
int 0x15
ret ;if interrupt doesnt work
为什么要对寄存器 A 和选择器 SS 进行操作? 我试图删除前三行,但它仍然有效。
【问题讨论】:
-
如果第二条指令是
mov ss, ax,这将更有意义。 -
你必须有一个有效的堆栈才能执行软件中断,因为返回地址和标志被推到那里(即使在这种情况下它不会被使用)。所以我们需要让
ss:sp指向一些有效的内存区域。如果没有这个就可以工作,那么很可能幸运的是,他们已经指向了碰巧可写的地方。我同意@ThomasJager 的观点,即mov ax, ss可能是mov ss, ax的拼写错误。 -
@NateEldredge 为什么不把它写成“答案”?
标签: assembly x86-16 callstack bios