如何解决如何使用 BIOS INT 0x15, AX=0x5307关闭计算机?
有中断什么是关闭计算机:
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 ax,ss
似乎是一个错字,可能应该是 mov ss,ax
。然后这三个指令将堆栈指针设置为1000:f000
。
在调用软件中断之前,您需要设置一个堆栈,其中 ss:sp
指向可以安全写入的内存。否则,返回地址和标志在哪里被推送?而且中断处理程序本身可能期望有一定数量的可用堆栈空间(不知道BIOS是否保证切换堆栈)。
这大概就是这些行的目的。也许 shutdown
子例程是从某个不一定具有有效堆栈的地方跳转到的,或者程序员只是不愿意依赖调用者的堆栈是有效的。如果代码在您的测试中没有这些行的情况下工作,大概是因为您使用已经有效的堆栈调用它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。