【问题标题】:Finding the minium value in an array [closed]查找数组中的最小值[关闭]
【发布时间】:2013-05-11 16:18:58
【问题描述】:

请注意,有人告诉我这不是发布此类问题的正确位置,因此请不要浪费您的时间继续阅读。另外,我不得不说,当时我并不完全了解 stackoverflow.com 的用途,而且我不知道存在其他 stackexchange.com 网站。

对此,请重新考虑您对该问题的投票(我会删除它,但我不能)。谢谢。

=====================

那么,这是我的第一个汇编代码,你觉得呢?

具体

1 有没有更好的方法可以通过数组?

2 我使用 SI 来存储数组地址,因为我已经看到这是一种常见的范例。但是为什么要打扰呢?我不能只使用“矢量”吗?

3 其他一般建议? (这是我真正的第一个代码......)

.org     100h

.MODEL      SMALL
.DATA
    VECTOR      DW  3,4,2,0,54,-2,3,4
    MIN         DW  ?

.CODE 
.STARTUP
    XOR         AX,AX           ;counter
    LEA         SI,VECTOR       ;store vector address in SI
    MOV         BX,[SI]         ;BX is the minium, let's suppose it's the first element here
    ADD         SI,2            ;I want to go through the array 2byte at once
    INC         AX              ;scanned elements in AX

TESTMIN:
    CMP         BX,[SI]
    JL          GOAHEAD
    MOV         BX,[SI] 

GOAHEAD:    
    ADD         SI,2
    INC         AX
    CMP         AX,8
    JL          TESTMIN            

ret

谢谢你们:)

【问题讨论】:

标签: arrays assembly x86-16


【解决方案1】:

1 有没有更好的方法可以通过数组?

“更好”取决于您的目标是什么。例如,如果您想最小化代码大小,您可以..

  • MOV BX,[SI]ADD SI,2 融合到LODSW 中(请注意,这将为您提供AX 中加载的单词,而不是BX)。
  • 从 8 开始循环计数器并向下计数。这使您可以在最后摆脱CMP,而只需使用DEC / JNZ。或者更好的是,使用CX 作为循环计数器并使用LOOP 指令(它会为您递减CX)。

我使用 SI 来存储数组地址,因为我已经看到这是一种常见的范例。但是为什么要打扰呢?我不能只使用“矢量”吗?

如果您想在程序中的多个位置引用它,那么将数组的地址放在寄存器中会比将其作为位移放在要引用数组的每条指令中更紧凑的代码。

【讨论】:

    猜你喜欢
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 2018-09-24
    • 2010-12-07
    相关资源
    最近更新 更多