将带有数组的while循环从Python转换为Assembly

时间:2017-10-01 22:18:52

标签: python assembly avr

为了准备下一个学期,我正在努力学习大会,这是一种我并不熟悉的语言。我已经了解了计算机代码和汇编编码的基础知识,之前我在Assembly中进行了一个while循环。但是,这次我想使用数组。

我正在尝试将我在Python中创建的简单while循环转换为汇编代码,但可以使用一些帮助。

i = 2
numbers = []
while i <= 255:
    i -= 1
    numbers.append(i)
    i *= 3
    if i < 255:
        numbers.append(i)
    else:
        break

我该怎么做?一旦我知道它应该是什么样子,我就可以开始研究代码并开始理解它。

我使用的计算机架构是AVR ATMEGA328P

这是我之前制作的for-loop。这很随意,可能效率不高,我只是在练习:

loop:
      cpi r16,255
      breq notthree
      mov r18, r16
      cpi r17,6
      brne notsix
      sub r17,r16
      rjmp loop
notthree:
      cpi r17,3
      breq notthree
notthree:
      dec r16
      rjmp loop
end_loop:

1 个答案:

答案 0 :(得分:0)

这个问题远远超出了我们通常可以在一个问题中回答的范围。 Python是一种非常高级的语言,所以开始的好地方可能是学习一些C语言,特别是关于指针。 C基本上是计算机自己语言之上的层。它允许程序以更跨平台的方式编写。

数组和引用之类的东西不像它们的高级对应物,列表和变量那样。数组背后的想法是存储连续的数据区域。在非常简单的实现中,它们使用地址指针存储,并通过对该指针执行数学来索引以找到附近的地址。在边界检查的实现中,可以使用NULL终结符值或指示大小的标题来阻止在数组外部读取数据。

高级语言和低级语言之间的层通常比语言本身更难学习,因为它需要理解两个部分的设计才能理解它们的连接。通过简单的Google搜索,您可以找到各种asm教程,例如How to make an assembly array。请注意,asm是一系列互连语言的广义术语,这些语言是其架构所独有的。

祝您旅途愉快,并随时在聊天室(例如我们的HCF),ircs或discord服务器中提出诸如此类的广泛问题。如果有任何具体问题导致您遇到麻烦,请在此处写下一个问题。