最近一直忙着上课,一直忙着写论文,一直忙着准备考试,但是脑子没有停止思考。

下学是结合个人的学习经历,给希望学习软件的菜鸟一点点帮助。

1:菜鸟也想学编程

大部分同学从大学开始接触软件编程,但其实有一少部分的幸运的人会在高中,或是初中接触软件。他们在软件方面的启蒙教育会早于我们。当然这样的人还是少数,在中国这样的教育体制下,应试教育太严重。很少有人初高中就能机会去学习编程语言,然后写自己感兴趣的软件。所以大部分人接触软件编程还是从大学起。如何能不那么困难的学习编程呢?结合自己的实际经验,学习编程应该在思想上先做到如下认识。很多人一上来,就想做什么大型软件,操作系统啊,gui的软件啊。这样是否太浮躁了,计算机怎么运行的你都不知道,就想一步登天,一个字,难!从基础开始吧!那什么是基础啊?ok,下面就说说基础:汇编语言是基础吧,c语言是基础吧,计算机组成原理是基础吧,当然如果你是学单片机编程,那就看单片机原理吧。

上面的是基础,还真是基础,还有更高级的内容下面会一步一步提到。现在对上面的基础知识如何学习,做一些说明。

a:计算机组成原理:必须要先看的,你要对计算机or 单片机进行编程,肯定要了解一下这个硬件对象啊。但是学习计算机组成原理时,不要走误区,不要去背一些概念,要理解,当然你如果不理解也没有关系,看一遍有个大概念的印象。至少做到有这样的理解:计算机是由cpu,memoy(内存),disk(硬盘or SSD),还有输入(mouse ,keyboard等)、输出设备(screen、printer等)组成的。

对cpu的认识:做两种运算:加减乘除,与或非,(做运算时数据主要是在寄存器中),读内存数据到cpu内部,写cpu内部数据到memory

对memory的认识:保存数据,memoy就是内存条,容量很大,内存每个字节有地址,cpu通过这个内存的地址找到内存中的数据。内存的这个地址就是c语言中的指针,汇编中所说的寻址方式,就是如何得到内存的地址。(思考,内存为什么有地址,cpu的寄存器为什么 没有地址)

disk:就是我们说的硬盘,硬盘容量比内存大,速度比内存慢。用来存放大量的不是经常用到的数据,当然,包括os也是很在硬盘上的。

ok,上面是对硬件的认识,现在从较高的层次思考:

对于cpu来说只有类设备,一类是用线性地址寻址的内存memory mapped的方式 ,汇编中用mov指令来读写内存;另一类是用io端口地址的方式来访问的设备,如硬盘,mouse,keyboard,等全是这样的设备,汇编中用in  ,out指令来读写这类设备。

所以cpu就是通过mov and out ,in来操作这些设备的。了解到这里就够了,不要想多了,后面不懂的慢慢积累,学习的过程就是这样的,一口吃不了大胖子。

有了上面的知识,下面可以学习汇编语言了,学习汇编很麻烦,好像做实验也不方便,而且也没有什么意思,写一个hello world都要费好大的劲。 能自己用汇编写一个hello world的人还算是有毅力了。好多人还没有开始写程序,就被搞汇编的语法搞殘了,本人曾经好像也是。其实是思想觉悟低了,想想不论是c语言,还是汇编语言,他们的核心都差不多:如何实现if,如何实现loop,还有如何读写内存,如何操作screen等外设。如果你是从这个层次来学习汇编语言,c语言,你会省好多事。为什么呢,这样说,写程序是一门实践活动,你要运手写,在入门的时间,不写代码是肯定不会的。等到了高手的阶段,要多思考,写代码就少了。就如同学自行车一样,你只想着怎么骑,别人也讲了很多关于怎么骑自行车的事,你还是不会,为什么,因为你自己要拿一辆车来骑骑,摔几次,你才有感觉。

写程序也是一样,但是程序语言有学习的套路,语法的东西是死的,不用自己强记,不记得了翻书,要学习的就是如何实现读写内存,如何对数据做+-x / and logic运行,如何把数据在屏幕上显示,如何用汇编实现if ,while这样的loop。

学会这些东西,你就学会汇编了。去记那些语法用处是不大的,因为你程序写多了,自然这些语法就记得了。为什么不让你记语言法呢,因为语法是人定的,没用太多理由,有的是为了方便,有的完全没有理由。记得有同学问本人,为什么汇编用mov,不用move,晕倒,这样的问题真心不想回答。因为这是发明汇编语言的人定的。(你要真要找理由,那就是英文简写都是去掉元音字母的,如果move 变成了mv,就不知道mv是什么意思了,所以写成mov吧)。我这只是举一例,学习汇编是,不要去想那些语法知识,没有意义。我们要学习的是如何读写内存,如果作if判断,如何实现loop就ok了。写程序时就只用到上面的内容。感觉说的有点多了。上面只是说看书时,如何学习汇编语言,但是实践学科是不能只看书的。下面说说用汇编来写写程序。汇编的优势在于对硬件的操作,所以还是直接操作硬件吧,这样对以后学操作系统,学bios,学习linux源码也是大有用处的。我的建议就是搞一台不用的旧电脑,直接在上面运行自己写的汇编代码。如果没有这个条件,就在虚拟机上折腾吧。

前几天本人在群中有此一言,买一台几百块的二手笔记本学习嵌入式,个人感觉没有什么不妥啊,但是好多人说不太可能。嵌入式编程就是从pc机编程发展出来的,有何不可?

如果你真有台二手笔记本,可以这样来学习汇编语言编程。(前提是这们二手本支持从u盘启动,bios中有设置)

1:在你的牛B的个人电脑or 笔记本上,写好汇编程序。写个在屏幕上显示hello world的程序吧,我下面用的是伪代码。

char *pt=hello world"

disp(pt)

//想想用汇编如何实现disp函数

思路:得到"hello world"的在内存中的首地址,然后读这个地址的内容到寄存器,

将寄存器中的内容送到显存,然后地址++,然后用if判断是否到了最后一个字节。

2:从上面的思路可以知道,我们要知道如何在代码中得到内存的地址,读内存的内容到寄存器,送寄存器的内容到显存,这些内容哪里不懂,就是去翻书,书上,网上都有。程序就是之样写出来了。先有思路,有伪代码,最后转化成汇编。

3:然后用nasm汇编器进行汇编后,就变成了可以执行的机器码了。

4:在linux下,用dd命令,把上面编译好的机器码,写到你的u盘第一个扇区上.(win下也有写u盘的软件,不过需要要好好找找)

5:取下u盘,插到你买的二手笔记本上,开机,在bios里面设置成u盘启动。这时你会看到在屏幕上显示了hello world

整个过程就是这么简单的,但是上面只是一个例子,只是对屏幕的操作,显示一个字符串而已,更高级的内容是学习如何得到按键的输入,如何读写硬盘,如何驱动鼠标。 这些实验就是x86上面的嵌入式裸机实验了。这些内容学习好了,就可以进行更深入的,关于计算机图形用户界面的编程,还有如何驱动usb设备等内容。这些知识的学习如果你只用汇编来编程,你会累死,当然如果你真的用汇编写出来这样的程序,你的汇编已经非常牛了。对于驱动更多的外设,你需要学习c语言了。因为汇编写起来太慢,不容易维护。但是在学习汇编,用汇编直接操作这些硬件的过程中,你会体会到汇编的强大,你会去学习x86结构16位模式如何编程,32位模式如何编程,这些知识对于你去学习linux的源码,是必须的。

所以从面的角度分析,我们用x86的二手笔记本来学习汇编语言的编程,用来直接控制keyboad,mouse,内存,硬盘等多设都是可以的。到了一定的阶段,你可以用汇编和c语言混合起来,写一个带Gui的bootloader来加载linux内核也是可能的。当然说了这么多,如果有谁愿意买台二手笔记本学习汇编编程,本人到是愿意教你一步一步的汇编入门。从基本的控制显示器开始,到u盘,到硬盘。

有问题需要交流请加:qq:397916230

用x86学习嵌入式编程,今天先讲到这里,未完待续..................................

菜鸟学编程,用x86二手本学习嵌入式编程(硬件编程)相关推荐

  1. arm体系结构与编程_教程:如何学习嵌入式系统(基于ARM平台)

    一.嵌入式系统的概念 着重理解"嵌入"的概念 主要从三个方面上来理解. 1.从硬件上,将基于CPU的处围器件,整合到CPU芯片内部,比如早期基于X86体系结构下的计算机,CPU只是 ...

  2. Java网络编程入门(二)之客户端与服务器端编程步骤详解

    1.2 网络编程技术 前面介绍了网络编程的相关基础知识,初步建立了网络编程的概念,但是实际学习网络编程还必须使用某种程序设计语言进行代码实现,下面就介绍一下网络编程的代码实现. 1.2.1 网络编程步 ...

  3. 菜鸟学算法——动态规划(二)

    概述 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法,它是应用数学中用于解决某类最优化问题的重要工具.20世纪 ...

  4. java做一个mud_菜鸟学Java(十二)——搭建一个完整的Java开发环境

    作为一个Java程序员,配置一个java开发环境是必备的技能,今天给广大菜鸟初学者补上一课.环境的配置,大概就分三个1,JDK 2,Tomcat(或者其他的)3,eclipse(或者myeclipse ...

  5. 菜鸟学SSH(十二)——Hibernate与Spring配合生成表结构

    前几天向大家介绍了一种用工具类生成数据表的方法,不过之前的方法需要使用一个跟项目关系不大的工具类.不免让人觉得有些多余,所以呢,今天再向大家介绍一种方法.即Hibernate与Spring配合生成表结 ...

  6. T-SQL编程基础之二:条件选择、循环编程

    1. 条件判断以及GOTO语句 条件判断是计算机语言的重要功能,在T-SQL中,条件判断的语句是: if 条件 - else - 或者是: if 条件 - 注意写法和C类似,但条件描述不使用()也可以 ...

  7. 3.1 学习计算机,从编程入手 ——《逆袭大学》连载

    返回到[全文目录] 目录 3.1 学习计算机,从编程入手 程序是计算机的灵魂 学习计算机绕不开程序设计 用编程进入计算机世界 3.1 学习计算机,从编程入手  计算机的神通广大,已经是有目共睹. 计算 ...

  8. Modern C++ 学习笔记——C++函数式编程

    往期精彩: Modern C++ 学习笔记--易用性改进篇 Modern C++ 学习笔记 -- 右值.移动篇 Modern C++ 学习笔记 -- 智能指针篇 Modern C++ 学习笔记 -- ...

  9. VC编程实现位图图像二值化、反相

    VC编程实现位图图像二值化.反相 VC编程进行位图的像素操作(灰度化)介绍了VC对位图图像灰度化处理,本文继续介绍位图处理类CImageUtility的其它成员方法,限于篇幅,本文着重介绍VC编程实现 ...

最新文章

  1. 有没有更好的Marker方法?
  2. ext 解析后台返回response.responseText中的数据
  3. python find不区分大小写_牛鹭学院:Python基础了解
  4. MIPI CSI-2规范一——概述及层级
  5. 数据科学入门与实战:玩转pandas之五
  6. oracle ogg 删除,OGG导致归档无法RMAN删除一例
  7. Mysql 版本号、存储引擎、索引查询
  8. mysql union 别名报错_浅析mysqlunion和unionall
  9. 兰州大学计算机英语分数线,兰州大学09MBA分数线A线140综合72英语42
  10. 视频教程-小学生c++趣味编程入门视频教程 少儿C十十信息学奥赛竞赛网课-C/C++
  11. hdu4415 Assassin's Creed
  12. 如果有一天我老无所依,请把我埋在,新疆的田野上
  13. 用C语言编程写高考祝福,2020高考祝福自己的句子_高考给自己加油打气的话精选100句...
  14. 石油勘探是属于计算机应用中的,中石油17春《油气田勘探》第一二三阶段在线作业答案...
  15. 三角形已知三个点坐标,求外心坐标的公式
  16. ACM-计算几何之Leyni, LOLI and Line——hrbust1104
  17. 3. 使用K8S部署tomcat
  18. linux与python什么关系,如何处理Linux / Python依赖关系?
  19. DapperPoco -- 基于Dapper的、轻量级的、高性能的、简单的、灵活的ORM框架
  20. 别怕,遇到Map源码面试题这样答就对了

热门文章

  1. 原来OPPO手机自带的语音翻译!贴心又实用,不会用手机就白买了
  2. 手把手教你用solidworks画螺杆
  3. 链式前向星存图(有图详解)
  4. 【jzoj4637】【大鱼海棠】
  5. C# NPOI Excel固定模板写入数据
  6. chrome扩展插件一:什么是chrome扩展插件
  7. DC/DC的工作原理
  8. vue-qr二维码插件使用简介
  9. Redis安装,配置
  10. 云服务器安装宝塔面板