开窍小老虎,一步一个脚印之 初识汇编(一)

  最近一直浸淫在计算机编程中无法自拔。哲学 认识论中讲过。人类的求知的过程是由两次飞跃。第一是从感性认识到理性认识;第二是从理性认识到实践。这段话对有些人是适用的。我就是其中的一名。在知乎上求助问题“学计算机要懂汇编吗?”,地下有人回复说,对有些人是必须要学会的。因为当我们满脸疑惑的问别人,别人可能会甩我们一脸“你问这个有用吗?”,可我们的脑袋上都套着一句话“你不明白这个,你怎么能看第二章呢?”,对于我来讲,知识的断层是特别影响我求知的道路。

  说说我的学习路线。《VS2010轻松学习C#-从零到深入-天轰穿.NET4趣味编程视频教程》,田老师是一个嬉笑怒骂皆文章的人,是一个没有被体制内教育束缚的人。实践证明,一个人若要是想干成一件事情,循规蹈矩的路子不一定是唯一的路子。第二步,《c#高级编程》(第6版),讲得是深入的c#的基础知识。第三步,《汇编语言》(王爽 第2版)。通过视频我大概了解了什么是编程,编程到底是怎么起作用的。这是我的一个感性认识。然后我需要用专业的知识填充我的理性认识。

  下面说一下 计算机的原理,这些编程语言,到底是怎么就让计算机工作了:

  归根到底,计算机是怎么就能工作呢?其实这个原理的本质 和 “人 按了一下开关 灯就亮”是一样的,“人按开关”,是一个命令,开关接受到命令之后,电流接通,灯变亮了,从“0”变成了“1”。 计算机的机器指令是一列二进制数字,计算机将之转变为一系列的高低电平(高低电压),以使计算机的电子器件收到驱动,进行运算。

     我们把这个过程独立出来“执行计算机指令,进行运算”,进行这个步骤的就是我们熟知的CPU,每一个种类的CPU,由于硬件的设计和内部结构的不同,就需要用不同的电平脉冲来控制,使它工作。所以每一种类的CPU都有自己的机器指令集,也就是机器语言。这样的话,编程的作用就是,用一堆的 0 1 符号控制各个“开关”,实现自己想要达到的效果。这种编程语言,就叫做机器语言。比如,让8086cpu 计算s= 768+12288-1280,机器语言是这样子的:

          101100000000000000000011                                                                                                                                                                 000001010000000000110000                                                                                                                                                                 001011010000000000000101

  这样子很难受了,每一个CPU都有不同的机器语言库,要自己算个东西,得把每个机器语言库的01语言代表的意思都记住。太麻烦了,不行,得想个办法。

  我能不能这样,我想命令机器,把在A上存储的东西移动到B上。我就直接写 "mov a , b"?然后指定一个规则,让机器自己翻译成01语言,这样就不用记那么多的数字了。可问题又来了,如何翻译成01语言呢?

  刚开始我一直在找编译器的原理,找各种编译的方法。但是不管怎么样都是一头雾水。知道天降一本神书《编码-隐匿在计算机软硬件背后的语言》解释我心中多年的困惑。上网上百度书评,基本都是好到爆。上一段的那个问题,推荐读这本书,这本书中会告诉你期盼已久的答案。

  

    

  

 

  

转载于:https://www.cnblogs.com/suyanteng/p/4001089.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python脚本 请求数量达到上限,http请求重试

由于在内网发送http请求同一个token会限制次数,所以很容易达到网关流量上限。 业务中使用了多线程并发,一个线程发起一次http请求,得到正确结果后返回。这里采用的策略是,如果解析出来达到流量上限,那么该线程休眠一段…

shell 字符串操作

string"abcABC123ABCabc" 字符串长度: echo ${#string} #15 echo expr length $string #15 索引 用法:expr index $string $substring expr index $string "ABC" #4 提取子串 用法:${string:position} echo ${string:3} #A…

Linux 之目录 -鸟哥的Linux私房菜

因为利用 Linux 来开发产品或 distributions 的社群/公司与个人实在太多了, 如果每个人都用自己的想 法来配置档案放置的目录,那么将可能造成很多管理上的困扰。 你能想象,你进入一个企业之后,所 接触到的 Linux 目录配置方法竟然跟你以前学的完全不同吗? 很难想象吧~所以,后来…

python脚本:向表中插入新数据,删除表中最旧的数据

一张表存储历史数据,最多存储HISTORY_TABLE_MAX_ROWS条数据,当表中数据未达到HISTORY_TABLE_MAX_ROWS,直接插入;如果达到的话需要保证插入新数据的时候将最旧的数据删除 这里使用先update最新数据,然后再重新update全表…

精通 VC++ 实效编程280例 - 02 菜单和光标

菜单和关闭时重要的 Windows 资源之一。SDK 中,用 HCURSOR 和 HMENU 分别表示菜单和光标的句柄。MFC 中,CMenu 类封装了菜单的功能。 23 动态添加和删除菜单项 添加菜单项可以调用 CMenu::AppendMenu 或 CMenu::InserMenu 函数,删除菜单项可以…

POJ 1860: Currency Exchange 【SPFA】

套汇问题,从源点做SPFA,如果有一个点入队次数大于v次(v表示点的个数)则图中存在负权回路,能够套汇,如果不存在负权回路,则判断下源点到自身的最长路是否大于自身,使用SPFA时松弛操作…

python脚本:判断字符是否为中文

# 判断字符是否为中文 def is_chinese(ch):if u\u4e00 < ch < u\u9fff:return Trueelse:return False

Android 广播 Broadcast学习

Android Broadcast 广播 进程内本地广播 如果你是在你的应用之内使用广播&#xff0c;即不需要跨进程&#xff0c;考虑使用LocalBroadcastManager &#xff0c;这样更有效率&#xff08;因为不需要跨进程通信&#xff09;&#xff0c;并且你不用考虑一些其他应用可以发送或接收…

python:将时间戳转换成格式化日期

import time # 将时间戳转换成格式化日期 def timestamp_to_str(timestampNone, format%Y-%m-%d %H:%M:%S):if timestamp:time_tuple time.localtime(timestamp) # 把时间戳转换成时间元祖result time.strftime(format, time_tuple) # 把时间元祖转换成格式化好的时间retur…

WebApp 里Meta标签大全

1.先说说mate标签里的viewport&#xff1a; viewport即可视区域&#xff0c;对于桌面浏览器而言&#xff0c;viewport指的就是除去所有工具栏、状态栏、滚动条等等之后用于看网页的区域。对于传统WEB页面来说&#xff0c;980的宽度在iphone上显示是很正常的&#xff0c;也是满屏…

python:封装CRUD操作

# 封装数据库操作 def SELECT(db, cursor, sql):try:# 执行SQL语句db.ping(reconnectTrue)cursor.execute(sql)# 获取所有记录列表results cursor.fetchall()logging.debug("select commit")except:logging.error(sql)logging.error("select 语句执行出错"…

我的osu游戏程序设计(oo)

osu是一款社区元素为主旨的音乐游戏,由澳大利亚人Dean Herbert (peppy)独立制作并运行. 游戏的方法简单,就是 1. 圈圈(Circle)&#xff1a;圈圈(Circle) 50。没打中显示X,并减少生命值。圈中序号的最后一个的300、100会显示为激300、喝100。2.滑条(Slider) : 在开始端点击按住不…

影像数据库调研

参考Paul Graham比较各种编程语言的方法&#xff0c;我们比较各种数据库的特点如下&#xff1a; Oracle: 我们需要企业级数据库。 MySQL: Oracle不开源。 PostgreSQL: MySQL的功能不够多。 SQLite: 你可以把我嵌入到任何地方。这样&#xff0c;4种数据库够大家用了。 MongoDB: …

linux进程间通信快速入门【三】:信号量(XSI、POSIX以及PV原语)

文章目录XSIsemgetsemop、semtimedopsemctl基于共享内存demo修改XSI信号量的限制PV原语PV控制并发进程数POSIX信号量使用posix命名信号量使用posix匿名信号量参考在前两篇文章中我们使用的racingdemo都没有对临界区代码进行加锁&#xff0c;这里我们介绍以下信号量的使用。Linu…

QTableWidget的使用详细介绍和美工总结(转)

基本外观设置 FriendTable->setFrameShape(QFrame::NoFrame); //设置边框 FriendTable->setHorizontalHeaderLabels(HeadList); 设置表头 FriendTable->setSelectionMode(QAbstractItemView::SingleSelection); 设置选择的模式为单选择 FriendTable->setSelect…

Android programming on Mac 之安装Eclipse

1.安装包在此链接下载&#xff1a; http://developer.android.com/sdk/index.html google GoAgent翻墙不好用&#xff0c;更新了host文件也不行&#xff0c;整了半天&#xff0c;还是一怒之下续签了vpn账号。早知如此&#xff0c;何必折腾。~~~~(>_<)~~~~ 更新文件时…

c++关于虚表的一些笔记

文章目录1、虚函数表指针2、多态构成的条件3、重载、重写、重定义 三者区别4、继承与虚函数5、单继承中的虚函数表无虚函数覆盖有虚函数覆盖6、单继承中的虚函数表无虚函数覆盖有虚函数覆盖参考看《深度探索c对象模型》的时候对虚表有了点疑惑&#xff0c;正好网上有些文章解除…

4、在Shell程序中的使用变量

学习目标变量的赋值变量的访问变量的输入 12-4-1 变量的赋值在Shell编程中&#xff0c;所有的变量名都由字符串组成&#xff0c;并且不需要对变量进行声明。要赋值给一个变量&#xff0c;其格式如下&#xff1a;变量名值。注意&#xff1a;等号()前后没有空格例如&#xff1a; …

C语言技巧:把单一元素的数组放在末尾,struct可以拥有可变大小的数组

《C 对象模型》第19页有这样一句话 C程序员的巧计有时候却成为c程序员的陷阱。例如把单一元素的数组放在一个struct的末尾&#xff0c;于是每个struct objects可以拥有可变数组的数组&#xff1a; struct mumble {/* stuff */char pc[1]; };//从文件或标准输入装置中取得一个…

探讨C++ 变量生命周期、栈分配方式、类内存布局、Debug和Release程序的区别(二)...

看此文&#xff0c;务必需要先了解本文讨论的背景&#xff0c;不多说&#xff0c;给出链接&#xff1a; 探讨C 变量生命周期、栈分配方式、类内存布局、Debug和Release程序的区别&#xff08;一&#xff09; 本文会以此问题作为讨论的实例&#xff0c;来具体讨论以下四个问题&a…