使用汇编代码查找数组中的最大数字?

时间:2015-10-25 03:40:09

标签: arrays assembly

所以我试图弄清楚如何编写一个程序,它会找到数组中最大的数字,但它需要使用汇编意味着我有一组有限的命令(即加,减,跳,如果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

我理解潜在的哲学,但我不知道如何创建一个能够循环的系统。直到找到最大值。

1 个答案:

答案 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