王爽汇编语言第三版课设二回顾

王爽汇编语言第三版课设二回顾

  1. 在dos系统下五个独立功能

  2. (1) 有页面

  3. (2) 重启 这两个模块的理解在第三点详细总结,主要是关于数据标号的

  4. (3) 更改时钟 这个功能实现唯一记忆就是int 16h中断的0号功能,返回的ah内为扫描码,al为ASCII码

  5.  mov ah,0       	 
    
  6.  Int 16h        	
    
  7.  cmp al,30h(这个中断同样可以用于对键盘输入扫描来选择功能)
    
  8. (4) 显示时钟 需要记忆的是关于int 9 外中断的 这里实现了我以前困惑的,两个功能对cpu的同时占用(简易思考,其实并非同时) 这里的实现通过在程序末尾添加自己的新的9号中断,然后在程序开始的地方把原九号中断的中断向量即cs:ip保存下来,把新九号中断的地址写入中断向量表 es:[n4](ip)Es:[n4+2](cs),在结尾处的九号中断的开始 先有 in al,60h (功能是把键盘输入的扫描码读出来) 然后模拟调用原九号中断

  9.  Pushf(标志寄存器入栈)	
    
  10.  Pushf	
    
  11. Pop bx	
    
  12. And bh 11111100b	
    
  13. Push bx	Popf(标志寄存器tf,if位置0)	
    
  14. Call dword ptr (存放原九号中断csip的地址){							
    
  15. Push cs							
    
  16. Push ip							
    
  17. Jmp dword ptr 内存}	
    
  18. 对于ret,retf,iret的理解

  19. (1) Ret : pop ip(对应于call)
    
  20. (2) Retf: pop ip ; pop cs(对应于call dword 或者call far)
    
  21. (3) Iret: pop ip;pop cs;popf(4) 此处注意一点,call 内存单元和jmp 内存单元,都是把这个内存单元存储的内容作为新的ip或者cs,ip来使用
    
  22. 关于讲写好的程序转移到软盘内,由于系统自动从软盘1读入并开始系统,所以只需要注意在一号软盘内对别的软盘的调用

    1. (1) 软盘内容是无法直接读取的,就像硬盘一样,需要先把内容读在内存中然后再调用① 所以在此处我们先将软盘内容读在某一个指定的内存部位,然后在需要使用该软盘内容时跳转过去即可
    2. (2) 在读取到软盘之后,其实写入软盘的是机器码,伪指令不会被写入,所以在软盘内容的开始的地方必须是指令而不可以是数据,否则就会出错
  23. 最后的要点 两部分 关于从软盘读取到内存后程序内部代码标号的csip地址 和 数据标号的使用 (1) 读取到内存以后,由于我们源程序中的offset其实在编译的时候就已经被写为了准确的跳转距离,所以比如说我将软盘二的内容读在的2000:7cffh的内存空间中,此时我的offset由于cs是相同的,但是我当时是对于ip为0进行的计算,此时仍然要准确标记到该标号,需要加上7cffh

  24.  2) 数据标号的使用确实会方便很多
    
  25. 		① 无需对它的偏移地址定义,直接使用标号即可,不过要注意的是在从软盘读取出来的时候,同样有和标号一样的问题  
    

    受益匪浅

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
阅读下面的材料 : 开机后, CPU 自动进入到 FFF0:0 单元处执行,此处有一条跳转指令。 CPU 执行该指令后,转去执行 BIOS 中的硬件系统检测和初始化程序。 初始化程序将建立 BIOS 所支持的中断向量,即将 BIOS 提供的中断历程的入口地址登记在中断向量表中。 硬件系统检测和初始化完成后,调用 INT 19H 进行操作系统的引导。 如果设为从软盘启动操作系统,则 INT 19H 将主要完成一下工作: ( 1 )控制 0 号软驱,读取软盘 0 道 0 面 1 扇区的内容到 0 : 7C 00 。 ( 2 )将 CS:IP 指向 0 : 7C 00 。 软盘的 0 道 0 面 1 扇区中装有操作系统引导程序。 INT 19H 将其装到 0 : 7C 00 处后,设置 CPU 从 0 : 7C 00 开始执行此处的引导程序,操作系统被激活,控制计算机。 如果在 0 号软驱中没有软盘,或发生软盘 I/O 错误,则 INT 19H 将主要完成以下工作 ; (1) 读取硬盘 C 的 0 道 0 面 1 扇区的内容到 0 : 7C 00 ; (2) 将 CS:IP 指向 0 : 7C 00 。 这次课程设计的任务是编写一个可以自行启动计算机,不需要在现有操作系统环境中运行的程序。 改程序的功能如下: ( 1 )列出功能选项,让用户通过键盘进行选择,界面如下: 1 ) reset pc ; 重新启动计算机 2 ) Start system ; 引导现有的操作系统 3 ) Clock ; 进入时钟程序 4 ) Srt clock ; 设置时间 ( 2 )用户输入“ 1 ”后重新启动计算机。(提示:考虑 FFFF:0 ) ( 3 )用户输入“ 2 ” 后引导现有的操作系统。(提示:考虑硬盘 C 的 0 道 0 面 1 扇区) ( 4 )用户输入“ 3 ”后,执行动态现实当前日期,时间的程序。 现实格式如下:年 / 月 / 日 时:分:秒 进入此项功能后,一直动态现实当前的时间,在屏幕上将出现时间按秒变化的效果。(提示:循环读取 CMOS ) 当按下 F1 键后,改变现实颜色;按下 ESC 键后,返回到主选单。(提示:利用键盘中断) ( 5 )用户输入“ 4 ”后可更改当前的日期,时间,更改后返回到主选单。(提示:输入字符串) 下面给出的几点建议: ( 1 )在 DOS 下编写安装程序,在按转程序中包含任务程序; ( 2 )运行安装程序,将任务程序写到软盘上; ( 3 )若要任务程序可以在开机后自行执行,要将它写到软盘的 0 道 0 面 1 扇区上。如果程序长度大于 512B ,则需要用多个扇区存放,这种情况下,处于软盘 0 道 0 面 1 扇区中的程序就必须负责将其他扇区中的内容读入内存。 这个程序较为复杂,它用到了我们所学到的所有技术,需要进行仔细地分析和耐心地调试。这个程序对于我们的整个学习过程是具有总结性的,希望读者能够尽力完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值