Feb
9
qq5.com导航站主要依靠在软件或系统中捆绑病毒的进行传播。依靠将假的msconfig.exe设置成启动项,将C:\WINDOWS\system32\meassrv.exe runsrv /name:"NT LM Security Support(RPC)" /prinum:"32" /cmdline:"C:\WINDOWS\system32\mcvcea.exe"添加为服务,向ie浏览器快捷方式添加参数来得到其目的。
清除方法:删除
C:\WINDOWS\system32\meassrv.exe
C:\WINDOWS\system32\mcvcea.exe
C:\WINDOWS\system32\msconfig.exe
这三个文件,并且讲ie快捷方式的属性里后面的参数去掉。
注册表HKEY_CLASSES_ROOT\CLSID\{871C5380-42A0-1069-A2EA-08002B30309D}\shell\OpenHomePage在下有个Command,修改字符串的值,去掉后面的www.qq5.com
除了修改主页,另外还会修改ie的搜索引擎,讲百度修改成自己的搜索联盟链接,可以在管理搜索引擎那里清除。
qq5.com怀疑与go2000.com是一家所出,采用手段及牟利方式相同。
不过所采用的技术还是相当隐蔽的,尤其msconfig是我们常用的加载项管理工具。
Jan
7

src="http://www.popuptraffic.com/assign.php?l=piikee&mode=behind">
操作系统下载列表
====================
版本 【原版系列】WindowsXP SP2上海政府版
MD5 2637e695f43329fc9d66feceee44bf1f
下载 http://down.pchob.com/2007/1/VRMPVOL_CNsp2.iso
====================
版本 【原版系列】WindowsXP SP2电脑疯子版
MD5 f455f9a787b620aca7ac89ab47574919
下载 http://down.pchob.com/2007/1/winxp.iso
====================
版本 【原版系列】WindowsXP SP2北京政府版
MD5 81d7887a2f2cba696defdfc75dac54b4
下载 http://down.pchob.com/2007/1/VRMPVOL_CN.iso
====================
版本 【原版系列】WindowsXP 广州政府大客户版
MD5 25acfbc66f65098b68d6465b9705257b
下载 http://cnc-http.a5d.com/download/ftp/windo...L_CN.iso
====================
版本 【原版系列】WindowsXP SP2中国工商银行版
MD5 CEEB2AF03BFE8AFF57CDA817B44C674C
下载 http://218.7.188.58/ICBC-WINXP-SP2.iso
附序列号:
MRX3F-47B9T-2487J-KWKMF-RPWBY(工行版)
QC986-27D34-6M3TY-JJXP9-TBGMD(台湾交大学生版) 可用
HCQ9D-TVCWX-X9QRG-J4B2Y-GR2TT 可用 (电脑疯子版)
T72KM-6GWBP-GX7TD-CXFT2-7WT2B(上海政府0686版)
QHYXK-JCJRX-XXY8Y-2KX2X-CCXGD(广州政府版)
DG8FV-B9TKY-FRT9J-6CRCC-XPQ4G(上海政府版)
MFBF7-2CK8B-93MDB-8MR7T-4QRCQ(北京政府版)
CM3HY-26VYW-6JRYC-X66GX-JVY2D 可用
DP7CM-PD6MC-6BKXT-M8JJ6-RPXGJ 可用
F4297-RCWJP-P482C-YY23Y-XH8W3 可用
HH7VV-6P3G9-82TWK-QKJJ3-MXR96 可用
BYCMB-R844W-KJBQX-J3D9F-V3Y6G
D8GTT-RXDKP-JDH76-R42W8-B84KB
D9Y7R-K3TM4-WTMY3-2BF8R-7MHVG
BX6HT-MDJKW-H2J4X-BX67W-TVVFG
RD9TW-W2XCH-TMFKM-RBBJB-DD3F6
M6TF9-8XQ2M-YQK9F-7TBB2-XGG88
CFFBK-RC6YK-TJP22-JH84C-VCYJW
Dec
31
1.序言
定义:PHP是一种简单的,面向对象的,解释型的,健壮的,安全的,性能非常之高的,独立于架构的,可移植的,动态的脚本语言。PHP具有和JAVA类似的Class关键字。因为不需要虚拟机,以致速度比JAVA快5倍。PHP正迅速变成一种标准的,多用途的,面向对象的脚本语言。PHP不仅可用来开发Web应用程序,也可以开发普通应用程序。
PHP是一种功能强大的脚本语言。PHP将击败PERL/Python并取而代之。PHP是下一代的PERL/Python脚本。PHP可以胜任任何PERL/Python做的工作,并且做的更多,更好,更简洁!!
PHP是Hypertext Pre-Processor(超文本预处理器)的缩写,它是一种服务器端的HTML脚本/编程语言。PHP语法上与C相似,可运行在Apache, Netscape/iPlanet, 和 Microsoft IIS Web 服务器上。PHP作为一种工具,可以让你创建动态的Web页面。应用PHP的网页与常规的HTML页面并无二致,你可以用同样的方式来创建、编辑它们。PHP允许你直接在HTML文件里写入简单的脚本,这一点与Javascript非常相似。而不同的是,PHP不依赖于浏览器,是服务器端的语言,而Javascript却是一种客户端的嵌在HTML中的语言。概念上,PHP与Netscape的LiveWire Pro产品,Microsoft的ASP以及SunMicrosystem 的JSP相似。
PHP不仅可以用来创建Web应用程序,也可以用来开发普通的单机应用程序。
PHP的强劲之处在于:
·PHP是一项最优秀的技术。其它技术,如PERL,Python, Tcl, VB script, ASP 相对来说,都是陈旧低劣的。即使是Java/JSP,也在PHP之下。
·开放源码
·广泛的数据库连接
·大量的扩展库
·作为一种多用途的脚本语言,比PERL,VB script, ASP, JSP都要优秀。
为什么选择PHP?因为PHP是最好的,原因如下:
·PERL“味道不好”,因为其程序不易阅读和维护,且不是面向对象的。把PERL忘了,转向PHP吧。PERL程序员将抛弃PERL,因为他们爱上了PHP! PHP实际上就是“现代版的PERL”,只是名称不同而已。
·Java 是面向对象的,但速度很慢。Java程序远行起来很慢,对它唯一的抱怨就是——“Java,真是慢的糟糕”。而且十分复杂(具有许多层,如JVM,JIT 等等)。这往往诱发问题。既然有了Linux,为什么还要Java呢?
·Python“不错”,但没有C语言中的括号和大括号,而这在vi编辑器中对操控代码非常有用。如果不能利用vi/emacs编辑器搜索括号/大括号的命令迅速操控代码,那么就好象断了手一样。PHP在技术上比Python更加先进。
·PHP是最好的,因为它面向对象,并且吸收了C/C++/Java/PERL的精华。PHP可以替代PERL,Python, Java,C, C++, awk, Unix shell 脚本,Visual Basic 和其它语言!!PHP直接运行,而且是由C写成的。
·每一个电脑程序员都知道PHP是最好的,不信问一下你旁边的程序员。
·只有PHP才能称雄于21世纪、22世纪以及更远的将来。
·为什么我们认为PERL,Python和Java程序员会将归附PHP,这里有一个很重要的原因。
以前,世界上许多公司都把PHP当作是一个“高度机密,严格保密”的电脑程序语言,但是现在它已经变成最为著名的,在Web, Internet, E-commerce以及 B2B等诸多项目上应用最广泛的面向对象的脚本语言。即使是在今天,仍有许多竞争性(competing)公司把PHP当作是高度机密的东西,决不向外界(竞争对手)透露半点。
PHP将如同暴风雨一般席卷整个世界,IT工业将为之震惊。PHP的力量在于它是跨平台的,可以运行在任何地方。如Linux,Windows 95/98/NT/2000/XP, Solaris, HPUX 以及各种UNIX。PHP只需写一次,就可以配置在任何地方。PHP可以运行在Apache,Microsoft IIS等多种Web服务器上。
PHP比Java快5到20倍!!实际的比较测试显示,PHP的运行速度是Java3.7倍左右。PHP太容易使用了,你可以用它在非常短的时间里,非常迅速的开发出非常复杂的web,e-commerce和一般的单机应用程序。(在将来,PHP将会模仿Java大多数的功能,相信Java程序员也会喜欢上它。PHP将包含Java中的关键字,如class,extends,interface, implements, public,protected, private 等等等等。)
PHP具有面向对象特性,它吸收了Java, C++, PERL 和C的最优秀的部分。PHP可以说是所有脚本/编程语言中的宝石。不久,它就会成为全世界程序员的“麦加圣地”。PHP即可以运行在Window95/NT/2000/XP上,也可以运行在各种UNIX上。
我们将大吃一惊——PHP极有可能成为21世纪的电脑编程语言。
可以使用Zend Optimizer对PHP进行编译和优化,从而使它运行的更快。PHP4.0中已经集成了Zend Optimizer。 首先,你在开发、测试、除错过程中,用PHP脚本语言编写你的应用程序。一旦项目完成,你便可以用Zend编译器,将PHP文件编译成运行速度更快的可执行程序。
对于电子商务项目,你一般需要综合使用PHP(70%),HTML/DHTML/XML(25%)和5%的Javascript(客户端验证)。
2.PHP可运行在Microsoft Windwos上!!
PHP最初是运行在UNIX平台上的,但是它的移植性很好,也可运行在Windows和IIS Web服务器之上。今天,已有了一大批基于Windows 2000/NT/95/98的PHP用户,你可以找到大量运行于Windows平台之上的PHP工具。
许多PHP程序员喜欢在Windows上开发他们的程序,完成后再配置在大型的Linux服务器上,如运行Linux的IBM小型机、Compaq DEC Alpha 以及 Sun sparc。
PHP最大的优势在于,它也可以运行在UNIX/Linux之上,UNIX上的开发者可以为MS Windows下的PHP用户服务,而Windows下开发的PHP代码也可以不经过任何改变,就用于UNIX/Linux上。
PHP自身完全是由C语言写成的,因此可广泛运行于各种平台之上,如BeOS,UNIX, MS Windows, Apple Macintosh,IBM OS/2 以及其它更多的操作系统。
PHP 运行速度非常快,要比Java快出许多。对于Web开发而言,不如忘了Java/JSP吧!PHP,PHP,到处都将是PHP! PHP也也将变成一种多用途的面向对象的脚本语言。
3.PHP下载
·PHP主站点:http://www.php.net
·PHP资源:http://ils.unc.edu/web-db/php/links.html
·PHP代码交换:http://px.sklar.com
·Vex Net:http://www.vex.net/php
在许多国家都有镜像站点,网址是www.COUNTRYCODE.php.net,其中COUNTRYCODE可以是us,fe,,sk等等。
· http://www.fe.de.php.net
· http://www.sk.php.net
· http://php.iquest.net/
·答疑邮件地址: http://php.weblogs.com/easywindows ·Windows平台下的PHP资料:http://php.weblogs.com ·PHP在Windows下的安装与配置:http://www.php.net/manual/install-windows95-nt.php ·PHP Triad可以在Windows平台上安装完整的PHP服务环境:http://www.phpgeek.com 3.2在Windows 95/98/NT/2000上快速安装Apache Web服务器(10秒钟) 在Windows上运行PHP,你需要一个Web服务器,你可以使用微软的IIS,也可以使用免费的Apache 。因为可以通过Apache的安装文件setup.exe进行安装,可以为你节省许多时间。 PHPTtriad是一个包括Apache、PHP、MySQL的软件包,可从http://www.phpgeek.com/phptriad.php 或其镜像站点http://sourceforge.net/projects/phptriad下载。我强烈推荐使用PHPTtriad,它在Windows用户中极受欢迎(已被下载了几百万次)。 Apache 二进制程序: http://httpd.apache.org/dist/httpd/binaries/win32 3.3 微软的SQL服务器 SQL服务器可以安装在不需要运行Windows的机器上,而你也需要一个SQL服务器来作Web开发。我推荐你在很老的PC上(如Pentium或486)安装Redhat Linux和PostgreSQL RPMs。你数据库并不需要任何Windows图形界面,可以在控制台直接启动PostgreSQL。PostgreSQL的速度大概是Oracle和MS SQL server的3倍。 PHP的PostgreSQL支持库是由Adam Sussman编写的,他的邮件地址是:]asussman@vidya.com' target='_blank'>http://www.askesis.nl下载。可从http://www.geocities.com/alavoor ... stgreSQL-HOWTO.html获取PostgreSQL的使用指南 。 3.4 PHP在UNIX和其它操作系统上的安装 参见PHP主站点www.php.net上的安装指南和说明,或所下载的软件包中的INSTALL文件。 4.快速进阶 用PHP的面向对象机制实现一个项目的步骤如下: ·首先,你需要连接一个数据库SQL服务器——有下面两个选择: ADODB (Active Data Objects Data Base),即动态数据对象数据库(http://php.weblogs.com/adodb) Metabase(Database independent access and management),即数据库独立访问和管理( http://phpclasses.upperdesign.com/browse.htm/package/20) ·第二,你需要一些通用的PHP类来创建表单、表格和其它HTML对象。这些都可以从PHP classes网站上获取(http://phpclasses.upperdesign.com)。可以参考一下该网站的下载排行榜。也可以从网站http://www.milkywaygalaxy.freeservers.com/上获取表单类、模板类等。 ·第三,通过对这些通用类的继承,来设计和创建自己的PHP类。 ·第四,使用模板类来分离显示样式和业务逻辑,可参见http://www.phpclasses.com ·第五,使用IDE工具进行开发(参见PHP IDE一节)。 ·最后,最好把你代码封装成类,这样可以实现代码的易维护性和可重用性。 5.PHP的主要特性 ·支持标准CGI,FastCGI和Apache模块——作为一个标准的CGI程序,PHP可以安装在运行任何Web服务器的任何UNIX机器上。 PHP支持新的FastCGI标准,通过这一机制,PHP获得了速度上的提高。 当配置成Apache模块时,PHP便成了功能极为强大的,运行速度如闪电般快的新的选择。 ·访问日志——通过PHP的日志访问功能,用户可以维护他们的点击次数和日志。 该功能提供了实时的访问监测,而不以任何方式使用系统的中心访问日志文件。日志浏览脚本为个人用户拥有的一组页面提供快速的访问摘要。除此之外,该程序包还可以通过配置为每一个页面生成一个页脚(footer)来显示访问信息。可参考文章后面的例子。 ·访问控制——个内建的基于Web的配置“筛”,可实现对访问控制的配置。这样,才有可能为所有或部分Web页面创建一套规则,使得拥有这些页面的特定的人可以对他的网页设置各种限制,如,什么人可以访问这些页面以及这些页面以怎样的一种方式被访问。对页面的设置有许多方式,如密码保护、完全限制、登录失效、或者更多的以客户的域、浏览器、e-mail地址甚至涉及的其它文档为设置依据。 ·支持PostgresSQL——PostgresSQL是一个先进但是免费的RDBMS(关系数据库管理系统)。PHP支持在.html文件中直接嵌入PostgresSQL的“SQL 查询语句”。 ·支持RFC-1867文件上传——文件上传是Netscape2.0新增的一项功能。用户可以将文件上传到Web服务器。 PHP提供了实际的MIME解码功能,使得文件上传成为可能。PHP还提供额外的框架,可对收到的上传文件进行一些有用的处理。 ·基于HTTP的身份验证控制——PHP可以用来为Apache服务器创建自定义的基于HTTP的身份验证机制。 ·变量、数组,联合数组(associative arrays)——PHP支持typed(这个单词不知道怎么译,望高手指点)变量,数组,甚至Perl风格的联合数组。而这些都可以通过GET或POST方法的表单从一个页面传递到另一个页面。 ·条件语句、While循环——PHP是一种类似C语言的功能完整的脚本语言。你可以使用if/then/elseif/else/endif条件语句,以及While循环和Switch/case语句来安排HTML页面显示的逻辑流程。 ·扩展的正规表达式——正规表达式频繁地应用于模式匹配、模式替换以及一般的字符串操作。PHP支持所有常用的正规表达式操作。 ·原始的HTTP Header控制——根据某种条件,让Web页面能够发送自定义的原始HTTP头对一些高级的网站设计来说是非常必要的。一个常见的用法就是发送一个Location:URL头,把客户端的请求重定向到另外一个URL上。也可以用来关闭缓存或操作页面最新更新的HTTP头。 ·动态创建GIF图片——PHP已经支持Thomas Boutell的GD图片库,可以实现GIF图片的动态创建。 ·支持ISP“安全模式”——PHP支持独特的“安全模式”,从而使得多个用户运行同一台服务器上的PHP脚本变得更加安全。 ·新发布的PHP中又增加了许多新的功能。可访问PHP的主站点[ft=#22229c,,' color='#22229c' size='' style='line-height:1.5em'>http://www.php.net。
·PHP是免费的!——这是最后一个重要特色。PHP的程序包是完全免费的。它遵守GNU/GPL。你可以把这个软件用于实现商业或者其它任何目的。
5.1 PHP相对于Java的优势
PHP是一种已经确定下来的,用于创建动态网页的服务器端的脚本语言。作为一种为Web而特别设计的语言,PHP带来了许多商业机构渴望的特性。
·极短学习周期
·快速的开发时间
·非常高的性能
这对于缺乏熟练编程人员,时间又非常紧迫的公司来讲,具有非常重要的意义。PHP可以在所有主要的操作平台(UNIX,Windows,甚至是大型机)上运行,而且生来就支持各种流行的数据库。所有这一切决定它是一种进行Web开发的非常理想的选择:曾有运用PHP技术的网上商店称,他们只需雇佣业余的程序员,几天内就能够开发出可重用的代码。那些熟悉诸如C,C++或Java等语言的程序员们,也总是发现他们能够在几个小时之内就能够进行PHP编程。
PHP是针对Web开发而设计的,这一事实使它成为一种独具特色的开发工具,就象Intranet Design杂志评价的那样:
“PHP是构建在Web开发人员现实需求之上的....不同于其它笨重的,高负荷的方法,PHP非常轻便,是为Web开发度身定做的。它可以比其它同类技术更快,更容易的解决复杂的问题。”
Java作为一种新的编程语言,最初用于运行嵌在浏览器中的客户端应用程序。在过去短短几年中,“applet”所暴露的问题迫使SUN和其它Java开发人员为该语言寻找新的出路。其中最为突出的就是服务器端编程,它允许Web站点连接数据库并产生其它服务器端的应用程序,即“servlets”。SUN最终推出了Java Server Pages(JSP)作为编写servlets的手段。与PHP一样,JSP在不同平台间也具有高可移植性(尽管PHP支持任何32位以及32位以上的平台,而JSP只能在安装了Java虚拟机的平台上运行)。 然后,一个没有编程背景的新手会发现,使用servlets编程是一件极为困难的事,原因在于该语言的复杂性以及JSP系统复杂的设计方式。
JSP的性能也存在许多待改进的地方:ZDnet的在线刊物eWeek最近的一项调查发现,PHP的运行速度差不多是JSP的3.7倍。可以说,JSP是Web环境中非常差的一种解决方案,这是因为它每秒钟只能处理很少的事务,而且响应速度相当的慢。
ZDnet的eWeek杂志还提到:
“JSP是一项相对较新的技术,从开发工具、资源、人才方面来看,还未具有完全的市场成熟度。”......由于JSP是基于Java的,而Java由是一种强类型的语言,所以我们不得不声明变量的类型,并在需要的地方手工转换类型。这使得JSP成为业余程序员最难于学习的一种脚本语言。
PHP与Java协同工作
JSP仅仅是一种能够访问Java对象的语言罢了,认识到这一点很重要。而PHP也可以整合Java,这意味着,PHP可以象JSP一样,成为一种能够调用Java逻辑的脚本语言。但与JSP不同的是,PHP还可以调用其它组件模型,如Microsoft的COM,而且增加对新的对象模型的支持也极为容易。可见,PHP的扩展能力是无穷的。而另一方面,JSP完全依赖于Java。
IBM程序员Sam Ruby联合使用PHP和Java。通过PHP对Java的良好支持,使得Java对象如同常规的PHP对象一样,透明地被创建和使用。
AutionWatch网站使得各种规模的商业团体都可以从其动态竞价环境中获益。它每月的访问人数在二百六十万以上;已有三十多万个注册用户;每个月进行一百二十万次拍卖。 他们曾尝试使用Java,但还是选择了PHP,就因为它更容易使用,开发速度更快。若想知道的更多,请联系Ben Margolin,他是AuctionWatch网站销售服务部的主任([ft=#22229c,,)。
编程顾问Reuven Lerner曾在各种语言之间作过比较。他对PHP的看法概括如下:
“这是门容易学习的语言。美工和Web设计师可能会说他们并非程序员,但事实上,他们在大型项目中,越来越多的使用了JavaScript,VBScript以及其它一些简单的编程语言。与Perl相比,PHP更加正规和明确;对一个新手来说,PHP比Java更容易掌握。确实,PHP有点象JavaScript(如果存在服务器端版本的话)。任何人,不管有无编程经验,都可以在很短的时间里学会并使用PHP。这一点也许VBScript可以做到,但Perl和Java肯定不行.....PHP绝对是一个非凡的,强大的系统。无怪乎能够成为创建Web站点的流行语言.....我认为,PHP将成为Java和JSP强有力的竞争对手,我会在某些客户和公司内部项目中极力推荐PHP。”
PHP:一直在前进
JSP有Sun作为其后盾,因此不断获得媒体的关注。但有趣的是,尽管没有任何宣传攻势,PHP的流行度仍然以8-11%的速度在增长,远远大于服务器端应用程序4%的月增长率。有六百五十万个站点使用了PHP(参见Netcraft 2001年5月的调查报告)。39%的Apache服务器上配置了PHP;而Perl占了11%的市场分额,名列第四。Apache保持着59%的Web服务器市场占有率;Microsoft次之,仅28%(参见E-Soft Inc./SecuritySpace 2001年5月的调查报告)。
使用PHP的著名公司有:Unilever、Philips、NTT、Cisco、 Japan Airlines、 Air Canada、 Lufthansa、GE Marketplace、 Wallstreet:Online Germany、 AuctionWatch、 VillageVoic、 Dialpad以及BMC。
(读后感:God like !)
Dec
28
死人了,要考试,居然还一天没复习,刚刚想复习,却看到博客有新版,结果升级新版出现问题,备份数据库,重新全新安装,结果,数据库字段出错无法导入备份啊啊啊疯了!
好不容易,才找到出错字段,原来是以前加入一个博文自动发QQ空间的插件,结果修改了数据库字段,被加了个SENDQZONE的字段!!!! 只好登陆数据库在表blog????忘了,反正是第一个表最后一个字段后面插入新字段sendqzone,默认值填0,然后再到后台导入数据就好了!!!
啊,死人了!!!要通宵了!!!
啊啊啊 ,最后还有URL没加http://导致无法发留言和评论!!!一点提交就弹窗口出错!!!
好不容易,才找到出错字段,原来是以前加入一个博文自动发QQ空间的插件,结果修改了数据库字段,被加了个SENDQZONE的字段!!!! 只好登陆数据库在表blog????忘了,反正是第一个表最后一个字段后面插入新字段sendqzone,默认值填0,然后再到后台导入数据就好了!!!
啊,死人了!!!要通宵了!!!
啊啊啊 ,最后还有URL没加http://导致无法发留言和评论!!!一点提交就弹窗口出错!!!
Dec
24
实验目的
《汇编语言程序设计》是计算机专业的重要的专业基础课,通过本综合性、设计性实验使学生进一步巩固课堂所学,全面熟悉、掌握8088宏汇编语言程序设计的基本方法和技巧,进一步提高编写程序、阅读分析程序及上机操作、调试程序的能力。
二、实验要求
编写一个时钟的常驻内存程序,要求:右上角显示时分秒。
三、实验原理分析
1.时间的获得与显示方法:通过MOV AH,02 INT 1AH 获得系统时间,然后用mov ah,02
int 21h输出系统时间。
2.让时间随系统而动态方法:用jmp的跳转,然程序不断获取时间,然后用光标定位方法,把光标每次都定位在同一地方然后输出时间,从而覆盖了原有时间,于是变可以看到时间随系统动态变化。
源程序(加必要注释)
DATAS SEGMENT
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
GO: ;/****定位光标***/
MOV DH,0
MOV DL,70
MOV BH,0
MOV AH,2
INT 10H
;/******获取系统时间****/
MOV AH,02
INT 1AH
PUSH CX
PUSH DX
;/******时****/
xor dl,dl
mov dl,ch
mov cl,4
shr dl,cl
add dl,30h
mov ah,02
int 21h
mov dl,ch
and dl,0fh
add dl,30h
mov ah,02
int 21h
mov dl,':'
mov ah,02
int 21h
;/*******分********/
POP DX
POP CX
PUSH DX
xor dl,dl
mov dl,cL
MOV DH,CL
mov CL,4
shr DL,CL
add Dl,30h
mov ah,02
int 21h
mov CL,DH
and CL,0fh
add Cl,30h
MOV DL,CL
mov ah,02
int 21h
mov dl,':'
mov ah,02
int 21h
;/*******秒********/
POP DX
mov BL,DH
mov CL,4
shr DH,CL
add DH,30h
MOV DL,DH
mov ah,02
int 21h
mov CL,BL
and CL,0fh
add Cl,30h
MOV DL,CL
mov ah,02
int 21h
jmp go
exit:
MOV AH,4CH
INT 21H
CODES ENDS
END START
版权所有,请勿用于商业用途!
《汇编语言程序设计》是计算机专业的重要的专业基础课,通过本综合性、设计性实验使学生进一步巩固课堂所学,全面熟悉、掌握8088宏汇编语言程序设计的基本方法和技巧,进一步提高编写程序、阅读分析程序及上机操作、调试程序的能力。
二、实验要求
编写一个时钟的常驻内存程序,要求:右上角显示时分秒。
三、实验原理分析
1.时间的获得与显示方法:通过MOV AH,02 INT 1AH 获得系统时间,然后用mov ah,02
int 21h输出系统时间。
2.让时间随系统而动态方法:用jmp的跳转,然程序不断获取时间,然后用光标定位方法,把光标每次都定位在同一地方然后输出时间,从而覆盖了原有时间,于是变可以看到时间随系统动态变化。
源程序(加必要注释)
DATAS SEGMENT
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
GO: ;/****定位光标***/
MOV DH,0
MOV DL,70
MOV BH,0
MOV AH,2
INT 10H
;/******获取系统时间****/
MOV AH,02
INT 1AH
PUSH CX
PUSH DX
;/******时****/
xor dl,dl
mov dl,ch
mov cl,4
shr dl,cl
add dl,30h
mov ah,02
int 21h
mov dl,ch
and dl,0fh
add dl,30h
mov ah,02
int 21h
mov dl,':'
mov ah,02
int 21h
;/*******分********/
POP DX
POP CX
PUSH DX
xor dl,dl
mov dl,cL
MOV DH,CL
mov CL,4
shr DL,CL
add Dl,30h
mov ah,02
int 21h
mov CL,DH
and CL,0fh
add Cl,30h
MOV DL,CL
mov ah,02
int 21h
mov dl,':'
mov ah,02
int 21h
;/*******秒********/
POP DX
mov BL,DH
mov CL,4
shr DH,CL
add DH,30h
MOV DL,DH
mov ah,02
int 21h
mov CL,BL
and CL,0fh
add Cl,30h
MOV DL,CL
mov ah,02
int 21h
jmp go
exit:
MOV AH,4CH
INT 21H
CODES ENDS
END START
版权所有,请勿用于商业用途!
Dec
24
系统实现的功能
用户输入一个数字(1~8),代表要在多少个学期内修完所有给出的课程,程序根据“lessonlist.txt”中的课程,对每个学期的课程合理地分配,并输出每个学期的课程表。
所作的工作
根据各个课程必修的前后顺序,用拓扑序方法,得出上课的先后顺序,再分配每个学期要上多少节课,输出每个学期的课程表。
程序源码及注释
#include
#include
#include
#include
/*****定义邻接表的表结点*****/
typedef struct arcnode
{
int adjvex;
struct arcnode *nextarc;
}arcnode;
/*******定义邻接表的头结点*******/
typedef struct vnode
{
int date;
arcnode *firstarc;
}vnode;
/*********定义邻接表***********/
typedef struct
{
int vexnum,arcnum;
vnode vertices[50];
}ljb;
/***********定义堆栈********/
typedef struct
{
int *base;
int *top;
int *next;
int stacksize;
}sqstack;
ljb g;
sqstack s;
int num[50],j;
int pp[30]; /*用来存放从文本文件输入的信息*/
char name[30][30];
int next[50][7]={0};
/*******读科目信息文件的函数********/
void read()
{
arcnode *p,*q;
FILE *fp;
int i;
if((fp=fopen("lessonlist.txt","r"))==NULL) /*打开文件*/
{
printf("无法读取文件!\n");
exit(0);
}
for(i=1;i<21;i++) /*输入课程信息*/
{
fscanf(fp,"%d %s %d %d ",&num[i],name[i],&next[i][1],&next[i][2] );
}
g.arcnum=20;
/*********构造邻接表*********/
for(i=1;i<21;i++)
{
g.vertices[i].date=num[i];
g.vertices[i].firstarc=NULL;
for(j=1;j<6;j++)
{
if(next[i][j]!=0)
{
p=(arcnode *)malloc(sizeof(arcnode)); /*构造邻接表的结点*/
p->adjvex=next[i][j];
p->nextarc=NULL;
if( g.vertices[i].firstarc==NULL)
g.vertices[i].firstarc=p;
else
q->nextarc=p;
q=p;
}
}
}
}
/********堆栈初始化********/
void initstack( )
{
s.base=NULL;
s.base=(int *)malloc(50*sizeof(int));
if(!s.base)
{exit(0);
}
s.top=s.base;
s.stacksize=50;
}
/********定义入栈*****/
void push( int e)
{
if(s.top-s.base==s.stacksize)
{
s.base=(int *)realloc(s.base,100*sizeof(int));
if(!s.base)
exit(0);
s.top=s.base+50;
s.stacksize;
}
s.next=s.top;
while(s.next!=s.base) /*入栈是在底部的,而不是在顶部*/
{
*s.next=*(s.next-1);
s.next--;
}
*(s.next)=e;
s.top++;
}
/*******定义出栈******/
int pop()
{
int e;
if(s.top==s.base)
return -1;
e=*--s.top;
return e;
}
/*******判断是否是空栈*********/
int stackempty( )
{
if(s.base==s.top)
return 1;
else
return 0;
}
/***********找各顶点的入度********/
void finddegree( int indegree[])
{
int i,k;
struct arcnode *p;
for(i=1;i {
for(p=g.vertices[i].firstarc;p;p=p->nextarc)
{
k=p->adjvex;
indegree[k]++;
}
}
}
/**********拓扑排序函数*********/
void sort( )
{
int i,k,e,y=1;
struct arcnode *p;
int indegree[50]={0};
finddegree(indegree); /*找各顶点的入度*/
initstack( ); //初始化堆栈
for(i=1;i {
if(!indegree[i]) /*入度为0的结点入栈*/
{
push(i);
}
}
while(!stackempty())
{
e=pop();
pp[y++]=e; /*按出栈的顺序存在pp[]数组中*/
for(p=g.vertices[e].firstarc;p;p=p->nextarc)
{
k=p->adjvex; /*刚出栈顶点的后一个顶点入度减1*/
if(!(--indegree[k]))
push(k);
}
}
}
/**********结果输出函数*************/
void print(){
int i,d,k=1 ,flag=0;
int numm[20][20]={{0},{0,20},{20,10,0},{20,13,6,0},{20,15,10,5,0},{20,16,12,8,4,0},{20,17,13,9,6,3,0},{20,18,15,12,9,6,3,0},{20,18,15,12,9,6,4,2,0}};/*对8类修法进行分配(分别位用1,2,3,4……学期学完20个科目)*/
Sleep(100); printf("\n\n 【〓〓〓〓〓〓〓数据结构课程设计〓〓〓〓〓〓〓】 \n");
Sleep(200); printf(" 【 】 \n");
Sleep(200); printf(" 【 姓名:piikee 】 \n");
Sleep(200); printf(" 【 】 \n");
Sleep(200); printf(" 【 学号: **************** 】 \n");
Sleep(200); printf(" 【 】 \n");
Sleep(200); printf(" 【 班别:*********** 】 \n");
Sleep(200); printf(" 【 】 \n");
Sleep(200); printf(" 【●●●●●●●●●●●●●●●●●●●●●●】 \n");
do{
flag=0;
printf("\n 总共要多少学期上完这些课(1~8):");
scanf("%d",&d);
if(d<1||d>8)
{
printf(" \n 最多只能8个学期学完这些课.请重新输入.\n\n");
flag=1;
getchar();
}
}while(flag);
Sleep(100); printf("\n\n正");Sleep(100);printf("在");Sleep(100);printf("排");Sleep(100);printf("课");Sleep(100);printf("中");Sleep(100);printf(",");Sleep(100);printf("请");Sleep(100);printf("稍");Sleep(100);printf("侯");Sleep(500);printf(".");Sleep(500);printf(".");Sleep(500);printf(".");
Sleep(100);printf(".");Sleep(100);printf(".");Sleep(100);printf(".");Sleep(100);printf(".");Sleep(100);printf(".");
printf("\n\n∷∷∷∷∷∷∷∷∷∷∷∷∷∷课程安排如下∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷\n");
Sleep(2000);printf("\n 第 %d学期的课程表是:\n\n",k);
printf(" ---------------------------------------------------------------\n");
for(i=20;i>0;i--)
{
printf(" || %-5d || %-20s ||\n",num[pp[i]],name[pp[i]]);
printf(" || || || \n");
if(i==numm[d][k])
{
printf(" ===============================================================\n");
printf("\n\n\n\n\n\n №№№№№№№№№№№№№№№№№№№№№№№№№№№№№\n");
Sleep(2000);printf("\n 第 %d学期的课程表是:\n\n",k+1);
printf(" ---------------------------------------------------------------\n");
printf(" || 科目编号 || 课程名 || \n");
printf(" || || || \n");
printf(" || || || \n");
k++;
}
}
printf(" ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("\n 要退出请输入按任意键然后按enter\n");
}
/*********主函数**************/
void main()
{
int u;
int indegree[50]={30};
read( );
sort();
print();
scanf("%s",&u);
}
版权所有,请勿用于商业用途!
用户输入一个数字(1~8),代表要在多少个学期内修完所有给出的课程,程序根据“lessonlist.txt”中的课程,对每个学期的课程合理地分配,并输出每个学期的课程表。
所作的工作
根据各个课程必修的前后顺序,用拓扑序方法,得出上课的先后顺序,再分配每个学期要上多少节课,输出每个学期的课程表。
程序源码及注释
#include
#include
#include
#include
/*****定义邻接表的表结点*****/
typedef struct arcnode
{
int adjvex;
struct arcnode *nextarc;
}arcnode;
/*******定义邻接表的头结点*******/
typedef struct vnode
{
int date;
arcnode *firstarc;
}vnode;
/*********定义邻接表***********/
typedef struct
{
int vexnum,arcnum;
vnode vertices[50];
}ljb;
/***********定义堆栈********/
typedef struct
{
int *base;
int *top;
int *next;
int stacksize;
}sqstack;
ljb g;
sqstack s;
int num[50],j;
int pp[30]; /*用来存放从文本文件输入的信息*/
char name[30][30];
int next[50][7]={0};
/*******读科目信息文件的函数********/
void read()
{
arcnode *p,*q;
FILE *fp;
int i;
if((fp=fopen("lessonlist.txt","r"))==NULL) /*打开文件*/
{
printf("无法读取文件!\n");
exit(0);
}
for(i=1;i<21;i++) /*输入课程信息*/
{
fscanf(fp,"%d %s %d %d ",&num[i],name[i],&next[i][1],&next[i][2] );
}
g.arcnum=20;
/*********构造邻接表*********/
for(i=1;i<21;i++)
{
g.vertices[i].date=num[i];
g.vertices[i].firstarc=NULL;
for(j=1;j<6;j++)
{
if(next[i][j]!=0)
{
p=(arcnode *)malloc(sizeof(arcnode)); /*构造邻接表的结点*/
p->adjvex=next[i][j];
p->nextarc=NULL;
if( g.vertices[i].firstarc==NULL)
g.vertices[i].firstarc=p;
else
q->nextarc=p;
q=p;
}
}
}
}
/********堆栈初始化********/
void initstack( )
{
s.base=NULL;
s.base=(int *)malloc(50*sizeof(int));
if(!s.base)
{exit(0);
}
s.top=s.base;
s.stacksize=50;
}
/********定义入栈*****/
void push( int e)
{
if(s.top-s.base==s.stacksize)
{
s.base=(int *)realloc(s.base,100*sizeof(int));
if(!s.base)
exit(0);
s.top=s.base+50;
s.stacksize;
}
s.next=s.top;
while(s.next!=s.base) /*入栈是在底部的,而不是在顶部*/
{
*s.next=*(s.next-1);
s.next--;
}
*(s.next)=e;
s.top++;
}
/*******定义出栈******/
int pop()
{
int e;
if(s.top==s.base)
return -1;
e=*--s.top;
return e;
}
/*******判断是否是空栈*********/
int stackempty( )
{
if(s.base==s.top)
return 1;
else
return 0;
}
/***********找各顶点的入度********/
void finddegree( int indegree[])
{
int i,k;
struct arcnode *p;
for(i=1;i
for(p=g.vertices[i].firstarc;p;p=p->nextarc)
{
k=p->adjvex;
indegree[k]++;
}
}
}
/**********拓扑排序函数*********/
void sort( )
{
int i,k,e,y=1;
struct arcnode *p;
int indegree[50]={0};
finddegree(indegree); /*找各顶点的入度*/
initstack( ); //初始化堆栈
for(i=1;i
if(!indegree[i]) /*入度为0的结点入栈*/
{
push(i);
}
}
while(!stackempty())
{
e=pop();
pp[y++]=e; /*按出栈的顺序存在pp[]数组中*/
for(p=g.vertices[e].firstarc;p;p=p->nextarc)
{
k=p->adjvex; /*刚出栈顶点的后一个顶点入度减1*/
if(!(--indegree[k]))
push(k);
}
}
}
/**********结果输出函数*************/
void print(){
int i,d,k=1 ,flag=0;
int numm[20][20]={{0},{0,20},{20,10,0},{20,13,6,0},{20,15,10,5,0},{20,16,12,8,4,0},{20,17,13,9,6,3,0},{20,18,15,12,9,6,3,0},{20,18,15,12,9,6,4,2,0}};/*对8类修法进行分配(分别位用1,2,3,4……学期学完20个科目)*/
Sleep(100); printf("\n\n 【〓〓〓〓〓〓〓数据结构课程设计〓〓〓〓〓〓〓】 \n");
Sleep(200); printf(" 【 】 \n");
Sleep(200); printf(" 【 姓名:piikee 】 \n");
Sleep(200); printf(" 【 】 \n");
Sleep(200); printf(" 【 学号: **************** 】 \n");
Sleep(200); printf(" 【 】 \n");
Sleep(200); printf(" 【 班别:*********** 】 \n");
Sleep(200); printf(" 【 】 \n");
Sleep(200); printf(" 【●●●●●●●●●●●●●●●●●●●●●●】 \n");
do{
flag=0;
printf("\n 总共要多少学期上完这些课(1~8):");
scanf("%d",&d);
if(d<1||d>8)
{
printf(" \n 最多只能8个学期学完这些课.请重新输入.\n\n");
flag=1;
getchar();
}
}while(flag);
Sleep(100); printf("\n\n正");Sleep(100);printf("在");Sleep(100);printf("排");Sleep(100);printf("课");Sleep(100);printf("中");Sleep(100);printf(",");Sleep(100);printf("请");Sleep(100);printf("稍");Sleep(100);printf("侯");Sleep(500);printf(".");Sleep(500);printf(".");Sleep(500);printf(".");
Sleep(100);printf(".");Sleep(100);printf(".");Sleep(100);printf(".");Sleep(100);printf(".");Sleep(100);printf(".");
printf("\n\n∷∷∷∷∷∷∷∷∷∷∷∷∷∷课程安排如下∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷∷\n");
Sleep(2000);printf("\n 第 %d学期的课程表是:\n\n",k);
printf(" ---------------------------------------------------------------\n");
for(i=20;i>0;i--)
{
printf(" || %-5d || %-20s ||\n",num[pp[i]],name[pp[i]]);
printf(" || || || \n");
if(i==numm[d][k])
{
printf(" ===============================================================\n");
printf("\n\n\n\n\n\n №№№№№№№№№№№№№№№№№№№№№№№№№№№№№\n");
Sleep(2000);printf("\n 第 %d学期的课程表是:\n\n",k+1);
printf(" ---------------------------------------------------------------\n");
printf(" || 科目编号 || 课程名 || \n");
printf(" || || || \n");
printf(" || || || \n");
k++;
}
}
printf(" ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("\n 要退出请输入按任意键然后按enter\n");
}
/*********主函数**************/
void main()
{
int u;
int indegree[50]={30};
read( );
sort();
print();
scanf("%s",&u);
}
版权所有,请勿用于商业用途!
Dec
24
实验目的
了解用户程序分配内存以及回收所用内存的过程,加深对操作系统存储管理机制的理解。
实验内容
采用首次适应法、最佳适应法或最差适应法,编写一内存分配和回收模拟程序。
实验选取算法
实验选取的算法是首次适应算法,即分配第一个足够大的孔。查找可以从头开始,也可以从上次首次适应结束时开始。一旦找到足够大的空闲孔,就可以停止。
算法代码:
#include "stdio.h"
#include"stdlib.h"
/* 定义内存分配队列 */
struct fenpei
{
int flag; /* 进程占用 0表示空闲,其他数值表示相应进程 */
int add; /* 起始地址 */
int length; /* 占有长度 */
};
struct fenpei freeq[13];
/* 请求和释放的结构体*/
struct af
{
int num; /*进程ID*/
int af; /* a表示申请,f表示释放 */
int length; /*占用长度*/
};
struct af allocq[13];
/* 首次适应算法函数*/
void go(struct af allowqnow,int *ptotal,struct fenpei *pfreeq)
{
int i,j,num;
int temp_num,temp_add,temp_length;
struct fenpei temp_f1,temp_f2;
/* 申请空间 */
if (allowqnow.af=='a')
{
for (i=0;i<13;i++) /*在所有空间中找到可以增加的空位*/
{
if((pfreeq[i].flag==0)&(pfreeq[i].length>allowqnow.length)) /*空间空闲(flag=0)且空间大于需求*/
{
temp_num=pfreeq[i].flag;
temp_add=pfreeq[i].add+allowqnow.length;
temp_length=pfreeq[i].length-allowqnow.length;
pfreeq[i].flag=allowqnow.num;
pfreeq[i].length=allowqnow.length;
if (pfreeq[i+1].length==0)
{
pfreeq[i+1].flag=temp_num;
pfreeq[i+1].add=temp_add;
pfreeq[i+1].length=temp_length;
}
else
if (pfreeq[i+1].add!=temp_add)
{
temp_f1.flag=temp_num; temp_f1.add=temp_add; temp_f1.length=temp_length;
temp_f2=pfreeq[i+1];
for (j=i+1;pfreeq[j].length!=0;j++)
{
pfreeq[j]=temp_f1;
temp_f1=temp_f2;
temp_f2=pfreeq[j+1];
}
pfreeq[j]=temp_f1;
}
break;
}
}
}
/* 释放空间if (allowqnow.af=='f')*/
else
{
for (i=0;i<13;i++)
{
if (pfreeq[i].flag==allowqnow.num)
{
if ((pfreeq[i-1].flag==0)&(pfreeq[i+1].flag==0)&(i>0))
{
pfreeq[i-1].length=pfreeq[i-1].length+allowqnow.length+pfreeq[i+1].length;
for (j=i;pfreeq[j].length!=0;j++)
{
pfreeq[j].flag=pfreeq[j+2].flag;
pfreeq[j].add=pfreeq[j].add;
pfreeq[j].length=pfreeq[j].length;
}
}
else if ((pfreeq[i-1].flag==0)&(i>0))
{
pfreeq[i-1].length=pfreeq[i-1].length+allowqnow.length;
for (j=i;pfreeq[j].length!=0;j++)
{
pfreeq[j].flag=pfreeq[j+1].flag;
pfreeq[j].add=pfreeq[j+1].add;
pfreeq[j].length=pfreeq[j+1].length;
}
}
else if (pfreeq[i+1].flag==0)
{
pfreeq[i].flag=0;
pfreeq[i].length=allowqnow.length+pfreeq[i+1].length;
for (j=i+1;pfreeq[j].length!=0;j++)
{
pfreeq[j].flag=pfreeq[j+1].flag;
pfreeq[j].add=pfreeq[j+1].add;
pfreeq[j].length=pfreeq[j+1].length;
}
}
else
{
pfreeq[i].flag=0;
}
}
}
}
num=0; /* 统计空闲块*/
for (i=0;pfreeq[i].length!=0;i++)
if (pfreeq[i].flag==0) num++;
*ptotal=num;
}
/*主函数*/
main()
{
int i,j; char p;
int Freetotal=1;
/*a1,a2,f1,a3,f2,a4,a5,a6,f5,a7,a8,f7,a9*最后3,4,6,8,9存在内存中, rand()%201产生随机进程占用长度*/
allocq[0].num=1;
allocq[0].af='a';
allocq[0].length=rand()%201;
allocq[1].num=2;
allocq[1].af='a';
allocq[1].length=rand()%201;
allocq[2].num=1;
allocq[2].af='f';
allocq[2].length=allocq[0].length;
allocq[3].num=3;
allocq[3].af='a';
allocq[3].length=rand()%201;
allocq[4].num=2;
allocq[4].af='f';
allocq[4].length=allocq[1].length;
allocq[5].num=4;
allocq[5].af='a';
allocq[5].length=rand()%201;
allocq[6].num=5;
allocq[6].af='a';
allocq[6].length=rand()%201;
allocq[7].num=6;
allocq[7].af='a';
allocq[7].length=rand()%201;
allocq[8].num=5;
allocq[8].af='f';
allocq[8].length=allocq[6].length;
allocq[9].num=7;
allocq[9].af='a';
allocq[9].length=rand()%201;
allocq[10].num=8;
allocq[10].af='a';
allocq[10].length=rand()%201;
allocq[11].num=7;
allocq[11].af='f';
allocq[11].length=allocq[9].length;
allocq[12].num=9;
allocq[12].af='a';
allocq[12].length=rand()%201;
freeq[0].flag=0;
freeq[0].add=0;
freeq[0].length=900;
printf(" ***************************\n");
printf(" * *\n");
printf(" *首次适应方法模拟内存分配 *\n");
printf(" ***************************\n\n");
for(i=0;i<13;i++)
{
go(allocq[i],&Freetotal,freeq);
printf("\n 总共有%d个空闲区 ",Freetotal) ;
printf("\n 进程占用(0表示空闲) 起始地址 长度");
for(j=0;freeq[j].length!=0;j++)
printf( "\n %5d %10d %10d",freeq[j].flag,freeq[j].add,freeq[j].length);
printf("\n ***************************************\n\n");
}
printf(" 班级:*****\n\n 姓名:piikee\n\n 学号:***********\n\n");
printf("选择Y结束程序\n");
p=getchar();
}
版权所有,请勿用于商业用途!
了解用户程序分配内存以及回收所用内存的过程,加深对操作系统存储管理机制的理解。
实验内容
采用首次适应法、最佳适应法或最差适应法,编写一内存分配和回收模拟程序。
实验选取算法
实验选取的算法是首次适应算法,即分配第一个足够大的孔。查找可以从头开始,也可以从上次首次适应结束时开始。一旦找到足够大的空闲孔,就可以停止。
算法代码:
#include "stdio.h"
#include"stdlib.h"
/* 定义内存分配队列 */
struct fenpei
{
int flag; /* 进程占用 0表示空闲,其他数值表示相应进程 */
int add; /* 起始地址 */
int length; /* 占有长度 */
};
struct fenpei freeq[13];
/* 请求和释放的结构体*/
struct af
{
int num; /*进程ID*/
int af; /* a表示申请,f表示释放 */
int length; /*占用长度*/
};
struct af allocq[13];
/* 首次适应算法函数*/
void go(struct af allowqnow,int *ptotal,struct fenpei *pfreeq)
{
int i,j,num;
int temp_num,temp_add,temp_length;
struct fenpei temp_f1,temp_f2;
/* 申请空间 */
if (allowqnow.af=='a')
{
for (i=0;i<13;i++) /*在所有空间中找到可以增加的空位*/
{
if((pfreeq[i].flag==0)&(pfreeq[i].length>allowqnow.length)) /*空间空闲(flag=0)且空间大于需求*/
{
temp_num=pfreeq[i].flag;
temp_add=pfreeq[i].add+allowqnow.length;
temp_length=pfreeq[i].length-allowqnow.length;
pfreeq[i].flag=allowqnow.num;
pfreeq[i].length=allowqnow.length;
if (pfreeq[i+1].length==0)
{
pfreeq[i+1].flag=temp_num;
pfreeq[i+1].add=temp_add;
pfreeq[i+1].length=temp_length;
}
else
if (pfreeq[i+1].add!=temp_add)
{
temp_f1.flag=temp_num; temp_f1.add=temp_add; temp_f1.length=temp_length;
temp_f2=pfreeq[i+1];
for (j=i+1;pfreeq[j].length!=0;j++)
{
pfreeq[j]=temp_f1;
temp_f1=temp_f2;
temp_f2=pfreeq[j+1];
}
pfreeq[j]=temp_f1;
}
break;
}
}
}
/* 释放空间if (allowqnow.af=='f')*/
else
{
for (i=0;i<13;i++)
{
if (pfreeq[i].flag==allowqnow.num)
{
if ((pfreeq[i-1].flag==0)&(pfreeq[i+1].flag==0)&(i>0))
{
pfreeq[i-1].length=pfreeq[i-1].length+allowqnow.length+pfreeq[i+1].length;
for (j=i;pfreeq[j].length!=0;j++)
{
pfreeq[j].flag=pfreeq[j+2].flag;
pfreeq[j].add=pfreeq[j].add;
pfreeq[j].length=pfreeq[j].length;
}
}
else if ((pfreeq[i-1].flag==0)&(i>0))
{
pfreeq[i-1].length=pfreeq[i-1].length+allowqnow.length;
for (j=i;pfreeq[j].length!=0;j++)
{
pfreeq[j].flag=pfreeq[j+1].flag;
pfreeq[j].add=pfreeq[j+1].add;
pfreeq[j].length=pfreeq[j+1].length;
}
}
else if (pfreeq[i+1].flag==0)
{
pfreeq[i].flag=0;
pfreeq[i].length=allowqnow.length+pfreeq[i+1].length;
for (j=i+1;pfreeq[j].length!=0;j++)
{
pfreeq[j].flag=pfreeq[j+1].flag;
pfreeq[j].add=pfreeq[j+1].add;
pfreeq[j].length=pfreeq[j+1].length;
}
}
else
{
pfreeq[i].flag=0;
}
}
}
}
num=0; /* 统计空闲块*/
for (i=0;pfreeq[i].length!=0;i++)
if (pfreeq[i].flag==0) num++;
*ptotal=num;
}
/*主函数*/
main()
{
int i,j; char p;
int Freetotal=1;
/*a1,a2,f1,a3,f2,a4,a5,a6,f5,a7,a8,f7,a9*最后3,4,6,8,9存在内存中, rand()%201产生随机进程占用长度*/
allocq[0].num=1;
allocq[0].af='a';
allocq[0].length=rand()%201;
allocq[1].num=2;
allocq[1].af='a';
allocq[1].length=rand()%201;
allocq[2].num=1;
allocq[2].af='f';
allocq[2].length=allocq[0].length;
allocq[3].num=3;
allocq[3].af='a';
allocq[3].length=rand()%201;
allocq[4].num=2;
allocq[4].af='f';
allocq[4].length=allocq[1].length;
allocq[5].num=4;
allocq[5].af='a';
allocq[5].length=rand()%201;
allocq[6].num=5;
allocq[6].af='a';
allocq[6].length=rand()%201;
allocq[7].num=6;
allocq[7].af='a';
allocq[7].length=rand()%201;
allocq[8].num=5;
allocq[8].af='f';
allocq[8].length=allocq[6].length;
allocq[9].num=7;
allocq[9].af='a';
allocq[9].length=rand()%201;
allocq[10].num=8;
allocq[10].af='a';
allocq[10].length=rand()%201;
allocq[11].num=7;
allocq[11].af='f';
allocq[11].length=allocq[9].length;
allocq[12].num=9;
allocq[12].af='a';
allocq[12].length=rand()%201;
freeq[0].flag=0;
freeq[0].add=0;
freeq[0].length=900;
printf(" ***************************\n");
printf(" * *\n");
printf(" *首次适应方法模拟内存分配 *\n");
printf(" ***************************\n\n");
for(i=0;i<13;i++)
{
go(allocq[i],&Freetotal,freeq);
printf("\n 总共有%d个空闲区 ",Freetotal) ;
printf("\n 进程占用(0表示空闲) 起始地址 长度");
for(j=0;freeq[j].length!=0;j++)
printf( "\n %5d %10d %10d",freeq[j].flag,freeq[j].add,freeq[j].length);
printf("\n ***************************************\n\n");
}
printf(" 班级:*****\n\n 姓名:piikee\n\n 学号:***********\n\n");
printf("选择Y结束程序\n");
p=getchar();
}
版权所有,请勿用于商业用途!
Dec
24
摘要:设计ARM板到主机的网络通信
关键字:ARM 主机 计算机 通讯程序 UART 串口 接口 源码
1 引言
背景:期末课程设计,要求设计实现ARM板到主机的网络通信
意义和目的:借此课程设计,使得我们能够更好掌握网络通讯技术与网络编程技巧。
2 总体设计
2.1提供配置与器件
ARM7板一块,串口线一条,JATA线一条,电源线一条。PC端开发平台为C#.Net平台。
2.2 系统框架设计
大致是通过在ARM板的RS232接口接收计算机传过来的数据,然后再通过RS232回传对计算机,并在计算机上显示出来。另外,如果数据需要保存,可以保存到一个txt文本文档中。
主文件MAIN.C代码:
#include "option.h"
#include "def.h"
#include "44b.h"
#include "44blib.h"
void Main(void)
{
unsigned char aa;
char *string;
rSYSCFG=CACHECFG; // Using 8KB Cache//
Port_Init();
ChangePllValue( 70, 3, 1 ) ; //设置CPU频率为78M
Uart_Init(0,57600);
Led_Display(0x0);
Delay(10);
Uart_Select(0); //Select UART0
Uart_Printf("\nARM通讯程序设计");
Uart_Printf("\nPlease Press A String");
while(1){
Uart_GetString(string); //从串口读取字符串
Uart_SendString(string); //发送字符串
}
}
PC端C#.net开发主界面代码:
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;
namespace Frontwork_WindowsForms
{
public partial class Form1 : Form
{
static System.IO.Ports.SerialPort _serialPort;
public Form1()
{
InitializeComponent();
_serialPort = new System.IO.Ports.SerialPort("COM1");
_serialPort.Parity = Parity.None; //设置校验位
_serialPort.StopBits = StopBits.One; //设置停止位
_serialPort.BaudRate = 57600; //设置波特率
_serialPort.DataBits = 8; //设置数据位
_serialPort.Open();
}
private void button1_Click(object sender, EventArgs e)
{
Write();
}
public void Write()
{
try
{
string message = textBox2.Text;
textBox2.Text = "";
_serialPort.Write(message); //向串口发送字符串message
Thread.Sleep(10);
string message1 = _serialPort.ReadExisting(); //读取串口字符串
if (message1 != "")
textBox1.Text += message1 + "\r\n";
}
catch (TimeoutException)
{
}
}
private void button2_Click(object sender, EventArgs e)
{
Testread.hello(textBox1.Text); //保存数据到arm.txt
MessageBox.Show("保存成功");
}
}
}
数据保存功能代码
//文本文件操作:创建/读取/拷贝/删除
using System;
using System.IO;
class Testread
{
public static void hello(string aa)
{
//创建并写入(将覆盖已有文件)
using (StreamWriter sw = File.CreateText("arm.txt"))
{
sw.WriteLine(aa);
}
}
}
PC端项目源文件下载:
下载文件 (已下载 1478 次)
ARM7源文件下载:
下载文件 (已下载 2554 次)
实验报告文件下载:
下载文件 (已下载 633 次)
此项目开发人员piikee LALA XIXI对此项目保留所有权,请勿用于商业用途!
关键字:ARM 主机 计算机 通讯程序 UART 串口 接口 源码
1 引言
背景:期末课程设计,要求设计实现ARM板到主机的网络通信
意义和目的:借此课程设计,使得我们能够更好掌握网络通讯技术与网络编程技巧。
2 总体设计
2.1提供配置与器件
ARM7板一块,串口线一条,JATA线一条,电源线一条。PC端开发平台为C#.Net平台。
2.2 系统框架设计
大致是通过在ARM板的RS232接口接收计算机传过来的数据,然后再通过RS232回传对计算机,并在计算机上显示出来。另外,如果数据需要保存,可以保存到一个txt文本文档中。
主文件MAIN.C代码:
#include "option.h"
#include "def.h"
#include "44b.h"
#include "44blib.h"
void Main(void)
{
unsigned char aa;
char *string;
rSYSCFG=CACHECFG; // Using 8KB Cache//
Port_Init();
ChangePllValue( 70, 3, 1 ) ; //设置CPU频率为78M
Uart_Init(0,57600);
Led_Display(0x0);
Delay(10);
Uart_Select(0); //Select UART0
Uart_Printf("\nARM通讯程序设计");
Uart_Printf("\nPlease Press A String");
while(1){
Uart_GetString(string); //从串口读取字符串
Uart_SendString(string); //发送字符串
}
}
PC端C#.net开发主界面代码:
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;
namespace Frontwork_WindowsForms
{
public partial class Form1 : Form
{
static System.IO.Ports.SerialPort _serialPort;
public Form1()
{
InitializeComponent();
_serialPort = new System.IO.Ports.SerialPort("COM1");
_serialPort.Parity = Parity.None; //设置校验位
_serialPort.StopBits = StopBits.One; //设置停止位
_serialPort.BaudRate = 57600; //设置波特率
_serialPort.DataBits = 8; //设置数据位
_serialPort.Open();
}
private void button1_Click(object sender, EventArgs e)
{
Write();
}
public void Write()
{
try
{
string message = textBox2.Text;
textBox2.Text = "";
_serialPort.Write(message); //向串口发送字符串message
Thread.Sleep(10);
string message1 = _serialPort.ReadExisting(); //读取串口字符串
if (message1 != "")
textBox1.Text += message1 + "\r\n";
}
catch (TimeoutException)
{
}
}
private void button2_Click(object sender, EventArgs e)
{
Testread.hello(textBox1.Text); //保存数据到arm.txt
MessageBox.Show("保存成功");
}
}
}
数据保存功能代码
//文本文件操作:创建/读取/拷贝/删除
using System;
using System.IO;
class Testread
{
public static void hello(string aa)
{
//创建并写入(将覆盖已有文件)
using (StreamWriter sw = File.CreateText("arm.txt"))
{
sw.WriteLine(aa);
}
}
}
PC端项目源文件下载:
下载文件 (已下载 1478 次)ARM7源文件下载:
下载文件 (已下载 2554 次)实验报告文件下载:
下载文件 (已下载 633 次)此项目开发人员piikee LALA XIXI对此项目保留所有权,请勿用于商业用途!






