百科问答小站 logo
百科问答小站 font logo



为什么Interrupt需要存储PSW(程序状态字)但子程序调用不需要? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      

其实这是一个高级语言的编译器行为。


因为高级语言的子程序不需要获得调用者的PSW(EFLGAS)信息。

以x86环境为例:

       CMP EAX, EBX JZ XXX     

如果在CMP执行完以后发生中断,此时如果不保存EFLAGS信息,那么当中断返回时,CMP EAX,EBX的结果可能就丢失了,JZ的判断可能就出错了,所以中断需要EFLAGS。

而在高级语言里,上面的这两句在高级语言里都是一句话(if (a==b) {}),不可能拆成两条指令,所以高级语言,函数调用自然不会把EFLAGS传给被调用者。

但如果是纯汇编语言写的代码,那么要不要传递EFLAGS就看代码需求了,像BIOS中断里的INT 13H之类的,就是靠EFLAGS的某个标志位来判断是否成功的。




  

相关话题

  有大神研究过华为 P40 上的鸿蒙 OS 2.0 吗?事实它到底是个全新的自主操作系统还是个套壳安卓? 
  如何实现一个安全的thread.stop的api? 
  多核CPU中,利用多线程进行排序中出现了一些奇怪的现象,不知道其背后的原因是什么,希望有人能给予解答? 
  重装系统的成本有多高? 
  安卓是否在逐渐走向闭源,为什么我国手机公司却仍不开发自己的系统呢? 
  为什么同样是8G运行内存,Windows能同时开一大堆后台进程和前台应用,而Android不可以? 
  如何看待 Apple Mac 将无法支持最新微软 Windows 11 操作系统? 
  为啥那么多做手机的公司,只有苹果做成了自己的操作系统iOS,其它公司的操作系统都基于Android? 
  win和ubuntu的内存管理有什么不一样? 
  为什么操作系统不能屏蔽底层的架构(arm,x86,mips),为应用软件提供一个统一的运行环境呢? 

前一个讨论
8086CPU的16位数据线如何传送大于16位的数据?
下一个讨论
为什么汇编mov指令不能用lock前缀?





© 2025-03-28 - tinynew.org. All Rights Reserved.
© 2025-03-28 - tinynew.org. 保留所有权利