指令跳转


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 顺序执行指令的过程和如何跳转执行指令过程以及相应的跳转条件。

发布了50 篇原创文章 · 获赞 58 · 访问量 2417
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章