【问题标题】:What actually is a jump in assembly and how does it work? [closed]什么是装配跳跃,它是如何工作的? [关闭]
【发布时间】:2021-02-12 14:25:01
【问题描述】:

什么是汇编中的跳转,它是如何工作的? 可以举个例子吗?

【问题讨论】:

  • 跳转是修改PCProgram Counter)的指令,也称为IPInstruction Pointer)。这是一个寄存器,用于确定从何处读取下一条指令。
  • 文档的哪一部分你不明白?
  • 什么指令集?

标签: assembly


【解决方案1】:

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

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

程序计数器是控制执行顺序的基本设备——它是一个指针大小的寄存器,用于保存机器代码指令的地址。它决定了处理器执行的指令流:大多数指令将程序计数器提前自己的大小,这样在一条指令执行后,处理器将自动执行内存中的下一条连续指令。

程序与程序计数器交互。循环通常将程序计数器向后移动(朝向较低的内存地址),以重复一些已经执行的代码(但具有不同的状态,这样循环有一些目的/最终目标)。条件语句,如 if-then-else 与程序计数器交互以向前跳过,即跳过 then 部分(以执行 else 部分),或者跳过 else 部分(在执行 then 部分之后) .

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

if-then-else 语句分解如下

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

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

if () goto ... 构造是一个条件分支,几乎所有处理器都具有将其作为机器代码指令执行此操作的能力。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多