今天第一次接触汇编,从进制转换开始复习。
其实这些东西在大学的时候就应该打好基础。
常见的进制
- 二进制,由0、1组成,逢二进一
- 八进制,由0-7八个数字组成,逢八进一
- 十进制,由0-9十个数字组成,逢十进一
- 十六进制,由0-9,A-F十六个字符组成逢十六进一
只要理解每个进制的进一规则,那运算起来就了如指掌。
以八进制举例:
逢八进一,当数字大于等于8时,进一位,如果10进制的逢十进一。
以下均为八进制数:
4 + 6 = 12
6 + 6 = 14
277 + 333 = 632
位、字节、原码、反码、补码:
计算机最小运算单位是bit,位。
byte表示一个字节,1byte = 8bit
Java中是以补码来表示二进制
Java中声明一个byte类型的变量,其大小范围是-128 ~ 127
byte b = 127; // ok
byte c = 128; // error
原因是byte类变量只有一个字节,即上面声明的b变量,只在内存中占用8位,并且最高位是符号位。即:
//最高位符号位: 0表示整数,1表示负数
//最大正数
byte max = 127; //内存:0111 1111(补码)
//最小负数
byte min = -128; //内存:1000 0000(补码)
//有一点需要注意的是,该二进制表示的是补码
//介绍一下原码、反码、补码
//原码:二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小
//反码:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外
//补码:正数的补码与其原码相同;负数的补码是在其反码的末位加1,另外计算一个数的补码,可取其绝对值的原码,每一位取反并加1。
通用寄存机
编译器在运行过程中,生成的变量会存在三个地方:CPU(寄存器位于其中),内存,硬盘
32位CPU中(05年以后的电脑,大多都64位的)有3种寄存器:
- 8位
- 16位
- 32位(包含8种通用寄存器,EIP不是通用寄存器)
- EAX
- ECX
- EDX
- EBX
- ESP
- EBP
- ESI
- EDI
指令学习
MOV EAX,1 //将立即数(1)存到指定的寄存器(EAX)