指令跳转
程序员文章站
2022-07-02 23:21:51
...
CPU 顺序执行指令:
计算机是如何执行一条条指令的呢? 计算机内部是由许多的寄存器和锁存器组成的,由不同的与或非门构造而成。而在其内部主要的寄存器有:
程序在CPU内的执行过程:
CPU根据 PC寄存器里的地址,从内存中读取对应需要执行的指令到指令寄存器中执行,然后根据指令长度自增顺序执行下一条指令。
我们可以看出一个程序是连续存储在内存中的。那当我们编程时用到 if… else这样的语句,会发生指令跳转,那CPU又是如何读取跳转后的指令的呢?????????
CPU执行跳转指令:
编写一个简单的程序:
编译成汇编代码:
gcc -g -C test.c
objdump -d -M intel -S test.o
主要看 if … else部分的汇编代码:
主要是 cmp , jne 两个指令。
代码解释:
cmp 用于比较两个数的指令 , DWORD PTR 数据类型为32为整形
[rbp-ox4] 寄存器地址, 0x0 常量0的十六进制数
先从寄存器中读取一个数然后执行 cmp指令,如果 r==0 则将条件码寄存器 ZF=0,否则 ZF = 1;然后执行37行代码 jne(jump if not equal )跳转指令,跳转的条件是根据条件码寄存器中 ZF 的值来判断执行与否。如果 ZF =1 则会跳转到 42 行的指令,将其读取到内存 ,根据 mov 将指针移到42指令。这里的 0x2相当于个寄存器赋值的操作。
如果 if 条件为真则最后也会跳转到 49行离开程序。
以此类推相应的循环语句也无非使用相应的条件跳转指令。
总结时刻: 说了 cpu 顺序执行指令的过程和如何跳转执行指令过程以及相应的跳转条件。
上一篇: react之脚手架安装