Assembly Extern函数获取错误的程序集参数

Assembly Extern函数获取错误的程序集参数,assembly,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

只想创建一个存储在另一个文件中的过程。因此,我有带主函数(起点)的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
在文件2中,我有下一个:

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
当我在data watch中将参数推送到file1中堆栈时,我看到了正常的、真实的值,但是当我调试过程时,这些值是完全不同的。例如,
matrix\u address
是2Eh而不是0Ah,
matrix\u dimension
是52FBh而不是4h,
element\u length
是208h而不是2h,
result\u storage\u 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]

但这些地址怎么了

您似乎在混合16位和32位代码,请决定要哪一个。PS:经验法则是除非你完全理解,否则不要使用聪明的汇编程序特性。特别是对于初学者来说,最好是手工写出来。@Jester,对不起,你能告诉我16位和32位代码是在哪里混合的吗?或者我应该做些什么来找到问题解决方案
.model flat
.386p
提示您正在编写32位代码。但是所有的
字和16位寄存器都暗示您正在编写16位代码。您应该决定编写代码的环境,并相应地更改其中一个环境。@Jester,我需要试试.model small,.386,不是吗?可能是。那你是在写16位代码吗?