汇编原理 | 二进制、跳转指令、算数运算、

时间:2024-06-02 17:42:19

一.二进制

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是指参与计算的数据或变量。在计算指令中,操作数可以是立即数、寄存器中存储的值、内存中的数据等。操作数可以是单个的,也可以是多个的,取决于具体的指令。例如,在一条加法指令中,操作数可以是两个要相加的值。