. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->基础知识
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  计算机学习之旅  [待解决] 回复[ 12次 ]   点击[ 888次 ]  
wanghpjxnu
[帖 主]   [ 发表时间:2014-09-10 20:36 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-09-10 18:47
先上学习路线,开始有点曲折:

    Cheat Engine ---> 按键精灵 ---> Visual Basic ---> C ---> C++ ---> 汇编语言 
    ---> Windows程序设计(C/SDK,C++/MFC) ---> ......

   注:MFC只是简单地了解了一下基本原理!现在正在学数据结构、组成原理、操作系统及保护模式下的汇编语言程序设计。

   植物大战僵尸。
    没错,正是这款曾风靡一时的单机小游戏让我走上了自学计算机的旅程!屈指算来,到今天已经快7个月了。
最近几天学习状态不佳,既然无法平静下来看书敲代码,何不写段简短的文字来记录下自己的学习之路...

    一、兴趣是最好的老师

    在植物大战僵尸贴吧看到关于游戏修改器,顿时觉得高大上,于是自己在网上找了一些资料,竟然不到一天就学会了自制游戏修改器,这极大地激发了我兴趣。但是里面只是用鼠标拖拖点点,基本的原理还是不甚明白,觉得没啥意思。

    然后还是在贴吧,看到了按键精灵(通过编程能挂机玩游戏),于是花了近20天的时间看了相关资料和视频,很快就通过按键精灵自己也能做一个GUI界面的带各种简易功能的游戏修改器了。讲解按键精灵视频的老师说按键精灵里面的很多东西是借鉴Visual Basic的。

    于是花了一个月的时间学习VB,能制作具有漂亮界面的Windows应用程序。正是VB,让我真正地对计算机产生了兴趣。

    但从VB论坛贴吧里面,很多人说VB只是初学者的编程语言,要想进入计算机知识的殿堂,必须从C语言开始。 
    
        
    二、入门
wanghpjxnu
[第1楼]   [ 回复时间:2014-09-10 21:00 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-09-10 18:47
好吧,既然计算机入门是从C开始的,于是从当当网一下子买了五本C语言的书籍:C Primer Plus, K&R C,
C和指针, C缺陷与陷阱, C专家编程.
    
    我一定是疯了,其实到现在也只看了前两本关于C语言的书!!!

    花了足足两个月的时间,把C Primer Plus这本书看了三遍,书本上的代码全部都敲到电脑里面去了,所有的课后习题包括编程题都认认真真做了一遍。

    自我感觉C语言基础比较扎实,但是到现在也还没有用C编写出一个应用程序出来,真怀念开始学VB的日子,短短一个月的时间,就能编写出漂亮界面的应用程序。    

    唯一值得高兴的是用C编写了一些简单的线性代数中的计算:如,行列式,矩阵等。

    但是,扫雷,贪食蛇,俄罗斯方块...一个也不会!看来还得继续努力。

    有人说,游戏编程还得学C++
wanghpjxnu
[第2楼]   [ 回复时间:2014-09-10 21:23 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-09-10 18:47
三、初级

    C Primer Plus这本书,让我对作者Stephen Prata肃然起敬!

    作者在大学里讲授从天文学,到物理学,再到计算机等诸多领域里面的学科,知识是如此渊博。我想,等我学好了计算机,一定要认真再学一遍物理学!

    因此C++还是买了Stephen Prata 的《C++ Primer Plus》,虽然C++ Primer更经典,但作者的C Primer Plus让我产生了很强的感情。事实上,看C Primer Plus这本书,作者深入浅出的涉及了几乎所有的C基础知识,每个感念都鞭辟入里,看后有种拨云见日之感。

    还是说说C++吧,事实上我到现在也还没有完全入门,倒不是因为作者写得不好,我想主要两方面的原因:
其一是C++确实博大精深,要想学通学精对于我来说,至少也得花上七八年的时间;其二,也是最主要的原因,是多了一份急躁,而少了脚踏实地的学习态度。完全不像学C语言那样踏实认真,只是看看课本,后面的习题一道也没有做。

    所以,等我学完数据结构、组成原理、操作系统等核心基础课之后,还得返回来继续C++之旅...
gyq
[第3楼]   [ 回复时间:2014-09-10 21:36 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2014-08-02 21:25
嗯,从文字描述来看楼主自学能力不错,加油!
wanghpjxnu
[第4楼]   [ 回复时间:2014-09-10 21:36 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-09-10 18:47
VB,C,C++,Java,C#...
    任何时候都有语言之争,这么多语言,到底学什么好?到底学到什么时候才不用学语言?

    作为初学者的我也曾一度迷茫,后来看了一些论坛帖子,才发现原来汇编语言才是王道,得汇编者得天下!!!
    于是从网上买了很多网友推荐的王爽老师编著的《汇编语言》———从此踏上了不归路!
wanghpjxnu
[第5楼]   [ 回复时间:2014-09-10 21:39 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-09-10 18:47
回复:[第3楼]
------------------
谢谢您的夸奖,我知道后面的路还很漫长...
唯有坚持与努力!
wanghpjxnu
[第6楼]   [ 回复时间:2014-09-10 22:21 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-09-10 18:47
上回书说到,我从网上买了网友推荐的王爽老师编著的《汇编语言》。

    既然这是汇编语言论坛,咱就主要来说说我学习汇编的感受!
    首先我得感谢王爽老师,是您的这本经典之作让我真正地爱上了计算机,更准确地说是爱上了汇编语言和操作系统。
    我先来说一下,看完了《汇编语言》(我买的是第三版)的感受:
    我们来看一下课程设计2:

    计算机开机后,CPU自动进入FFFF:0单元处执行指令,此处是一个jmp指令,为何?因为马上就到了FFFF:F了,只有16个字节可供我们使用。
    执行jmp指令后,计算机跳转到固化在ROM上的BIOS程序,开始自检和初始化程序。
    然后调用int 19h进行操作系统的引导---就是这句话,让我对汇编和操作系统感兴趣了(所以马上从图书馆借了一本于渊写的《orange's 一个操作系统的实现》书来看,还从网上买了《30天自制操作系统》来看,看到保护模式那一部分,完全蒙了,所以现在又买了杨季文的《80X86 汇编语言程序设计教程》来研读!)。

    顺便说一下,我到现在还没有完成课程设计2.所以我打算结合清华的黑皮书和王爽老师的汇编语言再认真地学一遍汇编!
    
    上面的文字逻辑有点乱,就凑合着看吧...
wanghpjxnu
[第7楼]   [ 回复时间:2014-09-11 10:31 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-09-10 18:47
从汇编语言课程设计2开始说起
---------------------------------------------

    我们先看一下课程设计2的主要任务:编写一个可以自行启动计算机的程序。
    第一次看到这句话时,确实让我兴奋不已,磨拳搽掌想好好干一场,因为这个程序和以前的程序有着实质上的不同和飞跃,它是在裸机上运行的。
    但经过认真的思考后,却又发现无从下手。
    
    通过查阅一些相关资料,下面我简单来分析下课程设计2(虽然没有实现,权当交给王爽老师一份不合格的作业):

---------------------------------------------------------------------------
    问题0:计算机开机后,CPU自动进入FFFF:0单元处执行指令,为何选择这个位置?
    分析0:这个位置是可供使用1MB内存快结尾的位置,这样的话,就不会因为ROM的大小改变而造成兼容性问题。
----------------------------------------------------------------------------
    问题1:计算机开机后,CPU自动进入FFFF:0单元处执行指令,此处是一个jmp指令,为何?

    分析1:在系统加电时,最初的1MB内存是BIOS为我们准备好的,下面是具体的分布情况:

    00000~003FF    中断向量表
    00400~004FF    BIOS数据区
    00500~07BFF    空
    07C00~07DFF    引导程序加载区
    07E00~9FFFF    空
    A0000~BFFFF    显示内存区
                     ------以上是主存储器地址空间RAM

    C0000~FFFFF    中断处理程序 ------这是各类ROM地址空间               

    从上面BIOS为我们提供的1MB内存分布来看,FFFF:0到FFFF:F只有16个字节了可供我们使用,所以只能放一个jmp指令。
-------------------------------------
    问题2:那么这个jmp指令跳到哪里呢?

    分析2:接着看课程设计2是怎么说的:执行jmp指令后,计算机跳转到固化在ROM上的BIOS程序,开始自检和初始化程序。
    因此应该是跳转到C0000~FFFFF中断处理程序,用Bochs单步调试发现,跳转到F000:E05B.
   接着往后看,硬件系统检测和初始化后,然后调用int 19h进行操作系统的引导。
----------------------------------------------
    问题3:int 19h中断时如何进行操作系统的引导呢?
    分析3:下面假设是从软盘启动操作系统。
    int 19h是BIOS开机自检以后第一条执行的指令,意思是找启动分区。int 19h会将软盘0道0面1扇区的512字节装载到内存0x7c00中,然后jmp到0x7c00处,开始执行引导程序。
-----------------------------------------------------
    问题4:如何编写引导程序?
wanghpjxnu
[第8楼]   [ 回复时间:2014-09-11 13:14 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-09-10 18:47
org        7c00h                        
        mov        ax, cs
        mov        ds, ax
        mov        es, ax    
        call Menu   ; 调用功能菜单 
   
         mov ah,0 
        int         ; 读取键盘缓冲区
         cmp al, '1'   
        je Reset        
        jmp $            ; 无限循环
    
         Menu:
        mov        ax, Options
        mov        bp, ax                        ; ES:BP = Options地址
        mov        cx, 16 * 4                ; CX = Options长度
        mov        ah, 13h                        ; AH = 13h
        mov al, 01h                     ; AL = 01h
        mov        bh, 00h                        ; 页号为0
        mov bl, 0ch         ; 黑底高亮红字
        mov        dl, 0
        int        10h                            ; 10h 号中断
        ret
    
Options:  db        "1) reset pc     "          
          db    "2) start system "          
          db    "3) clock        "
          db    "4) set clock    "

Reset:
        mov ax,0ffffh
        push ax
        mov ax,0h
        push ax
        retf   

           
times         510-($-$$)        db        0        ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw         0xaa55                                    ; 结束标志
wanghpjxnu
[第9楼]   [ 回复时间:2014-09-11 13:21 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-09-10 18:47
以上代码实现显示菜单,选择1重启计算机功能!
1、使用nasm编译为二进制文件: nasm boot.asm -o boot.bin
2、在Bochs虚拟机中运行
   1)先用bximage工具生成一个虚拟硬盘
   2)用硬盘读写工具将boot.bin文件写入虚拟硬盘0号逻辑扇区
   3)点击bochs.exe直接运行或bochsdbg.exe调试运行
qq2497503669
[第10楼]   [ 回复时间:2018-04-07 23:16 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2018-04-07 15:12
现在我终于悟道一个道理。
学习任何事物,首先要看一下这东西是怎么形成的。
你才能知道是怎么来的,要怎么学。
学会任何事物,取决于你能将事物拆解到什么程度。
这就是本质,细节决定成败啊!
这就是人与人之间的差距啊!
qq2497503669
[第11楼]   [ 回复时间:2018-04-07 23:42 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2018-04-07 15:12
运用任何事物,取决你尝试创造的次数。
失败是成功之母!
没有人能随随便便成功。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved