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..
...