如何在汇编编码时避免转到和跳转?

时间:2016-01-20 07:10:55

标签: assembly goto

我知道这里和其他地方有很多关于避免使用高级编程语言的帖子。然而,从我在MIPS汇编中编写的(通常很小的)经验来看,在实现控制流时,似乎没有一种明显的方法可以避免在汇编中使用goto和jump语句。

例如,如何在汇编中实现此代码(C等效):

if (x < 2)
  { ans = 0; }
else
  { ans = 1; } 

是否需要使用goto或jump语句,或者是否有正确的方法来避免使用它们以支持更合适的代码实践?

4 个答案:

答案 0 :(得分:10)

避免在高级编程语言中使用goto的建议仅适用于 - 高级语言。

汇编程序是一种低级语言,跳转是必不可少的。

答案 1 :(得分:3)

您无法完全避免使用跳转操作,因为您已经在与处理器直接对话。

但是通过更好的练习,您正在使用高级编程,您仍然可以在汇编代码中使用较少的跳转。

一些想法如下:

  • 跳转内部块,而不是块之间。
  • 按照传统的for / while / if / case序列跳转一个简单易读的逻辑。
  • 一块装配做一件事;最小的副作用。
  • 尝试使用宏或功能,不要重复自己。

答案 2 :(得分:1)

当每个人都迫使您不要在高级语言中使用 goto 时,不使用 goto 是(有点)可以理解的。但是要将其转移到汇编中......在汇编中编码时不使用jmp是完全不可能的,因为没有像for或while这样的隐藏的goto指令。

答案 3 :(得分:0)

虽然它不是MIPS,但对于X86处理器,在Microsoft汇编程序ML.EXE(16/32位)和ML64.EXE(64位)的情况下,自MASM 6.11以及所有版本的Visual Studio ,你可以使用点指令:

        .if     x < 2
        mov     ans,0
        .else
        mov     ans,1
        .endif

在此示例中,点指令转换为立即比较和立即移动。有关更多信息,请参阅

http://msdn.microsoft.com/en-us/library/8t163bt0.aspx