Intel x86 Assembly,从内存中返回奇怪的值

问题描述

我目前正在为学校做一个汇编作业,我需要声明一个 10 元素的数组,用从 1 到 10 的整数的连续平方初始化数组,然后计算这些值的平均值并将它们存储到一个变量。但是,当我从内存中检索第一个值以计算平均值而不是按预期返回 0001 时,它在 AX 寄存器中返回 0401,这比应有的值高得多。有人能够快速查看我的代码并指出我做错了什么吗?代码如下,谢谢:

        .model small
        .stack  32 
        .data

arr DW 10 DUP(0)
RES DW ?

        .code 
MAIN    proc FAR
    MOV AX,@data 
    MOV DS,AX 

    CALL INIT
    CALL AVG

    MOV RES,AX
    MOV AX,4C00H

    INT 21H

MAIN endp


INIT proc NEAR 
    MOV CX,10
    LEA BX,arr
    MOV SI,1 
    

    A: MOV AX,SI 
           MUL SI 
           MOV [BX],AX 
           INC SI 
           INC BX
           LOOP A 
    RET
INIT endp

AVG proc NEAR 
    MOV CX,10 
    LEA BX,arr
    MOV AX,0
    MOV DX,10 
    
    B: ADD AX,[BX]
           INC BX  
    LOOP B 
    
    DIV DX 
      RET

AVG endp
           
    end MAIN

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)