进制
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010
0 1 2 3 4 5 6 7 8 9 A
1011 1100 1101 1110 1111
B C D E F
FF -1 FE -2 FD -3 FC -4 FB -5 FA -6
1字节(Byte)=8位(Bit)
1字=2字节=16位
1双字=2字=4字节=32位
字节:0~0xFF
字:0~0xFFFF
双字:0~0xFFFFFFFF
要存储数据超过存储范围,会被丢弃
char:8位 int:32位
与运算(and&) 1&1 1 0&1 0
或运算(or|) 有1即为1
异或运算(xor^) 不一样的时候为1
非运算(not~) 1~0 0~1
左移(shl<<) 二进制全部左移若干位,高位丢弃,低位补0
右移 各二进制全部右移若干位,低位丢弃,高位补0或符号位
补0(shr>>): 1101 0101 0011 0101
补符号位(sar>>):1101 0101 1111 0101
加法:1)先异或,(不考虑进位的情况下与按位加结果相同)
2)判断是否有进位(与后为0则无进位,与后为1则有进位)
3)有进位则将与的结果左移再和上次异或出来的结果继续异或
0000 0100 4
0000 0101 5
0000 0001
0000 1000
0000 1001
0000 0000
0000 1001 9
寄存器
寄存器
32位通用寄存器:EAX EBX ECX EDX ESP EBP ESI EDI
MOV(移动数据):立即数到寄存器 寄存器到寄存器
16位通用寄存器:AX BX CX DX SP BP SI DI
8位通用寄存器:AL BL CL DL AH BH CH DH
AH(高8位) AL(低8位)
内存
内存(每个应用程序都会有自己的独立的4GB的内存空间)
内存地址:(32位)/(64位)
绝大部分指令(不能从内存到内存)
内存地址表示形式:
1.[立即数]
2.[reg] reg代表寄存器
3.[reg+寄存器]
4.[reg+reg * {1,2,4,8}] (数组) 5.[reg+reg * {1,2,4,8}+立即数]
存储模式:
大端模式:数据高位在低位,数据低位在高位
小端模式:数据低位在低位,数据高位在高位
指令
MOV(移动) ADD(+) SUB(-) AND(与) OR(或)
XOR(异或) NOT(非)
MOVS() 移动数据 内存-内存
STOS():
修改EIP指令:
EIP不能用MOV指令修改
JMP指令:JMP 寄存器/立即数/内存
(相当于MOV EIP,寄存器/立即数/内存)
CALL指令:
RET指令:
堆栈平衡:
1.如果要返回父程序,在堆栈中进行堆栈操作时,保证在RET指令前,ESP指向的是压入栈中的地址。
2.如果通过堆栈传递参数了,那么在函数执行完毕后,要平衡参数导致的堆栈变化。
(程序经过编译链接,高级语言中的一个语句转换成一段汇编代码。而这段汇编代码执行前后ESP、EBP应该保持不变。也就是说每个子程序调用前后ESP、EBP不应改变。只有这样,才能让一段代码的执行不影响到以前各次调用的返回地址,从而保证整个程序的正确运行。)
HTML
B/S使用浏览器作为软件客户端,访问网页,软件不需要安装,软件更新时,客户端不需要更新,软件可以跨平台,软件客户端和服务器通信采用HTTP协议,相对不安全。
只要精神小伙在
到哪都是实力派
好吧我学的是有点慢。。。
字都是手打的 没有Ctrl c Ctrl v…
我发4!
介只是个笔记…
请大佬们不要理我,让我自己玩耍。嘿嘿
我来交作业啦