微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有人知道如何在Atmega328p的汇编程序中执行if语句吗?

如何解决有人知道如何在Atmega328p的汇编程序中执行if语句吗?

我需要您的帮助,我不知道如何在汇编中编写if语句,对于ATmega328p,请帮助我!

解决方法

好,因此此处理器具有所谓的条件码。某些说明对其进行了设置,而其他说明则对其进行了阅读。通过使用加,减或比较指令设置条件代码,然后使用条件分支指令测试所需条件来完成条件分支。我们使用条件分支来完成if-then语句的控制流程。

基本思想是,在C条件为假的情况下,我们希望处理器跳过then部分。

常规C代码:

if ( i < 10 ) {
    printf ("i < 10!");   // then part "fires" when i < 10 is true
}

执行上述if-then,但使用标签和条件分支(如汇编程序)的伪C代码:

    if ( i >= 10 ) goto pastThen;   # this is a conditional branch that skips the then part 
                                    # when i < 10 is false
                                    #  ! (i<10) or "(i<10) is false" is the same as  i>=10
    printf ("i < 10!");
pastThen:

我们可以通过编写一些程序集以将i10进行比较来将其转换为程序集,这将设置条件代码,然后对标签使用“大于或等于”的分支,例如pastThen。像这样(但这仍然是伪代码):

    load r0,i
    compare r0,#10
    bge pastThen
    ... # code to call printf ("i < 10!");
pastThen:

使用条件分支(以及偶尔的无条件分支),我们可以创建while,for和repe循环,if-then语句和if-then-else循环-结构化编程的所有控制结构

一旦您知道这一点,您将能够更好地阅读汇编。您可以查看Godbolt.org,那里有可供尝试的编译器。因此,您可以使用C语言为编译器提供一个小函数,并查看其为您提供的语句和表达式生成什么样的代码。他们有一个Arduino Mega编译器,但我不知道它是否与您的芯片兼容,尽管它可以使您更好地了解具体的if语句。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。