﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-程序空间-文章分类-学海无崖</title><link>http://www.cppblog.com/lh13392/category/2167.html</link><description>C++初学者</description><language>zh-cn</language><lastBuildDate>Fri, 23 May 2008 15:00:20 GMT</lastBuildDate><pubDate>Fri, 23 May 2008 15:00:20 GMT</pubDate><ttl>60</ttl><item><title>学习c++的50条忠告</title><link>http://www.cppblog.com/lh13392/articles/9596.html</link><dc:creator>妖妖瞳</dc:creator><author>妖妖瞳</author><pubDate>Sat, 08 Jul 2006 20:34:00 GMT</pubDate><guid>http://www.cppblog.com/lh13392/articles/9596.html</guid><wfw:comment>http://www.cppblog.com/lh13392/comments/9596.html</wfw:comment><comments>http://www.cppblog.com/lh13392/articles/9596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lh13392/comments/commentRss/9596.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lh13392/services/trackbacks/9596.html</trackback:ping><description><![CDATA[1.把C++当成一门新的语言学习（和C没啥关系！真的。）； 

2.看《Thinking In C++》，不要看《C++变成死相》； 

3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看； 

4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境，而我们要学的是一门语言； 

5.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单，或者可以引伸出很多知识点； 

6.会用Visual C++，并不说明你会C++； 

7.学class并不难，template、STL、generic programming也不过如此——难的是长期坚持实践和不遗余力的博览群书； 

8.如果不是天才的话，想学编程就不要想玩游戏——你以为你做到了，其实你的C++水平并没有和你通关的能力一起变高——其实可以时刻记住：学C++是为了编游戏的； 

9.看Visual C++的书，是学不了C++语言的； 

10.浮躁的人容易说：XX语言不行了，应该学YY；——是你自己不行了吧！？ 

11.浮躁的人容易问：我到底该学什么；——别问，学就对了； 

12.浮躁的人容易问：XX有钱途吗；——建议你去抢银行； 

13.浮躁的人容易说：我要中文版！我英文不行！——不行？学呀！ 

14.浮躁的人容易问：XX和YY哪个好；——告诉你吧，都好——只要你学就行； 

15.浮躁的人分两种：a)只观望而不学的人；b)只学而不坚持的人； 

16.把时髦的技术挂在嘴边，还不如把过时的技术记在心里； 

17.C++不仅仅是支持面向对象的程序设计语言； 

18.学习编程最好的方法之一就是阅读源代码； 

19.在任何时刻都不要认为自己手中的书已经足够了； 

20.请阅读《The Standard C++ Bible》(中文版：标准C++宝典)，掌握C++标准； 

21.看得懂的书，请仔细看；看不懂的书，请硬着头皮看； 

22.别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍； 

23.请看《Effective C++》和《More Effective C++》以及《Exceptional C++》； 

24.不要停留在集成开发环境的摇篮上，要学会控制集成开发环境，还要学会用命令行方式处理程序； 

25.和别人一起讨论有意义的C++知识点，而不是争吵XX行不行或者YY与ZZ哪个好； 

26.请看《程序设计实践》，并严格的按照其要求去做； 

27.不要因为C和C++中有一些语法和关键字看上去相同，就认为它们的意义和作用完全一样； 

28.C++绝不是所谓的C的“扩充”——如果C++一开始就起名叫Z语言，你一定不会把C和Z语言联系得那么紧密； 

29.请不要认为学过XX语言再改学C++会有什么问题——你只不过又在学一门全新的语言而已； 

30.读完了《Inside The C++ Object Model》以后再来认定自己是不是已经学会了C++； 

31.学习编程的秘诀是：编程，编程，再编程； 

32.请留意下列书籍：《C++面向对象高效编程（C++ Effective Object-Oriented Software Construction）》《面向对象软件构造(Object-Oriented Software Construction)》《设计模式（Design Patterns）》《The Art of Computer Programming》； 

33.记住：面向对象技术不只是C++专有的； 

34.请把书上的程序例子亲手输入到电脑上实践，即使配套光盘中有源代码； 

35.把在书中看到的有意义的例子扩充； 

36.请重视C++中的异常处理技术，并将其切实的运用到自己的程序中； 

37.经常回顾自己以前写过的程序，并尝试重写，把自己学到的新知识运用进去； 

38.不要漏掉书中任何一个练习题——请全部做完并记录下解题思路； 

39.C++语言和C++的集成开发环境要同时学习和掌握； 

40.既然决定了学C++,就请坚持学下去，因为学习程序设计语言的目的是掌握程序设计技术，而程序设计技术是跨语言的； 

41.就让C++语言的各种平台和开发环境去激烈的竞争吧，我们要以学习C++语言本身为主； 

42.当你写C++程序写到一半却发现自己用的方法很拙劣时，请不要马上停手；请尽快将余下的部分粗略的完成以保证这个设计的完整性，然后分析自己的错误并重新设计和编写（参见43）； 

43.别心急，设计C++的class确实不容易；自己程序中的class和自己的class设计水平是在不断的编程实践中完善和发展的； 

44.决不要因为程序“很小”就不遵循某些你不熟练的规则——好习惯是培养出来的，而不是一次记住的； 

45.每学到一个C++难点的时候，尝试着对别人讲解这个知识点并让他理解——你能讲清楚才说明你真的理解了； 

46.记录下在和别人交流时发现的自己忽视或不理解的知识点； 

47.请不断的对自己写的程序提出更高的要求,哪怕你的程序版本号会变成Version 100.XX； 

48.保存好你写过的所有的程序——那是你最好的积累之一； 

49.请不要做浮躁的人； 

50.请热爱C++!

<img src ="http://www.cppblog.com/lh13392/aggbug/9596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lh13392/" target="_blank">妖妖瞳</a> 2006-07-09 04:34 <a href="http://www.cppblog.com/lh13392/articles/9596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 汇编语言命令参数程序的编写</title><link>http://www.cppblog.com/lh13392/articles/9595.html</link><dc:creator>妖妖瞳</dc:creator><author>妖妖瞳</author><pubDate>Sat, 08 Jul 2006 20:33:00 GMT</pubDate><guid>http://www.cppblog.com/lh13392/articles/9595.html</guid><wfw:comment>http://www.cppblog.com/lh13392/comments/9595.html</wfw:comment><comments>http://www.cppblog.com/lh13392/articles/9595.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lh13392/comments/commentRss/9595.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lh13392/services/trackbacks/9595.html</trackback:ping><description><![CDATA[ 
一、 引言：
    如果大家用过TurboC2.0/3.0 or BorlandC3.X等编译器编写DOS应用程序的话，编写一个命令行参数形式的应用程序对大家来说是一件非常容易的事情，只要在主函main()中加几个参数就OK（int main(int argc,char *argv[],char *env[]){}）。相对汇编语言来说编写一个命令行参数的程序就比较艰难，它要用到DOS的程序段前缀PSP（Program Segment Prefix）知识以及其他相关DOS知识。（本文只对参数介绍，环境块不作讨论）
二、相关知识：
    在DOS的提示符下键入一个命令（内/外部命令）或程序的名字,DOS SHELL（COMMAND.COM）首先根据名字判别其是内部命令还是外部命令或用户程序，若是内部命令则调用COMMAND.COM暂驻在内存中的部分的DOS内部命令代码，若是外部命令或用户程序，DOS SHELL则在当前目录和搜索路径中搜索匹配的文件名，找到了就加载程序，加载出错显示错误信息，找不到则显示Bad command or file name。
    用户载DOS提示符下输入一串字符串，DOS SHELL把以回车（0Dh）为结束的这以字符串作为一个命令和参数进行解释，第一个空格以前的字符串为命令名（必须符合DOS命名规则），第一个空格（包括空格）到回车之间的字符作为命令或程序的参数。
    程序段前缀--PSP是DOS加载一个外部命令或用户程序（扩展名为COM or EXE）时，在程序段前设置一个以节为边界，固定长度为10H（即256字节，一节为16字节）的存储块，PSP和程序段共有一个内存控制块（MCB），PSP位于每个程序的开始部分，无论是COM还是EXE，PSP的数据结构是相同的。PSP是程序与DOS的接口，DOS利用PSP管理进程，DOS用户进程指的是一个已被装入内存的可执行程序或已被调入内存但未执行的程序，COMMAND.COM是一个最早被装入内存的程序，因而可被看作祖先进程，外部命令或用户程序作为子进程，被DOS通过INT 21H的4BH号子功能来加载。用户程序也可以通过INT 21H的4BH号子功能调用来加载自己的子进程，控制子进程的执行，并通过4DH号子功能调用获取子进程的运行状况。 
    PSP中存有许多关于程序启动、执行、结束以及进程调度、进程环境地址和进程标志等重要信息。程序利用PSP还可以控制父子进程间的通信。至于PSP的数据结构的详细内容请参考有关书籍，本文不详细给出。
    DOS加载一个COM或EXE程序时，段寄存器DS，ES都指向PSP段址（PSP段址是进程的唯一标志符），而不是指向程序的数据段和附加段。COM文件的CS，SS也指向PSP的段址。EXE文件的CS，SS，IP和SP需要进行重定位。
    DOS加载一个外部命令或用户程序时，把文件名之后到回车符之间的字符串，最多可达127个字符作为参数，并把这些字符串送到PSP位移81H开始的区域，位移80H的一个字节存放参数字符串长度（回车符不算在内）。大家可用DEBUG.EXE加载一个带参数的程序，然后用D DS：80子命令查看加载程序的参数。命令行参数一般以空格（20H）为开始，回车符（0DH）为结束，但命令行中的重定向，管道符以及有关信息不作为参数传递给PSP。 
三、示例程序：
    本例程序PARATEST.ASM在没有参数（参数为一连串空格也视为无参数）的情况下显示提示信息，程序以字符'/'作为参数的标志，'/'后的字符是参数，根据不同的参数显示不同的字符串，并忽略'/'前的空格。程序还把非法参数显示出来，由于程序中保存参数的单元只设了两BYTES，如果字符'/'后的第一格字符是合法参数，程序不管字符'/'后有多少个字符都认为是合法的。
    顺便介绍一个汇编编程的技巧，文后附带的示例源程序（PARATEST.ASM）中的DEBUG子程序是利用了INT 21H的07H号子功能等待用户的键盘输入，相当于TURBOC中的getch()函数，作为程序的断点。我们还可以利用其显示断点的调试信息（包括各寄存器的值）。但注意保存现场，并进行现场恢复。

四、结束语：
    一个月以前我还只是会看别人的汇编程序，自从自己动手写程序后，自己的汇编编程水平有了很大的进步。写程序的过程中遇到问题，然后自己看书自己解决问题，这样学习汇编编程比光看书更有效。我的汇编编程的水平还很菜鸟，我会不断提高自己的水平，同时也希望与广大编程爱好者交流。

附：源程序（PARATEST.ASM）
; ************************************************
; * Program:Use asm language to creat a command  *
; *         line and parameter program.          *
; *==============================================*
; * Designer:Howard   Original Place:Wuhan       *
; * Creat Date:09/30/1999                        *
; * Modification Date:10/05/1999                 *
; * Now Version:1.0                              *
; * Pass:Tasm 5.0,Tlink 3.1                      *
; *==============================================*
; *       Modification History                   *
; *----------------------------------------------*
; * Version 1.0 1.Command line and parameter     *
; * 09/30/1999    test program.                  *
; *----------------------------------------------*
; * Version 1.1 2.Add the spaces parameters jud- *
; * 10/05/19999   gement.                        * 
; ************************************************
;


.model small
.386
.code
  org 100h
start:  
main proc far
         push cs
  pop  ds  ;ds=psp seg address
  cld             ;cf=0
  mov  si,81h  ;psp+81h is the first parameter char         
  lea  bx,parameter  ;parameter address(offset) saved to bx
       ;unit parameter is used to save the parameter
         lodsb      ;load a byte from [si] to al,and si=si+1
  cmp  al,0dh     ; Enter?
  jz   scanexit     ;if yes then scan parameter end
  cmp  al,' '
  jz   judgespace
  lodsb
continue:
         push si
  cmp  al,'/'
  jz   parascanloop
         jmp  error      ;wrong parameter
judgespace:
         lodsb
;        call debug         ;set break point  
  cmp  al,0dh
  je   scanexit
  cmp  al,' '
  je   judgespace
  jne  continue
parascanloop:      ;saved the parameter to unit parameter
         mov  [bx],al     ;save al to [bx]，just save the parameters
  lodsb
  cmp  al,0dh     ;Enter?
  jz   choise     ;if yes then jump choise
  inc  bx
  jnb  parascanloop  ;the next char
scanexit:
         lea  dx,noparametermsg
  call disp
  call rettodos
choise:
         lea  si,parameter
  mov  al,[si+1]     ;load the parameter to al
  cmp  al,'?'     ;judge the parameter and choose                                              ;the different process 
  jz   help
  cmp  al,'p'
  jz   print
  cmp  al,'P'
  jz   print
  jmp  error     ;wrong parameter
print:
         lea  dx,message
  call disp
  call rettodos
help:                       ;print the help message
         lea  dx,helpmsg 
  call disp
  call rettodos
error:                      ;print the error parameter message
         lea  dx,wrongparamsg
  call disp
  mov  ax,0200h
         pop  si
  dec  si
prnwrongparameter:   
         lodsb
  cmp  al,0dh
  jz   retdos
  mov  dl,al
  int  21h
  loop prnwrongparameter
retdos:
         mov  dl,'"'
  int  21h
  mov  dl,'!'
  int  21h
  call rettodos
main endp

disp proc near
         mov  ah,09h
  int  21h
  ret
disp endp

rettodos proc near
         mov  ah,4ch
  int  21h
rettodos endp 
;
;set a break point
;debug proc near
;        push ax dx
;  mov  ax,0900h
;  mov  dx,offset debugmsg
;  int  21h
;  mov  ax,0700h
;  int  21h
;  pop  dx
;  pop  ax
;debug endp  
;debugmsg db 0dh,0ah,'Program stop here,press any key to continue...','$'  

noparametermsg db 0ah,0dh,'There is no parameter,enter paratest /? for help.','$'
message   db 0dh,0ah,'This is a parameter test program.','$'
wrongparamsg db 0dh,0ah,'The wrong parameter:"','$'
helpmsg   db 0dh,0ah,'1.Paratest /?'
          db 0dh,0ah,'  Print the help message.'
   db 0dh,0ah,'2.Paratest /p'
   db 0dh,0ah,'  Print the test message.','$'
parameter db 2 dup(?)  
end start   



<img src ="http://www.cppblog.com/lh13392/aggbug/9595.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lh13392/" target="_blank">妖妖瞳</a> 2006-07-09 04:33 <a href="http://www.cppblog.com/lh13392/articles/9595.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>个人收藏的编程下载资源全部公布！！！ </title><link>http://www.cppblog.com/lh13392/articles/9594.html</link><dc:creator>妖妖瞳</dc:creator><author>妖妖瞳</author><pubDate>Sat, 08 Jul 2006 20:32:00 GMT</pubDate><guid>http://www.cppblog.com/lh13392/articles/9594.html</guid><wfw:comment>http://www.cppblog.com/lh13392/comments/9594.html</wfw:comment><comments>http://www.cppblog.com/lh13392/articles/9594.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lh13392/comments/commentRss/9594.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lh13392/services/trackbacks/9594.html</trackback:ping><description><![CDATA[java方面的：
it人资讯交流网
http://www.it315.org
这个网站是我最近才发现的，虽然内容不多，但是提供的相关java工具挺齐全。还有就是里面提供了java教学视频录象的免费下载，好像一两周更换一段。个人觉得挺适合初学者的，尤其是那个classpath的设置，讲的很透彻，大家有空可以看一看。

java官方站点(英文)
http://java.sun.com
要想了解最新的java动态，下载最新的java相关，比如j2se、j2ee、j2se的最新jdk版本就来这里吧。

java中文站
http://www.java-cn.com
这个可能大家都知道，不用说了，他提供的java资源是最丰富的。注册论坛是免费的，还送积分，用积分可以下载软件和电子书等，如果积分用完了，就需要自己发表一些文章来赚新的积分。

中文java网站
http://www.cn-java.com
跟上面站点类似的桓稣荆谥季褪牵何猨ava爱好者服务。值得一看！

锋网
http://www.ijsp.net/tech/book/index.jsp
综合性的java网站，内含“下载中心”、“教程教学”等栏目。

java动力
http://eww.cn
网站的内容可以，但是最为出色的是它所运用的flash技术，我就不在这里多说了，大家去看看就知道了，一个字“酷”！！！

vc方面的：
vc知识库
http://www.vckbase.com
这个网站就不用多说了，学习vc必去之地。网站专门提供了免费的ftp下载，好东东巨多！

vc之路
http://www.vcroad.com
综合软件开发网站，以vc为主。“资源中心”有许多值得下载的东东。

visual c++/mfc开发指南
http://www.vchelp.net
以讲述windows开发为主的站点，提供了最新的源代码，开发工具，开发资料，开发教程和对好的开发站点，开发工具，图书做介绍，同时为从事开发的朋友提供发布自己开发的软件，代码和工具场所。 

c维视点
http://www.c-view.org/root/index.htm
最近发现的vc好站，书籍、软件、代码下载一应具全！！！


游戏开发：
风云工作室
http://member.netease.com/~cloudwu/2000/index.html

标点游戏制作
http://makegame.myetang.com/

未来开发者
http://www.fdev.net/


综合的：
中国软件网
http://www.csdn.net
中国最大的开发者网络，他之所以著名就是因为他的论坛，大家有空可以去看看，能下到很多不错的东东，另外也是交流学习的好地方。

电子书籍的：
http://www.itebook.net

最后公布一个巨好的，狂多的电子书下载
http://www.pdown.net
还有巨好的
http://www.codestudy.net/default.asp
<img src ="http://www.cppblog.com/lh13392/aggbug/9594.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lh13392/" target="_blank">妖妖瞳</a> 2006-07-09 04:32 <a href="http://www.cppblog.com/lh13392/articles/9594.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>