首页 文章

assembly x86使用stack的值作为指针?

提问于
浏览
1

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

我必须创建具有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:0000cs:0001 ,_ cs:0002cs:0003 )而不是偏移值(这里是: 12 ,_ 34 ) .

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

有人能帮助我吗?

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
    

相关问题