【汇编先导】-- 1

汇编先导

学习目录

  • 语言
  • 进制及其运算
  • 二进制、量子计算
  • 数据宽度
  • 有/无符号数
  • 原码、反码、补码
  • 位运算
  • 汇编及其工具
  • 寄存器、内存
  • 汇编指令
  • 内存复制、堆栈指令
  • 汇编写函数、堆栈传参、堆栈平衡
  • 外挂

实际上,每种进制都有一套各自的运算体系(表),类似于十进制常用的九九乘法表,各种进制也有各自的加法表和乘法表!

计算机只做加法!机器语言就是位运算!通过电路来实现,这就是计算机最底层的本质。通过机器语言来实现加法计算器、设计电路。

1. 数据宽度

C和C++都需要定义数据的类型。计算机底层需要给这些数据进行定义宽度。

位(bit) 0 1

字节(Byte) 0~0xFF

字(Word) 0~0xFFFF

双字(DWord) 0~0xFFFFFFFF

2.有/无符号数

2.1 无符号数规则

给出的数字是什么就是什么(最高位无关符号位)

2.2 有符号数规则

给出的数字最高位是符号位:1代表负数,0代表正数

3. 原码、反码、补码

  • 正数的原码、反码、补码均一致
  • 负数的反码符号位是1,其余按位取反;负数的补码是其反码+1

4. 位运算

问题:2*8最高效的计算方式??

4.1 与and(&)

4.2 或or(|)

4.3 异或xor(^)

4.4 非not(~)

4.5 移位

  • 左移shl(<<):所有二进制位全部左移若干位,高位丢弃、低位补0
  • 右移shr(>>):所有二进制位全部右移若干位,低位丢弃、高位补0/1(由符号位决定)

4.6 位运算实现加减乘除

举例:4+5的计算过程在计算机底层是如何实现的?

0000 0100
0000 0101
-----------
0000 1001

# 计算机是如何运算上式的!计算机的实现原理

# 第一步,异或:如果不考虑进位,异或可以直接得出结果
0000 0100
0000 0101
-----------
0000 0001

# 第二步,与:判断计算过程是否产生进位。如果与运算结果为0则无进位
0000 0100
0000 0101
-----------
0000 1100
0000 0100

# 第三步,将与运算结果左移一位:
0000 0100 -> 0000 1000  # 此即进位结果

# 第四步,异或:第一次的异或结果和上一步的进位结果相异或
0000 0001
0000 1000
-----------
0000 1001  # 最终结果!!!

# 第五步,与:再次判断是否产生进位!如此反复!
0000 0001
0000 1000
-----------
0000 0000

# 最终的计算结果就是与运算为0的上一个异或运算结果

5. 汇编语言

通过汇编指令来代替二进制编码:可以给计算机发一些操作,然后让计算机执行。编译器!

【汇编先导】-- 1_第1张图片

学习汇编之前,需要先掌握环境的配置。(1.Vc6:程序到汇编的理解;2.OD;3.抓包工具;4.加密解密工具) 学习汇编并非是为了写代码,而是理解程序的本质

【汇编先导】-- 1_第2张图片


你可能感兴趣的:(汇编,笔记,编程)