首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是跳转表?

什么是跳转表?
EN

Stack Overflow用户
提问于 2008-09-07 01:40:28
回答 7查看 45.7K关注 0票数 54

有人能解释一下跳转表的原理吗?为什么需要在嵌入式系统中使用?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2008-09-07 01:54:55

跳转表可以是指向函数的指针数组,也可以是机器代码跳转指令数组。如果您有一组相对静态的函数(比如一个类的系统调用或虚函数),那么只需创建该表一次,然后使用简单的数组索引调用这些函数即可。这将意味着检索指针并调用函数或跳转到机器代码,具体取决于所使用的表的类型。

在嵌入式编程中这样做的好处是:

  1. 索引比机器代码或指针更有内存效率,因此有可能在受限的environments.
  2. For中节省内存。任何特定的函数索引将保持稳定,更改函数只需交换出函数指针。

在访问表时确实会消耗一点性能,但这并不比任何其他虚函数调用更差。

票数 56
EN

Stack Overflow用户

发布于 2008-09-07 01:57:57

跳转表,也称为分支表,是一系列指令,所有指令都无条件地分支到代码中的另一个点。

您可以将它们看作一个switch (或select)语句,其中所有的case都被填充:

代码语言:javascript
复制
MyJump(int c)
{
   switch(state)
   {
      case 0:
         goto func0label;
      case 1:
         goto func1label;
      case 2:
         goto func2label;
   }
}

请注意,没有返回-它跳转到的代码将执行返回,并且它将跳回到调用我的跳转的地方。

这对于状态机很有用,在状态机中,您可以根据状态变量执行某些代码。还有很多其他用途,但这是主要用途之一。

它用于不想浪费时间摆弄堆栈,又想节省代码空间的地方。它特别适用于速度极其重要的中断处理程序,而导致中断的外设只能由单个变量来识别。这类似于带有中断控制器的处理器中的矢量表。

一种用途是使用一个0.60美元的微控制器,并为视频应用生成复合(TV)信号。micro的功能并不强大--事实上,它的速度只是勉强够写每一条扫描线。跳转表将用于绘制字符,因为从内存中加载位图将花费太长时间,并使用for()循环将位图推出。取而代之的是,有一个单独的跳转到字母和扫描线,然后是8个左右的指令,实际上直接将数据写入端口。

-Adam

票数 25
EN

Stack Overflow用户

发布于 2008-09-07 01:47:53

From Wikipedia

在计算机程序设计中,分支表(有时称为跳转表)是一个术语,用于描述使用分支指令表将程序控制(分支)转移到程序的另一部分(或可能已动态加载的不同程序)的有效方法。当用汇编语言编程时,通常使用分支表结构,但也可以由编译器生成。

分支表由无条件分支指令的序列列表组成,该列表使用通过将顺序索引乘以指令长度(每条分支指令占用的存储器中的字节数)而创建的偏移量来进行分支。它利用了这样一个事实,即用于分支的机器代码指令具有固定的长度,并且可以由大多数硬件非常有效地执行,并且在处理可以容易地转换为顺序索引值的原始数据值时最有用。给定这样的数据,分支表可以是非常有效的;它通常包括以下步骤:可选地验证输入数据以确保它是可接受的;将数据转换为进入分支表的偏移量,这通常涉及将其相乘或移位以考虑指令长度;以及分支到由表的基址和生成的偏移量组成的地址:这通常涉及将偏移量添加到程序计数器寄存器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档