. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->使用BIOS进行键盘输入和磁盘读写
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  个老菜鸟写给新菜鸟的关于课程设计二的方法及学汇编感言  [待解决] 回复[ 3次 ]   点击[ 763次 ]  
ldlihuanfa
[帖 主]   [ 发表时间:2010-03-29 18:05 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2009-12-18 19:53
从我开始学习开始,我对自己说,如果我能学完最后一章,我就一定要写一篇文章。因为我也不知道我能坚持到最后吗? 
   我说的老菜鸟这个老,其实指的是年龄,因为我是90年代初期的工科大专生,我真正开始接触电脑是2004年我买了一台电脑开始上网这后,之后这五年的时间一直也就是在玩电脑。当时间长了之后,你会觉得很多事情都没意思了,这时候就有了想学点什么的意思。可是当你随便在网上找点真正和电脑专业有关的知识,你就感觉是在看天书。这份心也就淡了。 
  2009年10月在看电视时,这个是天天向上,呵呵,湖南的,那一期请的是微软中国公司的员工,是为了推广windows7他们跑来上节目的,好象那一天正是windows7在中国正式发售的日子吧。晕,我还是第一次听说有这样的系统呢。 

 虽说对电脑不算很懂,可是对一个新系统的出现还是蛮有兴趣的,因为自己在2009年中期换了台新主机,不过显示器没换,还是纯屏的,嘿嘿,为了省钱嘛,我一向不太喜欢液显屏,我觉得有点晃眼。扯远了,回到windows7, 就下了升级顾问一测,结果还符合要求,恩,准备装个试试。   
虽说对电脑不是很懂,不过装系统这样的事情还是会的:)那时候网上关于w7的论坛比比皆是,下了个旗舰版,结果问题来了,激活?当然最彻底的方法便是修改bios,在当中加入silc表,这都是比较专业话的东东了。直到现在,我也不懂原理。 
后来去了bios之家,在那儿有人提供了方法,甚至有傻瓜式的教程,但是当你去操作时候,感觉就是麻着胆子在搞嘛。这时候有人说了,你要想手工修改,你得学汇编,这就好象用软件批量修改的不适合于所有机型。这就是我第一次接触到汇编。 
 于是有天, 我无聊的搜索了一下,结果就搜索到汇编论坛,随便进来了看一下,就看到了王爽老师的那本书,我要说,我随便翻看过很多书,可是这是第一本让人能够有兴趣一直看下去的书,因为我能看懂。 

接下来就是长达三个多月的学习, 我终于做完了。其实我也很清楚,汇编我学了干嘛呢?我只是有点兴趣而己,而这本书我现在认为这也只是一本入门书而己。 我只是觉得我能够真正第一次学完一本真正的纯正的计算机专业的内容,也是有点出乎意料了。当然前提,那些傻瓜式的手把手教你如何玩电脑的文章是不算在内的。 

顺便再提一下那个w7,我后来才发现,网上有神key,其实是用不着去修改bios的,害得我花了一个月的时候来琢磨如何改那东东:) 不过改完了,也忘得差不多了。 

前面扯远了,下面来说说课程设计二,如果你是高手就不必看下面的内容了,这纯粹是给那些和我一样的菜鸟提供帮助用的。 

  我在做这个课程设计的时候,我一开始认为是我是做不出来,我只是慢慢在试,一步一步地,最后完成了。当然这个程序肯定是不怎么样好的。我只是在刚开始做的时候,遇到很多误区,看别人的帖子有很多说法,事实上最后证明有很多说法是不一定非得那样的。 

  第一个就是关于55aa,我也搞不清哪个在前面,还是aa55,很多人都说你得把软盘第一个扇区的最后两个字节搞成这个值,可事实上,我在测试的时候就根本用不着,一样就可以启动。为什么,我也不明白,我的电脑高深知识全来于这本书。 

当然, 我提一下,你在做课设二的时候得装个虚拟机调试,我用的是vpc2007,装的是dos.6.22,这个dos6.22是三张虚拟安装软盘,这样我们可以得到无穷无尽的空白盘来调试。随便拿一张安装软盘格式化就可以了。 


第二个就是关于如何从硬盘启动的:当我们开始加载软盘的程序时,所有的数据都是保存在0:7c00作为起始地址的内存中的,当为了让硬盘启动时得从硬盘读取数据到0:7c00处,这样就覆盖了原来加载那儿的程序。但是原来的程序我们在执行硬盘启动结束的时候,我们不再需要了,因为这时候已经交给操作系统来控制了(也许这一部分不算操作系统)。我们只要保证原有的程序硬盘启动这一段能够正常执行就行了。 
那么方法就是把硬盘启动这一段代码放到最后,或者只要保证他不在第一扇区就行了。 

第三个我要提一下org,这是我在做实验十六的时候学到的,也是我学到的唯一与书中无关的指令。这个指令的好处就是你不用考虑偏移位置,如果你够清楚你的程序在内存中的偏移位置,用不着,可我的问题是我常常糊涂,这一指令就解决问题了。如果你们有兴趣,可以研究一下它。在网上找找。 

下面谈谈我是如何做课设二的。 

首先这个程序分为五个功能项目,我先把每一个程序单独做出来然后测试。 
第一个:在屏幕上显示四个英文句:) 
第二个:重启: 
第三个:从硬盘启动 
第四个:显示时间,变色,退出 
实际上这里我水平有限,分做两步才做出来的。 
第五个:设置时间 

关于程序的具体做法,我不想说太多,因为你们做的很可能比我好得多 
就是关于第二,三项修改cs,ip,我一开始也不知道如何去修改。 
直接用jmp 0ffffh:0 这肯定是行不通的。也是看到别人帖子中的用的retf,我开始还楞了一下,突然之间,恍然大悟。 
第四个。这个书上都有现成例子的 
第五个,这个实在是有点难,我在这个卡掉太多时间了 

做好五个功能程序后,单独测试没问题后,不过要说明,从硬盘启动只能刻盘测试。接下来连接程序 

首先把第一个功能项写在最前面,因为要在屏幕上显示嘛。然后接下来的代码用直接定址表的方式指向另外四个程序。 
这四个程序不用修改什么,设定标号到直接定址表中就差不多了。 
接下来测试这个做好的任务程序。ok了,注意一点我前面说过的,把硬盘启动的代码放到最后就行了。 

接下来安装。。我们做好的任务程序前面得加上一段代码,因为int 19h只能读1个扇区,所以后面扇区的读取得我们加代码来执行。 

要读几个扇区得由你们程序长度来决定,我是两个扇区,第一个已经被int19加载了,我只要加载第二个扇区就行了,加载到什么位置呢? 
那就是7c00h+200h,因为200h就是512字节。因为第一个扇区的内容已被加载到7c00处开始的512字节内存了,那么第二扇区当然应该从7e00h开始了 

下面就是org.这个指令的好处,就是你不用修改什么位置偏移什么的,在刚做好的程序前面加上org 7c00h就行了。 
当然我开头也说了,如果你空间想象力够好,根本用不着。 

最后一步,就是把做好的程序刻入软盘,这个我想大家都会了。前面加这段代码整个程序ok了。 

还有就是记得要清屏:这个子程序要做一下,什么时候清,看着来啊 

实际上我要说,我真的不适合写程序,我常常会犯一些很愚蠢的错误。 
最离谱的就是我在写子程序时,我压栈时用的push,结果出栈时用的也是push,编译没问题,运行时就不行了,看了半天才找不出问题所在。。 

要吃饭了,就写这么多吧,希望和我一样的菜鸟能够写出课设二。实在不行就参考一下我的博客中东东,不过不要说我的写的不好,我自己知道:)
ldlihuanfa
[第1楼]   [ 回复时间:2010-03-29 18:07 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2009-12-18 19:53
我之所以也发到论坛来,我是希望有更多的人不再走我弯路,也去享受做出课设二的喜悦
http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=27658&kindLevel=1&kindId=43113&postId=46286&readSg=1
xianzq888
[第2楼]   [ 回复时间:2010-07-02 17:12 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-01-03 14:44
顶呀...
ztz5651483
[第3楼]   [ 回复时间:2010-08-17 23:13 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-06-10 15:44
。。。。和楼主一样常犯这种错误,顶
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved