如何在汇编中编写if-else语句?

14

如何在汇编语言中编写以下if else语句?

C 代码:

If ( input < WaterLevel)
{
     MC = 1;
}
else if ( input == WaterLevel)
{
     MC = 0;
}

伪代码

If input < Water Level
Send  1 to microcontroller
Turn Motor On


Else if input == Water Level
Send 0 to microcontroller
Turn Motor Off

未完成的装配:(MC- 微控制器)

CMP Input, WaterLevel
MOV word[MC], 1

MOV word[MC], 2

2
有了条件分支... - Peter Cordes
放心吧,我今天才开始学习这个.. 我是一名学生。 - Ern Tasha
1
@Ped7g,我是一位有着30年编程经验的老手,我认为你应该更尊重那些试图学习的年轻人。即使我还没有掌握基础知识,我也在这里通过Stack来学习。如果我像你这样有30年的经验,我还需要来这里吗?请更加尊重他人。如果你的回答与问题无关,请离开。没人需要你在这里。 - Ern Tasha
我对糟糕的代码毫不留情,即使那是我的代码。如果你是学生,我尊重你作为一个人以及你学习的努力,而不是那个根本错误的else分支。作为一名学生,你应该更努力地去弄清楚为什么会出现这种情况,或者询问原因,而不是要求尊重——即使我会遵守,这对你也没有多大好处。如果你要求我同情你的观点,也请尝试理解我的观点。我更担心这样的代码会溜进真正的产品中,而不是我担心表现得友善。粗鲁对人的伤害比水灾小得多。 - Ped7g
我说的是“基础”问题,与汇编无关。你能得到什么帮助:实际上很多,如果你利用这些信息来改进你处理[编程]问题的方式。问题在于:你的例子只在达到某个准确的水位时才关闭电机,并且通过“输入”看起来是传感器的读数。使用整数可能大部分情况下都可以工作,但使用float几乎不可能,即使使用整数也存在危险设计。实际上,这个重要的“细节”阻止我发布有关“汇编中的if/else”的答案本身,我的大脑无法克服它,抱歉。 - Ped7g
显示剩余2条评论
3个回答

21

如果我们想用C语言做一些事情:

if (ax < bx)
{
    X = -1;
}
else
{
    X = 1;
}

在汇编中,它看起来会像这样:

 cmp    ax, bx      
 jl     Less  
 mov    word [X], 1    
 jmp    Both            
Less: 
 mov    word [X], -1  
Both:

1
如何在汇编语言中编写相等条件(在问题中)?你的例子使用了else语句,而我的使用了else if。 - Ern Tasha
je指的是跳转到相等的位置,如果相等则执行。 - Muhammad Faizan Uddin
3
汉语翻译:并不只有一种汇编语言。ARM的汇编显然与Sparc、MIPS或x86不同。它们都有不同的比较指令。你必须指定体系结构。关于 else if,后面的 if 只是在 else 块中的另一个代码块。 - phuclv
这是x86汇编架构。 - Muhammad Faizan Uddin
1
CMP Input, WaterLevel JE 相等 MOV word[MC], 1 JMP 同时满足 相等: MOV word[MC], 0 同时满足:如果我使用这个,我该如何测试(input<water level)的条件? - Ern Tasha

9

由于我不知道您使用的具体汇编语言,因此我将用伪代码编写:

compare input to waterlevel
if less, jump to A
if equal, jump to B
jump to C
A:
send 1 to microcontroller
turn motor on
jump to C
B:
send 0 to microcontroller
turn motor off
C:
...

对于前三个命令:大多数汇编语言都有条件分支命令来测试零位或符号位的值,并根据位是否被设置来跳转或不跳转。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接