只想创建存储在另一个文件中的过程。所以我有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]
但是,这个问题解决了什么?