一.二进制
two complement reprentation(补码)
二进制的运算:
6的二进制 = 0110
-6的二进制 如何表示?
四个bit的第一个bit表示符号:1负0正
-6表示为1010
解释:
0 = 0000
1 = 0001
-1 = 1111(由 1 + (-1) = 0 推的)
再往下推:
-2 = 1110
-3 = 1101
-4 = 1100
-5 = 1011
-6 = 1010
更简单的方式找-6的二进制:
把6的每一位取反之后,再加1,得到结果
问:在32位电脑里01000001表示什么?不能单纯觉得是65这个数
在32位bit时该怎么表示6?在前面加28个0
在32位bit时该怎么表示-6?能直接在4位的情况下加28个0吗?不能,应该在前面加上28个1(很好想)
十六进制表达:
0xffff ffff: 化为2进制:1111...1111共32个1
666(十进制) 化为二进制-> 000...(20个0) 0010(十进制里的2) 1001(十进制里的9) 1010(十进制里的a)
化为十六进制-> 0x 0000 029a
-666(十进制) 化为二进制-> 111...(20个1) 1101 (十进制里的13/d) 0110(十进制里的6) 0110(十进制里的6)
化为十六进制-> 0x FFFF Fd66
二.跳转指令
转移指令有以下几类:
无条件跳转指令(jmp)
条件转移指令
循环指令(loop)
过程
中断:cpu是跳来跳去的,不停的终端
j-Jump 跳转
e-Equal 相等的时候发生跳转
z-Zero 相减得0时发生跳转
s-Sign 符号,当他是负的时候发生跳转
c-Carry 如果发生借位会发生跳转
l-Less、b-Below 当操作数1 < 操作数2 时发生跳转
a-Above、g-Greater 当操作数1 > 操作数2 时发生跳转
p-Parity
o-Overflow
JE/JZ - jump if equal/zero
JNE/JNZ - jump if not equal/zero
JB/JNAE/JC - jump if below/not above equal/carry 低于/不高于等于/有借位
JNB/JAE/JNC - jump if not carry 不低于/高于等于/无借位
JP-jump if parity 奇偶位为1
JNP-jump if not parity 奇偶位不为1
JO- 结果溢出
JNO
JS-结果为负
JNS
跳转原理:
CMP 操作数1,操作数2
操作数1 - 操作数2,不改变数值
效果:改变状态标志位CF、SF、ZF、PF、OF、AF
判断标志位情况
三、算数运算
立即数(Immediate Value) 是指一个固定的常量或者直接给定的数值,它通常用作计算指令中的一个参数。立即数是直接嵌入到指令中的,而不是存储在寄存器或内存中。例如,在一条加法指令中,立即数可能是要添加到操作数上的常量值。
操作数(Operand) c是指参与计算的数据或变量。在计算指令中,操作数可以是立即数、寄存器中存储的值、内存中的数据等。操作数可以是单个的,也可以是多个的,取决于具体的指令。例如,在一条加法指令中,操作数可以是两个要相加的值。