外部函数获取错误的参数汇编

时间:2015-03-07 10:42:57

标签: assembly

只想创建存储在另一个文件中的过程。所以我有file1.asm主要功能(起点)和file2.asm包含一个过程。

EXTRN MatrixTrack:FAR
.model flat, c
.386p
.stack 100h
.data
    matrix  dw 2, 3, 4, 5
            dw 4, 5, 2, 1
            dw 2, 6, 9, 8
            dw 3, 6, 3, 1
    matrix_dimension dw 4
    element_type dw 2
    result dw ?,"$"
.code
start:
;Assume data segment with ds, es
        push OFFSET result
        push element_type
        push matrix_dimension
        push OFFSET matrix
        call MatrixTrack
        add sp, 0Ah
;Exit operation
end start
END

好吧,在file2中我有下一个:

PUBLIC MatrixTrack
LOCALS
.386p
.model flat, c
.code
MatrixTrack PROC C FAR USES ax bx cx si
    ARG @@matrix_address:word
    ARG @@matrix_dimension:word
    ARG @@element_length:word
    ARG @@result_storage_address:word
;here some operations
ENDP
END

当我在数据监视器中的file1中将参数推送到堆栈时,我看到正常的实际值,但是当我调试过程时,值完全不同。例如,matrix_address是2Eh而不是0Ah,matrix_dimension是52FBh而不是4h,element_length是208h而不是2h,result_storage_address是19Bh而不是2Eh。

我对汇编程序为lst文件中的值创建的bp偏移有点困惑,这可能很重要:

@@ELEMENT_LENGTH          Number [FLAT:EBP+0010]
@@MATRIX_ADDRESS          Number [FLAT:EBP+000C]
@@MATRIX_DIMENSION        Number [FLAT:EBP+000E]
@@RESULT_STORAGE_ADDRESS      Number [FLAT:EBP+0012]

但是,这个问题解决了什么?

0 个答案:

没有答案