实验二

我是研究僧i 提交于 2020-03-07 21:30:31

实验结论

实验任务(1)

  使用 e 命令修改 0021:0~0021:f 数据

  

  使用d命令查看,修改正确

  

  使用a命令输入指令如下

  

  使用t命令单步调试

  

  

  

  做实验前书上的填空结果如下

  

  与实验结果进行比较,发现sp的值和修改的内存单元地址与实际不符,经过分析,发现是因为我对栈这部分知识的理解还不够,在计算sp的值时将入栈和出栈的算法弄反了。入栈时 sp=sp-2,出栈时 sp=sp+2。

 

  实验任务(2)

  使用a命令输入指令

  

  使用 e 命令修改 2000:0~2000:f 的值,并使用d命令查看修改后的结果

  

  使用t命令单步调试

  

  第一行指令是将 2000H 存入 AX 寄存器中,第二行指令是将 AX 的值送给栈段寄存器 SS,也就是说,前两行指令实现的功能就是将 SS 的值变成 2000,第三行指令的功能是将栈指针寄存器 SP 的值改成 0010。但是在截图中却并没有出现 MOV SP, 10 这条语句,通过阅读书上实验任务部分的文字描述发现这是因为中断机制使得这条指令在执行完 MOV SS, AX 后自动被执行了。

  这时,初始栈顶是 20010H,初始栈底是 20012H。

  

  从截图中我有几点发现:1、从 MOV AX, 3123 这条指令开始 2000:0 ~ 2000:f 中的值就发生了变化,出现了不需要的数字;2、在栈顶所在位置的 SP-2 的内存单元中存放的始终是AX 中的值;3、虽然栈底的位置在 20012H,但是入栈时却是从 20015H 开始存数据的。

  经过思考,我觉得出现这种状况的原因可能是来自 MOV SP, 10 这条未出现的指令。

 

总结与体会

  1、从实验任务(1)中可以看出,我对栈的知识掌握不够,需要多加理解和练习。

  2、通过上网查询资料,初步了解了一下中断机制的概念:

  众所周知,处理器的速度跟外围硬件设备的速度往往不在一个数量级上,因此,如果内核采取让处理器向硬件发出一个请求,然后专门等待回应的办法,显然降低内核效率。
  既然硬件的响应这么慢,那么内核就应该在此期间处理其他事务,等到硬件真正完成了请求的操作之后,再回过头来对它进行处理。想要实现这种功能,轮询(polling)可能会是一种解决办法。可以让内核定期对设备的状态进行查询,然后做出相应的处理。不过这种方法很可能会让那个内核做不少无用功,因为无论硬件设备是正在忙碌着完成任务还是已经大功告成,轮询总会周期性的重复执行。更好的办法是由我们来提供一种机制,让硬件在需要的时候再向内核发出信号(变内核主动为硬件主动),这就是中断机制。
  中断使得硬件得以与处理器进行通信。举个例子,在你敲打键盘的时候,键盘控制器(控制键盘的硬件设备)会发送一个中断,通知操作系统有键按下。中断本质是一种特殊的电信号,由硬件设备发向处理器。处理器接受到中断后,会马上向操作系统反映此信号的到来,然后就由os负责处理这些新到来的数据。硬件设备生成中断的时候并不考虑与处理器的时钟同步——换句话说就是中断随时可以产生。因此,内核随时可能因为新到来的中断而被打断。
不同的设备对应的中断不同,而每个中断都通过一个惟一的数字标识。因此,来自键盘的中断就有别于来自硬盘的中断,从而使得操作系统能够对中断进行区分,并知道哪个硬件设备产生了哪个中断。这样,操作系统才能给不同的中断提供不同的中断处理程序。
  在它执行程序的时候,如果有另外的事件发生(比如用户又打开了一个程序)那么这时候就需要由计算机系统的中断机制来处理了。
中断机制包括硬件的中断装置和操作系统的中断处理服务程序。
  让硬件在需要的时候再向内核发出信号。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!