360笔试题:中断方式的基本概念

有这样一道360笔试题:

下述哪种情况会提出中断请求?
A.在键盘输入过程中,每按一次键
B.两数相加结果为零
C.计算结果溢出
D.一条系统汇编指令执行完成

【答 案】A

【知识点】中断方式

【解 析】本题考查中断请求事件的类型。从大的方面来说,有两种情况会“中断”正在CPU上执行的程序。一种是正在执行的指令发生了某种特定的“异常”事件,例如,对指令译码时发生“非法操作码”、取数时发生“缺页”或“访问越权”等,这些事件的发生会导致CPU无法继续执行当前程序,因而CPU会“中断”当前程序而转到特定的异常处理程序执行;另一种情况是CPU外部的I/O子系统发生了某些特殊的事件,如打印机缺纸、DMA传送结束等。这些事件的发生需要CPU进行相应的处理,因而I/O子系统会向CPU发出“中断请求信号”。通常,前一种情况称为“内部异常”,后一种情况称为“外部中断”。

根据题干的描述,笔者认为考题考查的是哪些选项属于“外部中断”事件。显然,选项 A是正确的。对于目前主流的非编码键盘,从键盘输入到主机的键盘接口中的信息是按键的扫描码(即位置码),键盘接口每接受到一个扫描码,就会向CPU发送一个键盘中断请求信号,CPU响应该请求信号后,会调出键盘中断服务程序执行,在该中断服务程序中,将从键盘接口中取出扫描码并转换为按键的ASCII,存入键盘缓冲区。

选项B是错误的,因为两数相加结果为零,不会导致CPU无法继续执行程序,它既不是内部异常事件,更不是外部中断事件。

选项C是错误的,因为计算结果溢出是由CPU执行指令得到的一个结果,而不是由CPU外部的I/O子系统发出的中断请求事件。结果溢出是否作为内部异常,在不同的处理器架构中有不同的处理方式。例如,MIPS架构中,区分无符号整数加/减运算指令和带符号整数加/减运算指令,前者不可能产生溢出异常,而后者在发生溢出时会产生溢出异常。Intel x86架构中,并不区分无符号整数加/减运算指令和带符号整数加/减运算指令,加/减运算指令执行后,所产生的标志信息(如进位/借位标志CF、符号标志SF、零标志ZF、溢出标志OF)都会记录在标志寄存器EFLAGS中,是否产生溢出异常,需要由INTO指令来触发,当执行到INTO指令时,会根据相应标志位OF的取值情况决定是否产生溢出异常。

选项D是错误的。首先,“一条系统汇编指令执行完成”这句话本身有问题,虽然汇编指令与机器指令(通常简称为指令)一一对应,但CPU不能直接执行汇编指令,而且“系统汇编指令”这个概念也是不存在的。其次,若把选项D的意思理解成“一条指令执行完成”,那么结论也是错误的,因为CPU总是一条指令接着一条指令执行,并不会因为一条指令的正常执行完成,而引起“内部异常”或“外部中断”。

本文已收录于《横扫Offer--程序员招聘真题详解700题》一书,开点工作室著,清华大学出版社。更多程序员笔试面试真题的精彩详解请参见该书。

为保证书稿质量,作者及出版社在编写完成后经过反复多次的审核、校对和修改,力求为读者奉献一本内容详实、严谨、准确、精美的实用宝典,因此上市时间有所延后,望各位读者谅解。该书目前已进入印刷环节,预计8月下旬各大网上书店开始发售。我们将会在第一时间通知该书的上市购买信息,并将举行评论送书活动,以感谢各位读者的支持。详细情况请持续关注微信公众账号“开点工作室”。

推荐阅读更多精彩内容

  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 27,613评论 8 105
  • http://blog.csdn.net/maochengtao/article/details/30713459...
    行_d阅读 512评论 0 2
  • 汇编语言学习笔记 三、8086基本指令 数据传送指令 通用数据传送指令 1. MOV传送指令 a. 对标志位无影响...
    卡尔是正太阅读 446评论 0 1
  • 最让人无奈和痛心的不是从别人口中说出来,而是你自己承认,我不知道你自己承认是怎么样种感觉。事后每想起那个瞬间心揪成...
    Adaever阅读 63评论 0 0
  • 文/朵朵鱼 大家好,我是一床被子! 你没看错,我就是一床被子。我是什么样的被子?很简单啊,棉被呗。不过听说现在我的...
    朵朵鱼阅读 590评论 21 24