Assembly Extern函数获取错误的程序集参数
只想创建一个存储在另一个文件中的过程。因此,我有带主函数(起点)的file1.asm和包含过程的file2.asmAssembly 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
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位代码吗?