【问题标题】:Intel 8086 Finding Largest Value in Integer Array [duplicate]英特尔 8086 在整数数组中找到最大值 [重复]
【发布时间】:2021-03-18 08:40:06
【问题描述】:

我是汇编语言的新手,我正在尝试开发一个在整数数组中查找最大值的过程,但我在第 85,86 和 87 行不断收到错误“非法内存引用”。我该如何解决这个问题?另外,我的代码会在数组中找到最高值吗?

highVal dw ?
data dw 0,0,0,0,0
input dw ?
count dw 0 

findHigh proc
mov cx,0
mov bx,0

L3:
    mov count,cx
    mov si,count
    inc bx
    (85)mov highVal,data[si]
    (86)mov input,data[bx]
    (87)cmp highVal,input
    jle L3
    jg L4

L4: 
    mov ax, highVal
    ret

findHigh endp

【问题讨论】:

    标签: arrays assembly x86-16 tasm


    【解决方案1】:

    这是一个编译时错误,可能来自 TASM?

    所有三个指定的行都试图将数据从内存中的某个位置移动到内存中的其他位置。 8086 不支持。只有一个操作数可以是内存位置。


    Re:“我的代码会在数组中找到最高值吗”,这对于 StackOverflow 来说并不是真正的主题,因为至少是广泛性。这不是代码审查网站。

    但既然我现在已经读过它,我的头顶:

    • 您的数组包含两个字节长的单词,因此 inc 是不够的;
    • 您已将 count 声明为一个内存位置,您将在其中重复存储您为 cx 播种的 0,并且不执行任何其他操作;
    • jgjle 之后是多余的,因为它会跳转到立即下一个语句;但是
    • 即使所有这些问题都已解决,一旦发现任何高于highVal 的值,您也会立即退出。所以你不一定会找到最高的——如果给定数组0, 1, 2,你会在看到1时退出。

    我认为至少您可能希望使用数组大小​​播种cx,去掉前两个movs,并在ret 当前所在的位置前面放置一个loop .也就是说,除了决定你在内存中真正想要什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多