使用汇编代码找到数组中最大的数字?
所以我想弄清楚如何编写一个程序,它会在数组中找到最大的数字,但它需要使用程序集,这意味着我有一组有限的命令(即,如果0,则添加,减去,跳转,如果跳转则跳转然后为零)。 这是我到目前为止:
C00A 000 jmp start skip over the variables
0001 001 dw a[0]
0002 002 dw a[1]
0003 003 dw a[2]
0004 004 dw a[3]
0005 005 dw a[4]
0006 006 dw a[5]
0000 007 dw
0000 008 leave space for changes
0000 009
1000 00A start so now what?
我已经用一些硬编码值对数组进行了初始化,现在我需要编写一种可以找到其中最大的循环。 这是我到目前为止所了解到的:
load a[0] load first value
sub a[1] subtract second value
jmpl the result is negative (meaning a[1]>a[0]) jump somewhere
我理解底层哲学,但我不知道如何创建一个“循环”系统,直到找到最大值。
这基本上是您需要用汇编语言编写的代码。
load a[0] ;load first value
sub a[1] ;subtract second value
jmpl IsBigger1
load a[0] ;reload first value
store a[1] ;replace second value
IsBigger1:
load a[1] ;load second value
sub a[2] ;subtract third value
jmpl IsBigger2
load a[1] ;reload second value
store a[2] ;replace third value
IsBigger2:
我已经展示了2个代码块。 您应该添加3个这样的块,然后您会在数组a [5]的最后一个元素中找到最大值。
这是您需要的循环展开版本。 因为你没有指定体系结构,所以我不可能建议将其转化为真正的循环的必要指令。 你的“有限的一组命令”甚至没有提到load
。
编辑
这个架构迫使我们编写自我修改代码是一个可怜的事情。
尽管如此,编写我的第一个IBCM程序非常有趣!
addr dw 1
count dw 5
one dw 1
isload dw 3000
isstore dw 4000
issub dw 6000
again load count
sub one
jmpl exit
store count
load isload
add addr
store a
load issub
add addr
add one
store b
a nop
b nop
jmpl bigger
load isload
add addr
store c
load isstore
add addr
add one
store d
c nop
d nop
bigger load addr
add one
store addr
jmp again
exit halt
链接地址: http://www.djcxy.com/p/60383.html
上一篇: Finding the largest number in an array using assembly code?