我想知道如何将指针参数传递给过程?
我必须创建具有2个参数的函数:
该函数获取数组的大小并对列进行求和。
这就是我编码的内容:
.MODEL Small .STACK 64 ; +===============================+ ; | DATA | ; +===============================+ .DATA array1 dw 1,2,3,4 array1size dw 4 result dw ? address dw ? ; print TMP dw 0 ; general temporary variable .. .code addNumbers proc ; reset result lea di,result ; use stack mov bp,sp ; get num array mov bx,[bp+2] ; get num of numbers mov cx,[bp+4] ; making additiontion adding: add [di],bx inc bx; go to the next bx loop adding ret 2 endp ; start start: mov ax,@DATA mov ds,ax ; set strings push array1size push offset array1 call addNumbers ; print mov dx:ax,result call printNumber mov ah,4ch mov al,0 int 21H end start
问题 - 它向结果添加了偏移指针(这里是cs:0000
,cs:0001
,cs:0002
,cs:0003
)而不是偏移值(这里是:{ {1}},1
,2
,3
)。
因此,结果将是6而不是10。
有人能帮助我吗?
答案 0 :(得分: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