| 网站首页 | 业界新闻 | 群组 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
雷速体育发帖软件开发QQ118000023C语言培训|一对一辅导|零基础学编程LightningChart 快速先进的.Net图表控件
共有 644 人关注过本帖
标题:关于一些汇编的问题,求高手解答
只看楼主 收藏
林致礼
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-7-10
结帖率:100%
  已结贴   问题点数:20  回复次数:4   
关于一些汇编的问题,求高手解答
我在看王爽老师的汇编语言,看到了中断位置,感觉有一些问题没想懂,在这里求助各位:
1.中断的触发: 是通过int来触发的,又或者可以通过 程序里设定好的指令 来触发的。
              是这样的吗?

2.中断一定要安装吗?  把中断例程写在cs里面,再offset 标号,然后转到 cs里面的中断例程,  好像也是没问题的,那么为啥要安装 自己写好的 中断例程呢?中断例程安装好了,在结束程序后,会被保存在那个区域吗?还是说直接被还原成原本那个中断呢?

3.中断例程的安装:  在书里面,每次安装都是在中断向量表那里的,感觉这样可能不是很靠谱,如果我要安装到其他地方,怎么保证那个区域够大而且没用过呢?
  
2018-03-16 16:44
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:10
帖 子:194
专家分:1277
注 册:2016-5-15
  得分:20 
问题1
中断触发,大致可分
1a:自动触发,比如int8,是时脉中断,每秒向cpu自动发出18.2次中断.
1b:硬体触发,通常由周边引发,比如用户按了按键,便会触发int9
1c:程式异常,代码中执行了非法指令(int6,int0Dh),特权指令,结果异常(除以0或商值太大),溢位(int04)等情况,
都会触发相关的例外中断.
1d:软体触发,由程式中以intxx呼叫的中断程式,比如读取键盘int16h,dos系统中统int21h等等.


问题2.
其实就是不了解中断向量表.

中断由int00-intffh,一共100h个中断,每一个中断的进入点,是对应0:0-0:400h(中断向量表)的相关位置,
比如int0,int1,其进入点便是
     int0        int1
地址 00 01 02 03 04 05 06 07
     34 12 00 FF 90 78 00 FF

INT0的进入点:FF00:1234
INT1的进入点:FF00:7890
...

cpu上电后,bios已经定义好必要的bios中断,通常是int00-int1fh
然后dos载入,会改写部份bios中断,令原来中断向量指向自己,并且大体接管了20h-5fh的中断(或更后的).
不管怎样,100个中断向量中,总有不少是空的,也就是00 00 00 00,比如随便在debug中运行一下int60h,
系统可能马弹发出非法指令的警告,因为0000:0000里的只是中断向量表,不是程式.

比如我要写一个游戏,按键读取完全由自己控制,那就要自行写一个int9键盘中断,然后修改中断向量表指向自己.
但要记住一点,中断量表被修改后,不会自动复原,若游戏离开,int9仍指向原来游戏代码,但那段内存已被dos释放,
其结果就是系统挂掉.

问题3.
新的中断应该放在用户自己的程式段中,放在中断向量表是dos还是草创时期的玩法,不鼓励.
2018-03-16 21:15
林致礼
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-7-10
  得分:0 
回复 2楼 Valenciax
版主大佬:
    你好,非常感谢你的讲解!
  你讲的我好像有点听明白了,但是还有些不太懂,就是:
1.  把中断例程写在中断向量表里,是不是就可以当作永久保存了?
2.  中断向量表不会自动复原,是无论怎样都不会重新初始化了吗,包括重启,关机开机什么的操作,都不会吗?
3.  主要还是中断向量表不懂,我看书上的例程,它们改了中断表的入口,可是又没有在运行完,改回原本的入口位置,这样是不是很危险,相当于自己改动了系统内在的设置?
  请教...
2018-03-17 00:10
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:10
帖 子:194
专家分:1277
注 册:2016-5-15
  得分:0 
回复 3楼 林致礼
1.中断向量表并不是你私有地,谁都能对中断向量表进行读写,即便你的程式仍在运行,也不能保证其他背景程式,
系统程式操作它.所以,除了修改中断向量指向自己或回存原有中断, [不应该] 放任何东西在此.

2.中断向量表 [不会] 自动还原,除非重启,或关掉虚拟机(windows下的dos,cmd也算虚拟机)重来.

3.程式的[意图] 决定何时修改中断向量,何时还原中断向量,若希望 [本身程式] 结束后,dos系统还能正常运作,
所有修改过的中断向量必需还原.否则后果无法预料.

重申一次,你看到书中随意修改,随便放东西在中断向量的玩法,都是很古老,很任性的对单工系统的操作.
并不能奉为什么必然或巧妙的优良代码风格.


[此贴子已经被作者于2018-3-17 07:07编辑过]

2018-03-17 07:03
林致礼
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-7-10
  得分:0 
回复 4楼 Valenciax
十分感谢版主大大的讲解...
感觉收益匪浅,再次多谢你的指教!!
2018-03-17 12:13







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039967 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved