. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->INT指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第十三章检测题解答,望指正。  [已解决] 回复[ 3次 ]   点击[ 671次 ]  
towersimper
[帖 主]   [ 发表时间:2008-07-31 15:48 ]   [引用]   [回复]   [ top ] 
荣誉值:9
信誉值:3
注册日期:2008-06-12 09:16
(一)执行n号中断源对应的中断服务程序,CS,IP的内容应被修改为:__3__ 
 1、 (IP) = (n*4+2) (CS) = (n*4)  
 2、 (IP) = (n*2+2) (CS) = (n*2)  
 3、 (IP) = (n*4) (CS) = (n*4+2) 
 4、 (IP) = (n*2) (CS) = (n*2+2) 
这道题好解决。先压栈CS,后IP,所以CS的内存单元地址要大。另外,一个中断程序入口的CS和IP各占一个字单元,所以,下一个中断号对应的CS和IP要加上4。故选3。

(二)关于ret 和 iret下列说法错误的是__1__ 
 1、 ret和iret都改变标志寄存器的值 
 2、 ret不改变cs的值,iret改变cs的值 
 3、 ret和iret都改变sp的值 
 4、 ret和iret都改变ip的值 
ret只弹出IP的值,iret先弹出IP,然后CS,最后标志寄存器。因为弹出栈中内容,所以SP的值当然会改变。

(三)用7ch中断例程模拟loop指令的功能,指令序列如下: 
    lp: push bp 
    mov bp,sp 
    dec cx 
    jcxz lpret 
    add [bp+2],bx 
    lpret: pop bp 
    iret 
    关于7ch中断下列说法正确的是__3__ 
 1、 此中断的最大转移位移为128 
 2、 此中断的最大转移位移为1K 
 3、 此中断根据bx中的偏移量实现跳转 
 4、 此中断不能设定跳转的次数 
    此题开始时,有些不大懂,后来才知道,调用中断例程时,依次压栈标志寄存器,CS和IP。此时SP指向栈顶的存储的IP。中断例程执行时,压栈bp,此时SP减2,指向存储的BP的值。把sp的值传给bp后,bp存储的也就是栈顶的地址,所以bp+2就是指向IP的内存地址。[bp+2]就是IP的内容。所以add [bp+2],bx也就相当于把压栈的IP地址加上2。这样子,出栈时,程序将不会转到调用中断例程的跳转指令下一条指令,而是指向(IP)+2的地址处的指令。
towersimper
[第1楼]   [ 回复时间:2008-07-31 15:53 ]   [引用]   [回复]   [ top ] 
荣誉值:9
信誉值:3
注册日期:2008-06-12 09:16
答案都是对的,因为提示通过检测题通过检测了。第三题这样解释不知对否。
asm_sande
[第2楼]   [ 回复时间:2008-07-31 23:24 ]   [引用]   [回复]   [ top ] 
荣誉值:5
信誉值:0
注册日期:2008-07-04 19:03
嗯,
1中只要明白了向量表的排列原则就清楚了.
2中只要弄清了call//ret/retf与int//iret的区别也就好办法了.
3中只要知道了[BP+2]代表的什么地方的内存单元也就解答了.
这就是题目所检测的知识点呵.
towersimper
[第3楼]   [ 回复时间:2008-08-06 09:50 ]   [引用]   [回复]   [ top ] 
荣誉值:9
信誉值:3
注册日期:2008-06-12 09:16
此贴由 贴主 于 [ 2008-08-06 09:50 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved