百科问答小站 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的某个标志位来判断是否成功的。




  

相关话题

  32位保护模式下,段基地址应尽量选取16字节对齐的那些地址,可使访问的性能最大化? 
  如何看待程序员的三大浪漫被认为是操作系统、编译原理和图形学? 
  怎么知道自己电脑的CPU支不支持AVX指令集?以及如何使用这些指令集? 
  Windows 是如何击败竞争对手并统治桌面操作系统的? 
  Windows 为什么会提供很多危险的接口? 
  计算机系统是如何显示一个字符的? 
  linux创建的硬链接为什么不占用磁盘空间? 
  对于这一条add指令,ALU是不是会被使用2次来分别计算有效地址和数据?而且是在1个阶段内还是2个阶段 
  汇编转换到机器码的时候,寄存器占几个字节? 
  如何看待「鸿蒙系统一夜之间拥有 57 万个 App」这一说法? 

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





© 2025-02-22 - tinynew.org. All Rights Reserved.
© 2025-02-22 - tinynew.org. 保留所有权利