X86 BIOS int 13H,AH=02(读取软盘)和堆栈段

X86 BIOS int 13H,AH=02(读取软盘)和堆栈段,x86,stack,pc,bios,segment,X86,Stack,Pc,Bios,Segment,如果我没有初始化堆栈段,会发生什么 在某些情况下会导致读取错误吗 谢谢~在调用软件中断(或进行任何调用)时,堆栈段寄存器最好有一个有效值,因为int(或call)指令需要一个有效堆栈来存储代码的返回地址。此外,被调用的子例程通常期望有一个有效的堆栈,在该堆栈中它可以推送一些寄存器以完成其工作 事实上,堆栈段寄存器最好始终有一个有效值,否则一旦出现第一次周期性中断,一切都会崩溃并烧掉。谢谢~我理解初始化堆栈段的重要性。什么是“第一次周期性中断发生”?如果我不初始化堆栈段,我可以使用多大的堆栈?我可

如果我没有初始化堆栈段,会发生什么

在某些情况下会导致读取错误吗


谢谢~

在调用软件中断(或进行任何调用)时,堆栈段寄存器最好有一个有效值,因为
int
(或
call
)指令需要一个有效堆栈来存储代码的返回地址。此外,被调用的子例程通常期望有一个有效的堆栈,在该堆栈中它可以推送一些寄存器以完成其工作


事实上,堆栈段寄存器最好始终有一个有效值,否则一旦出现第一次周期性中断,一切都会崩溃并烧掉。

谢谢~我理解初始化堆栈段的重要性。什么是“第一次周期性中断发生”?如果我不初始化堆栈段,我可以使用多大的堆栈?我可以为堆栈段设置多大?IBM PC有一个定期中断控制器芯片,它可以定期生成硬件中断。(大约每秒50次)当其中一个中断发生时,必须有一个有效的堆栈,否则就会发生崩溃。这就是为什么我们总是在操作堆栈段寄存器或堆栈指针寄存器之前禁用中断(
cli
),然后再重新启用它们(
sti
)。为了设置堆栈,必须初始化堆栈段寄存器和堆栈指针寄存器。但通常情况下,当程序开始运行时,操作系统已经为您设置了一个堆栈,因此通常您不必设置自己的堆栈,这意味着您根本不需要担心整个问题。堆栈应该足够大,可以包含您在其中分配的任何变量,加上几百个字节,用于程序运行时可能发生的中断。如果我必须建立一个堆栈,我会给它几个KB。