2

我想知道如何将指针参数传递给过程?

我必须创建具有 2 个参数的函数:

  1. 单词数组
  2. 数组的大小

该函数获取数组的大小并对列求和。

这就是我编码的内容:

.MODEL 小
.堆栈 64

; +=================================+
; | 数据 |
; +=================================+

。数据
array1 dw 1,2,3,4
array1size dw 4
结果 dw ?
地址 dw ?
; 打印
TMP dw 0 ; 一般临时变量..
。代码

addNumbers 过程
; 重置结果
    LEDI,结果
; 使用堆栈
    移动 bp,sp
; 获取 num 数组
    mov bx,[bp+2]
; 获取数字的数量
    mov cx,[bp+4]
; 加法
添加:
    添加 [di],bx
    公司 bx; 去下一个bx
循环添加
    保留 2
结束

; 开始
开始:
    移动斧头,@DATA
    mov ds,ax
; 设置字符串
    推数组1大小
    推送偏移数组1
    调用 addNumbers
; 打印
    mov dx:ax,结果
    调用 printNumber
    mov ah,4ch
    移动,0
    整数 21H
结束开始

问题 - 它增加了偏移指针(这里是cs:0000, cs:0001, cs:0002, cs:0003)而不是偏移值(这里是:1, 2, 3, 4)。

因此,结果将是 6 而不是 10。

有人可以帮助我吗?

4

1 回答 1

2
INC BX

当然会在 BX 中的指针上加 1(字节)。如果你需要移动一个 WORD,你必须添加单词的大小。说是2个字节,那么你需要

ADD BX, 2

而不是INC.

您的另一个问题是您不添加指向的值[BX],而是添加指针本身BX。您可以使用备用寄存器,例如AX计算总和。

    MOV  AX,0
adding:
    ADD  AX,[BX]
    ADD  BX,2
    LOOP adding
    MOV  [result],AX

    RET  4
于 2012-05-31T16:52:05.800 回答