首页
社区
课程
招聘
[原创]从二进制开始学汇编
发表于: 2009-3-27 18:05 13345

[原创]从二进制开始学汇编

2009-3-27 18:05
13345

接触编程有几年了,基本上都是靠自学,最先开始接触电脑是因为对黑客的崇拜,当时无意中接触到了易语言(中文内核),开始学着写程序,通过易语言进入了编程的大门,之后就慢慢的熟悉熟练地运用API,了解到语言只是一种规范,是死的,而各种高级语言最终是通过对象,API等系统给的接口调用系统的各项功能的,之后就是停歇不前了,只到遇到了汇编,喜欢它的短小精悍,我直接学的win32 ASM
也写了点小东西,学到了点东西,但总感觉我付出的东西太小了,回过头来发现,原来是我忽略了基础的东西,比如说,二进制,八机制,十六机制之间的转换关系,高位,低位,各寄存器的使用等等我都模糊不清

     所以,有了这个帖子,从今天开始我重新学习汇编,从二进制开始,我会在这里贴出一些我的学习资料,学习心得与大家分享,欢迎大家批评指正,谢谢!

<1> 二进制概述以及其发展

  进制是逢2进位的进位制,0、1是基本算符;计算机运算基础采用二进制。电脑的基础是二进制,那么,什么是二进制呢,为什么需要二进制呢?在早期设计的机械计算装置中,使用的不是二进制,而是十进制或者其他进制,利用齿轮的不同位置表示不同的数值,这种计算装置可能更加接近人类的思想方式。比如说一个计算设备有十个齿轮,它们级连起来,每一个齿轮有十格,小齿轮转一圈大齿轮走一格。这就是一个简单的十位十进制的数据表示设备了,可以表示0到999999999的数字。 配合其他的一些机械设备,这样一个简单的基于齿轮的装置就可以实现简单的十进制加减法了。这种通过不同的位置上面不同的符号表示数值的方法就是进制表示方法。常用的进制主要是十进制(因为我们有十个手指,所以十进制是比较合理的选择,用手指可以表示十个数字,0的概念直到很久以后才出现,所以是1-10而不是0-9)。 电子计算机出现以后,使用电子管来表示十种状态过于复杂,所以所有的电子计算机中只有两种基本的状态,开和关。也就是说,电子管的两种状态决定了以电子管为基础的电子计算机采用二进制来表示数字和数据。 常用的进制还有8进制和16进制,在电脑科学中,经常会用到16进制,而十进制的使用非常少,这是因为16进制和二进制有天然的联系:4个二进制位可以表示从0到15的数字,这刚好是1个16进制位可以表示的数据,也就是说,将二进制转换成16进制只要每4位进行转换就可以了。二进制的“00111000”直接可以转换成16进制的“38”。 一个字是电脑中的基本存储单元,根据计算机字长的不同,字具有不同的位数,现代电脑的字长一般是32位的,也就是说,一个字的位数是32。字节是8位的数据单元,一个字节可以表示0-255的数据。对于32位字长的现代电脑,一个字等于4个字节,对于早期的16位的电脑,一个字等于2个字节。

<2>计算机内部采用二进制的原因
  (1)技术实现简单,计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用“1”和“0”表示。
  (2)简化运算规则:两个二进制数和、积运算组合各有三种,运算规则简单,有利于简化计算机内部结构,提高运算速度。
  (3)适合逻辑运算:逻辑代数是逻辑运算的理论依据,二进制只有两个数码,正好与逻辑代数中的“真”和“假”相吻合。
  (4)易于进行转换,二进制与十进制数易于互相转换。
  (5)用二进制表示数据具有抗干扰能力强,可靠性高等优点。因为每位数据只有高低两个状态,当受到一定程度的干扰时,仍能可靠地分辨出它是高还是低。

<3>二进制的算法:

2*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2=?*2......
  101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010......

  进制         基数                                权          进数规律

  十进制   0、1、2、3、4、5、6、7、8、9            10 i              逢十进一                    

  二进制   0、1                                                     2i                逢二进一

  八进制   0、1、2、3、4、5、6、7                        8i                逢八进一
  
十六进制   0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F  逢十六进一

                                      
十进制数转换为二进制数、八进制数、十六进制数的方法:
  二进制数、八进制数、十六进制数转换为十进制数的方法:按权展开求和法
  1.二进制与十进制间的相互转换:
  (1)二进制转十进制
  方法:“按权展开求和”
  例: (1011.01)2 =(1×2^3+0×2^2+1×2^1+1×2^0+0×2^(-1)+1×2^(-2) )10
  =(8+0+2+1+0+0.25)10
  =(11.25)10
  规律:个位上的数字的次数是0,十位上的数字的次数是1,......,依奖递增,而十
  分位的数字的次数是-1,百分位上数字的次数是-2,......,依次递减。
  注意:不是任何一个十进制小数都能转换成有限位的二进制数。
  (2)十进制转二进制
  · 十进制整数转二进制数:“除以2取余,逆序排列”(短除反取余法
  例: (89)10 =(1011001)2
  2 89
  2 44 ……1
  2 22 ……0
  2 11 ……0
  2 5 ……1
  2 2 ……1
  2 1 ……0
  0 ……1
  · 十进制小数转二进制数:“乘以2取整,顺序排列”(乘2取整法)
  例: (0.625)10= (0.101)2
  0.625
  X 2
  1.25 1
  X 2
  0.5 0
  X 2
  1.0 1
  2.八进制与二进制的转换:
  二进制数转换成八进制数:从小数点开始,整数部分向左、小数部分向右,每3位为一组用一位八进制数的数字表示,不足3位的要用“0”补足3位,就得到一个八进制数。
  八进制数转换成二进制数:把每一个八进制数转换成3位的二进制数,就得到一个二进制数。
  八进制数字与二进制数字对应关系如下:
  000 -> 0 100 -> 4
  001 -> 1 101 -> 5
  010 -> 2 110 -> 6
  011 -> 3 111 -> 7
  例:将八进制的37.416转换成二进制数:
  3 7 . 4 1 6
  011 111 .100 001 110
  即:(37.416)8 =(11111.10000111)2
  例:将二进制的10110.0011 转换成八进制:
  0 1 0 1 1 0 . 0 0 1 1 0 0
  2 6 . 1 4
  即:(10110.011)2 = (26.14)8
  3.十六进制与二进制的转换:
  二进制数转换成十六进制数:从小数点开始,整数部分向左、小数部分向右,每4位为一组用一位十六进制数的数字表示,不足4位的要用“0”补足4位,就得到一个十六进制数。
  十六进制数转换成二进制数:把每一个八进制数转换成4位的二进制数,就得到一个二进制数。
  十六进制数字与二进制数字的对应关系如下:
  0000 -> 0 0100 -> 4 1000 -> 8 1100 -> C
  0001 -> 1 0101 -> 5 1001 -> 9 1101 -> D
  0010 -> 2 0110 -> 6 1010 -> A 1110 -> E
  0011 -> 3 0111 -> 7 1011 -> B 1111 -> F
  例:将十六进制数5DF.9 转换成二进制:
  5 D F . 9
  0101 1101 1111 .1001
  即:(5DF.9)16 =(10111011111.1001)2
  例:将二进制数1100001.111 转换成十六进制:
  0110 0001 . 1110
  6 1 . E
  即:(1100001.111)2 =(61.E)16

选读内容:

  二进制与八卦

    二进制的重要性世人皆知,没有二进制就没有当代的数理逻辑,就没有数字化技术,没有电脑、网络技术等。
    二进制的发明人是德国思想家莱布尼茨(1646-1716年),他大约在20岁时就已经知道了最初由欧洲来华传教士所介绍的中国《易经》。后来他虽然率先发明出二进制,但由于没有找到对其可靠性及意义的有力支持,因此迟迟没有发表其论文,直到1697年他与法国传教士白晋相识、随后通信交流对《易经》的看法之后,才使他看到古老《易经》的六十四卦和二进制的数码相对应,给予他极大的启发和鼓舞,并于1705年把论文发表出来,题为《关于仅用0和1两个符号的二进制算术的说明,并以此解释古代中国伏羲图的探讨》。

  二进制这一划时代的发明终于被世人所知。

  20世纪被称作第三次科技革命的重要标志之一的计算机的发明与应用,它不但证明了莱布尼兹的原理是正确的,同时也证明了《易经》数理学是很了不起的。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (14)
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
2
知识要点:

1.了解二进制发展史及计算机内部采用二进制的原因
2.了解掌握二进制数、八进制数、十进制数、十六进制数相互转换的方法

课后习题:

  二进制数10010000 转换为10进制为(  144   ), 转换为16进制为(     90  ),转换为8进制为( 220   )

复制可看到结果!
2009-3-27 18:09
0
雪    币: 277
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
感觉写的想大学的时候学的微机原理的前几章节
2009-3-27 18:33
0
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
4
我一直以为这是机器码,就是很早那种据说打孔编程?
2009-3-27 18:33
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
5
恩,打孔编程应该就是二进制机器码编程
2009-3-27 20:50
0
雪    币: 6536
活跃值: (2384)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
写的很好 受教了 正在学习这方面 呵呵
2009-3-27 23:47
0
雪    币: 232
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
汇编教材的第一章.......
那个二进制与八卦倒挺新鲜的
2009-3-28 00:22
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
写的不错很好
2009-3-28 00:36
0
雪    币: 215
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
看的云里雾里,不过我比较喜欢最后那个太极...
2009-3-28 00:43
0
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
非安全-黑客手册

不知道楼主和非安全-黑客手册是啥子关系
2009-3-28 01:37
0
雪    币: 200
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
八卦原来也是高科技啊。
2009-3-28 11:49
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
12
呵呵,没啥关系
2009-3-28 12:18
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
13
易经及其八卦是中国古代智慧的结晶
2009-3-28 12:20
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
14
解题过程:
                  
二进制   0、1                                                   
八进制   0、1、2、3、4、5、6、7、8  
十进制   0、1、2、3、4、5、6、7、8、9                    
十六进制   0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F  

二进制数、八进制数、十六进制转换为十进制数: 按权展开求和法

  最左边数×进制数的( 位数-1)次方+靠前面位的数×进制数的( 位数-2)次方...+最右边数×进制数的( 位数-位数)次方

针对二进制数10010000,我们知道
1. 它 的 位数 是 8 位
2. 它是 二进制 ,进制数是2

它转换为10进制,应该这样

1       →     1x 2 的 (8-1) 次方      →    128
0       →     0x 2 的 (8-2) 次方      →    0
0       →     0x 2 的 (8-3) 次方      →    0
1       →     1x 2 的 (8-4) 次方      →    16      
0       →     0x 2 的 (8-5) 次方      →    0         ↓+
0       →     0x 2 的 (8-6) 次方      →    0
0       →     0x 2 的 (8-7) 次方      →    0
0       →     0x 2 的 (8-8) 次方      →    0
                                                                 
                                                       =   144      (注:对于二进制转换,遇0则0,上图是为了表示关系才没有简单化)

二进制数10010000转为 16进制 更 简单

从右边开始,每4位 换成 一 个 16进制 数
1001    0000
  ↓      ↓
  9          0          = 90                         (注: 4位最大的二进制数1111 转换10进制是15, 16进制是 F  )

二进制数10010000转为 8进制

从右边开始,每3位 换成 一 个 8进制 数 ,不足用 0 补充

  010  010  000
    ↓    ↓   ↓
   2       2      0        =220                     (注: 3位最大的二进制数111 转换 转换10进制是7,8进制也是7  )
2009-3-28 12:44
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
15
推荐一本书: 巅峰黑客  http://www.waok.net/xhmf/52274/

大家编程之余,可以看看,说不定会给你带来启发和鼓舞!

简介:

这是一个高度---黑客世界里的高度,除了他无人能及!
  折磨防火墙,玩弄服务器,那不是他的作风!!
  颠覆传统,破而后立,那是他的境界!!!
  大道至简,那是他的高度!!!!
  -----------------------------------------------------
  看了本书的读者可能会有以下三种结果:
  一、开始对《周易》感到兴趣,下大毅力开始研究。
  二、搞软件的读者开始研究“卦辞专家系统”软件工程构架的可行性。
  三、搞硬件的读者开始分析“卦象芯片”电子逻辑原理的适用性。
  如果有以上几个结果出现,那么作者写本书的初衷算是真正实现了。
2009-3-28 14:02
0
游客
登录 | 注册 方可回帖
返回
//