. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->外中断
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  对于 P280例子 重写 int9中断的一些想法  [待解决] 回复[ 0次 ]   点击[ 254次 ]  
sendro
[帖 主]   [ 发表时间:2015-01-16 18:40 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-12-29 20:44
ex_int9_start:        push ax
                push bx
                push es

                mov al,60H

                pushf
                pushf
                pop bx
                and bh,11111100B
                push bx
                popf                        ;tf = 0 if = 0
                call dword ptr ds:[0]        ;push cs  push ip 

                cmp al,1                ;is ESC
                jne int9_ret
                mov ax,0B800H
                mov es,ax
                inc byte ptr es:[160*12+1]

ex_int9_ret:        pop es
                pop bx
                pop ax
                iret



call dword ptr ds:[0] 这个方法如何返回?iret ? 

我们编写过int 程序 都知道 要么 iret   要么直接整个程序返回
例如 mov ax,4c00h int 21H


ex_int9_ret:        pop es
                pop bx
                pop ax
                iret
但是程序结尾 也有 一个iret 

根据 P 276的 说法    每次输入 就会产生 一个 可屏蔽中断int9
那么这里的理解应该是  + 检测点 15.1的说法 + 实验13.1
实验13.1 最后调用 int7CH  调用的时候 就进行了 pushf push cs push ip 操作


我的理解是这里进行了 2层 pushf push cs push ip  而且进行了 TF=0 if=0的设置

所以 15.1的检测点说 可以简化 这部分 call的目的是 为了将 cs ip 入栈
然后 方法结尾 iret  我们模拟的 pushf push cs push ip 操作
最后的 iret 是 针对 中断调用的 入栈 操作


因为我不知道怎么 调试这样带 输入的 debug   只能进行推理  请大家指教
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved