硬件如何比较数的大小
高级语言视角:
if(a>b){
...
}else{
...
}
硬件视角
通过“cmp指令”比较a和b(如cmp a,b),实质上是用a-b相减的结果信息会记录在 程序状态字寄存器(PSW) 中,CPU根据PSW的某几个标志位进行条件判断,来决定是否转移。
补充:关于程序状态字寄存器(PSW),我们并不陌生,在操作系统切换处理器状态(用户态和核心态),就是通过改变PSW中的某标志位。(如0为用户态,1为核心态)
PSW中有几个比特位记录上次运算的结果
进位/借位标志CF:最高位有进位/借位时CF=1
零标志ZF:运算结果为0则ZF=1,否则ZF=0
符号标志SF:运算结果为负,SF=1,否则为0
溢出标志OF:运算结果有溢出OF=1,否则为0
举例:如果ZF=0且SF=0,则说明a>b,满足if的条件,经过一系列电信号处理,PC(Program Counter)程序计数器会指向if后的第一条(语句)指令的地址,即跳跃寻址。
汇编语言中,条件跳转指令有很多种,如je(jump when equal) 2表示当比较结果为a=b时跳转到2,jg(jump when greater)2表示当比较结果为a>b时跳转到2。注意:无条件转移指令jmp(jump)2,就不会管PSW的各种标志位。