语言
进制
进制如何运算
二进制
数据宽度
有符号数和无符号数
原码反码补码
汇编指令
内存复制
堆栈的指令
汇编如何写函数
堆栈传参
堆栈平衡
外挂
# 电子计算机 状态:0 和 1 # 最早的程序员,穿孔卡带
简化,助记符。
加 INC -编译器-> 减 DEC 乘 MUL 除 DIV
离程序的本质:隔阂!灰白你一般用于底层的编写,单片机..
C语言
加 A+B 减 A-B 乘 A*B 除 A/B
1进制:一进一,结绳计数。
2进制:二进制,计算机
八进制:八进一。8个符号组成:0 1 2 3 4 5 6 7
十进制:十进一。10个符号组成:0 1 2 3 4 5 6 7 8 9
十六进制:十六进一。16个符号组成:0 1 2 3 4 5 6 7 8 9 A B C D E F
8进制逢八进一
加法
1+1=2 | ||||||
---|---|---|---|---|---|---|
1+2=3 | 2+2=4 | |||||
1+3=4 | 2+3=5 | 3+3=6 | ||||
1+4=5 | 2+4=6 | 3+4=7 | 4+4=10 | |||
1+5=6 | 2+5=7 | 3+5=10 | 4+5=11 | 5+5=12 | ||
1+6=7 | 2+6=10 | 3+6=11 | 4+6=12 | 5+6=13 | 6+6=14 | |
1+7=10 | 2+7=11 | 3+7=12 | 4+7=13 | 5+7=14 | 6+7=15 | 7+7=16 |
乘法
1*1=1 | ||||||
---|---|---|---|---|---|---|
1*2=2 | 2*2=4 | |||||
1*3=3 | 2*3=6 | 3*3=11 | ||||
1*4=4 | 2*4=10 | 3*4=14 | 4*4=20 | |||
1*5=5 | 2*5=12 | 3*5=17 | 4*5=24 | 5*5=31 | ||
1*6=6 | 2*6=14 | 3*6=22 | 4*6=30 | 5*6= 36 | 6*6=44 | |
1*7=7 | 2*7=16 | 3*7=25 | 4*7=34 | 5*7=43 | 6*7=52 | 7*7=61 |
0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 0 1 2 3 4 5 6 7 8 9 A B C D E F
bit 一个位,0or1
Byte 八个位为一个字节,0000 0000,1111 1111。0~0xFF
Word 两个字节为一个字,也就是十六个位。0~0xFFFF
DWord 四个字节为一个双字,也就是三十二个位0~0XFFFFFFFF
QWord 八个字节为一个四字,也就是六十四个位0~0xFFFFFFFFFFFFFFFF
无符号数规则
数字是什么,就是什么
1001 1010 十六进制,0x9A
有符号数规则
最高位是符号位:1(负数) 0(正数)
1001 1010
编码规则
原码:最高位符号位,对齐它的位进行本身绝对值即可。
反码:
补码:
测试
# 都是8位 # 如果是正数,那都是一样的 1 # 原码 0 0 0 0 0 0 0 1 # 反码 0 0 0 0 0 0 0 1 # 补码 0 0 0 0 0 0 0 1 # 如果是负数 -1 # 原码 1 0 0 0 0 0 0 1 # 反码 1 1 1 1 1 1 1 0 # 补码 1 1 1 1 1 1 1 1 -7 # 原码 1 0 0 0 0 1 1 1 # 反码 1 1 1 1 1 0 0 0 # 补码 1 1 1 1 1 0 0 1
负数存放的是补码
与运算(and &)
两个都是一,结果才为一。
或运算(or |)
两个有一个为一,结果就是一。
异或运算(xor ^)
相同就为0,不同为1
非运算(单目运算符 not~)
0就是1,1就是0 。
0000 0001 1 0000 0010 2 0000 0100 4 0000 1000 8
通过这些完成加减乘除!位运算来实现加减乘除。
位运算(移动位)
左移:(shl <<)
0000 0001 所有二进制位全部左移若干位,高位就丢弃了,低位补0 。
右移:(shr >>)
0000 0001 所有二进制全部右移若干位,低位丢弃,高位补0 。
基本数学的加减乘除(加法)
4+5
# 计算机时怎么操作的 0000 0100 0000 0101 ---------- 0000 1001 # 第一步 异或:如果不考虑进位,异或就可以直接出结果 0000 0100 0000 0101 ---------- 0000 0001 # 第二步 与运算(判断进位,如果与运算结果为0,没有进位) 0000 0100 0000 0101 ---------- 0000 0100 # 第三步 将与运算的结果,左移一位. 如果结果为0,则不左移。 # 第四步 异或 0000 0001 0000 1000 ---------- 0000 1001 # 第五步 与运算(判断进位,如果与运算结果为0,没有进位。) 0000 0001 0000 1001 ---------- 0000 0000 # 所以最终的结果就是与运算为0的结果的上一个异或。
4-5
# 计算机时怎么操作的 4+(-5) 0000 0100 1111 1011 0000 0101的反码是1111 1010 补码是1111 1011 --------- 1111 1111 ff(也就是-1) 0000 0100 1111 1011 ----------异或(如果不考虑进位,异或就可以直接出结果。) 1111 1111 0000 0100 1111 1011 ---------与(判断进位,如果与运算结果为0,没有进位) 0000 0000 # 所以最终的结果就是与运算为0的结果的上一个异或。