二进制

1、计算机中所有信息都是以二进制的形式储存的

2、CPU只认识0和1,即二进制 CPU<->硬编码<->汇编语言<->C语言代码

3、因为二进制复杂,所以很多软件改用十六进制简写二进制

数据宽度

​ bit,是最基础的概念,在计算机中,由于只存在逻辑0和逻辑1,因此很多东西、动作、数字都要表示为一串二进制。如:1001 0000 1101等。其中每一个逻辑0与1就是一个位,英文名叫‘bit’,是计算机中最基础的单位。

  • 字节

​ byte,是由八进制组成的一个单元,也就是8个bit组成一个byte。在计算机中,用于表示ASCII字符,便是运用字节来记录表示字母和一些符号。

​ word,表示计算机处理指令或数据的二进制位数,是计算机进行数据储存和数据处理的运算的单位

通用寄存器

可以用于传送和暂存数据,也可以参与算数逻辑运算,并保存运算结果。除此以外,它们还各自具有一些特殊功能。汇编语言程序员必须熟悉每个寄存器的一般用途及特殊用途,只有这样,才能在程序中做到正确、合理使用它们。

32位以下:

  • EAX:(针对操作数和数据结果)累加器,返回函数结果
  • ECX:(字符串和循环操作数)计数器
  • EDX:(I/O指针)数据寄存器
  • EBX:(DS段中的数据指针)基址寄存器
  • ESP:(SS段中栈指针)栈指针寄存器
  • EBP:(SS段中栈内数据指针)扩展基址指针寄存器
  • ESI:(字符串操作源指针)源变址寄存器
  • EDI:(字符串操作目标指针)目的变址寄存器

64位:RAX 16位:AX 8位:AL

汇编指令

r 通用寄存器

m 代表内存

imm 代表立即数

如:

r8 代表8位通用寄存器

m8 代表8位内存

imm8 代表8位立即数

按位与运算符(&)
参加运算的两个数据,按二进制位进行“与”运算。

运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;

即:两位同时为“1”,结果才为“1”,否则为0

例如:3&5 即 0000 0011& 0000 0101 = 00000001 因此,3&5的值得1。

运算

and运算(与)

参加运算的两个数据,按二进制位进行“与”运算。

运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1;

即:两位同时为“1”,结果才为“1”,否则为0

例如:3&5 即 0000 0011& 0000 0101 = 00000001 因此,3&5的值得1。

or运算(或)

参加运算的两个对象,按二进制位进行“或”运算。

运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;

即 :参加运算的两个对象只要有一个为1,其值为1。

例如:3|5 即 00000011 | 0000 0101 = 00000111 因此,3|5的值得7。 

xor运算(异或)

参加运算的两个数据,按二进制位进行“异或”运算。

运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;

即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。

not运算(非)

参加运算的一个数据,按二进制位进行“取反”运算。

运算规则:~1=0; ~0=1;

即:对一个二进制数按位取反,即将0变1,1变0。

内存寻址

​ 寄存器位于CPU中,执行速度快,内存速度相对较慢,但是空间很大。寄存器和内存没有本质区别,都是用于存储数据的容器,都是定宽的。

​ 在计算机中每一个字节都有一个编号,这里可以认为内存的编号就是字节,在32位下范围为00000000-FFFFFFFF,最大寻址为FFFFFFFF+1字节,即4G。

​ cs ds ss es: 在用户层中只是起寻址的作用,在内核层涉及到段、页会有其他的用途。

cs:代码段

ds:数据段

ss:堆栈段

es:附加段

​ 向指定内存写入数据