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

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

下一篇: Assembly code redundancy in optimized C code