为了准备下一个学期,我正在努力学习大会,这是一种我并不熟悉的语言。我已经了解了计算机代码和汇编编码的基础知识,之前我在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:
答案 0 :(得分:0)
这个问题远远超出了我们通常可以在一个问题中回答的范围。 Python是一种非常高级的语言,所以开始的好地方可能是学习一些C语言,特别是关于指针。 C基本上是计算机自己语言之上的层。它允许程序以更跨平台的方式编写。
数组和引用之类的东西不像它们的高级对应物,列表和变量那样。数组背后的想法是存储连续的数据区域。在非常简单的实现中,它们使用地址指针存储,并通过对该指针执行数学来索引以找到附近的地址。在边界检查的实现中,可以使用NULL
终结符值或指示大小的标题来阻止在数组外部读取数据。
高级语言和低级语言之间的层通常比语言本身更难学习,因为它需要理解两个部分的设计才能理解它们的连接。通过简单的Google搜索,您可以找到各种asm
教程,例如How to make an assembly array。请注意,asm
是一系列互连语言的广义术语,这些语言是其架构所独有的。
祝您旅途愉快,并随时在聊天室(例如我们的HCF),ircs或discord服务器中提出诸如此类的广泛问题。如果有任何具体问题导致您遇到麻烦,请在此处写下一个问题。