8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
IA-32指令类型
IA-32的标志寄存器6个条件标志OF (Overflow Flag) 溢出标志位
溢出标志OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。
SF (Sign Flag) 符号标志
符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为1。
ZF (Zero Flag) 零标志
零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。
CF (Carry Flag) 进位标志
进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。
使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。
AF (Auxiliary Carry Flag) 辅助进位标志
在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:在字操作时,发生低字节向高字节进位或借位时;
在字节操作时,发生低4位向高4位进位或借位时。
PF(Parity Flag) 奇偶标志
奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。3个控制标志DF (Direction Flag) 方向标志(自动变址方向是增还是减)
方向标志DF用来决定在串操作指令执行时有关指针寄存器发生调整的方向。
IF (Interruput Flag) 中断允许标志(仅对外部可屏蔽中断有用)
中断允许标志IF是用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;
当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。
TF (Trap Flag) 陷阱标志(是否是单步跟踪状态)
当追踪标志TF被置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求。这种方式主要用于程序的调试。
IA-32 指令系统概述IA-32是典型的CISC(复杂指令集计算机)风格ISA8个通用寄存器
2个专用寄存器:EIP(PC) EIP寄存器主要用于存放当前代码段即将被执行的下一条指令的偏移,但其本质上并不能直接被指令直接访问。
标志寄存器EFLAGS
6个段寄存器(间接给出段基址)
存储器地址空间为4GB,按字节编址,小端方式
寻址方式立即
寄存器
存储器 段基址+有效地址(位移量)
[B]——基址寄存器编号 [I]——变址寄存器编号 s——比例因子 A——位移量 这些信息可以排列组合相对寻址(指令)
变长指令字,变长操作码汇编语言格式Inter格式汇编
AT&T格式汇编
IA-32指令类型
传送指令通用数据传送指令MOV:一般传送
==注意: MOV指令不能在两个存储器之间进行数据直接传送。 MOV指令不能在两个段寄存器之间进行数据直接传送。==
MOVS:符号扩展传送
MOVZ: 零扩展传送
XCHG: 数据交换
PUSH/POP: 入栈/出栈地址传送指令LEA 加载有效地址输入输出指令IN和OUT: I/O端口与寄存器之间的交换标志传送指令PUSHF、POPF: 将EFLAG压栈,将栈顶内容送入EFLAG
定点算术运算指令加减(影响标志,不区分无/带符号)ADD SUB增1/减1运算(影响除CF以外的标志,不区分无/带符号)INC DEC取负运算(影响标志,若对0取负,则结果为0且CF清0,否则CF置1)NEG比较运算(做减法得到标志,不区分无/带符号)CMP乘/除运算(不影响标志,区分无/带符号)MUL/IMUL 无符号乘/带符号乘
DIV/IDIV 无符号除/带符号除
按位运算逻辑运算NOT 非
AND 与
OR 或
XOR 异或
TEST 做“与”测试,仅影响标志移位运算 (左/右移时,最高/最低位送CF)SHL/SHR:逻辑左/右移
SAL/SAR: 算术左/右移 左移判溢出,右移高位补符
ROL/ROR 循环左/右移
RCL/RCR 带进位循环左/右移
控制转移指令无条件转移指令JMP DST 无条件转移到目标指令DST处执行条件转移Jcc DST cc为条件码,根据标志(条件码)判断是否满足条件,若满足,则转移道目标指DST处执行,否则顺序执行条件设置SETcc DST 按条件码cc判断的结果保存到DST(是一个8为寄存器)调用和返回指令(用于过程调用)中断指令CALL DST 返回地址RA入栈,转DST处执行
RET 从栈中取出返回地址RA,转到RA处执行
x87浮点处理指令
C语言语句的机器级表示
过程(函数)的结构一个C过程的大致结构如下准备阶段形成帧底:push指令和mov指令
生成栈帧(如果需要的话):sub指令或and指令
保存现场(如果有被调用者保存寄存器): mov指令过程(函数)体分配局部变量空间,并赋值
具体处理逻辑,如果遇到函数调用时准备参数: 将实参送栈帧入口参数处
CLLL指令: 保存返回地址并转被调用函数
在EAX中准备返回参数结束阶段退栈: leave指令或pop指令
选择结构
循环结构
==为提高程序性能,能用非递归方式执行最好用非递归方式。==