所以我试图弄清楚如何编写一个程序,它会找到数组中最大的数字,但它需要使用汇编意味着我有一组有限的命令(即加,减,跳,如果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
我理解潜在的哲学,但我不知道如何创建一个能够循环的系统。直到找到最大值。
答案 0 :(得分:1)
这基本上是你需要用汇编语言编写代码的。
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