Assembly 组装中的跳转实际上是什么?它是如何工作的?

Assembly 组装中的跳转实际上是什么?它是如何工作的?,assembly,Assembly,组装中的跳转实际上是什么?它是如何工作的? 你能给我举个例子吗?程序太大,无法存储在CPU中,因此它们存储在内存中。因此,程序中的每条机器代码指令都有一个内存地址/内存位置 处理器是指令的解释器:它连续地处理一条又一条指令。我们可以将其视为执行指令流,这就是程序(当然过于简单,因为程序既有代码又有数据) 程序计数器是控制执行顺序的基本设备-它是一个指针大小的寄存器,保存机器代码指令的地址。它决定处理器执行的指令流:大多数指令按其自身大小推进程序计数器,这样,在执行一条指令后,处理器将自动执行内存

组装中的跳转实际上是什么?它是如何工作的?
你能给我举个例子吗?

程序太大,无法存储在CPU中,因此它们存储在内存中。因此,程序中的每条机器代码指令都有一个内存地址/内存位置

处理器是指令的解释器:它连续地处理一条又一条指令。我们可以将其视为执行指令流,这就是程序(当然过于简单,因为程序既有代码又有数据)

程序计数器是控制执行顺序的基本设备-它是一个指针大小的寄存器,保存机器代码指令的地址。它决定处理器执行的指令流:大多数指令按其自身大小推进程序计数器,这样,在执行一条指令后,处理器将自动执行内存中的下一条顺序指令

程序与程序计数器相互作用。循环通常向后移动程序计数器(朝向较低的内存地址),以便重复已执行的某些代码(但状态不同,因此循环具有某些目的/最终目标)。条件,如if then else与程序计数器交互以向前跳过,即跳过then部分(以执行else部分),或跳过else部分(在执行then部分后)

为了正确控制指令流,处理器上有两种分支:条件分支和无条件分支

if-then-else语句分解如下

...
if ( condition ) 
    then-part
else 
    else-part
...

if()goto…
构造是一个条件分支,几乎所有的处理器都可以作为机器代码指令来执行

goto…
(没有前面的
if
)是一个无条件分支,几乎所有处理器都可以这样做

分支通常可以向后或向前,它们被放入代码序列中以控制流,告诉处理器重复一些代码或向前跳过


在英特尔世界中,程序计数器被称为指令指针,这与非英特尔世界中的程序计数器的概念相同。

跳转是一条修改
PC
程序计数器
)的指令,也称为
IP
指令指针
)。这是一个决定下一条指令从何处读取的寄存器。您不了解文档的哪一部分?什么指令集?
    ...
    if ( ! condition ) goto else1; // skip ahead to the else when condition is false
    then-part
    goto endOfIf1;  // skip over the else part, since we just ran the then part
else1:              // where to go when the condition is false
    else-part
endOfIf1:           // where to go when the if statement has concluded
                    // regardless of whether the then or the else fired..
    ...