我有一个从程序集调用过程的C程序,我正在使用大型模型,我不明白如何访问我从C发送的矩阵。 在我调用装配程序后,我执行以下操作, C代码:
PUBLIC _f1
_f1 PROC FAR
.386
PUSH BP
MOV BP,SP
PUSH BP
PUSH ES
PUSH DI
MOV DI,[BP+6];take the offset
MOV ES,[BP+8];take the segment
MOV EDX,DWORD PTR [ES:DI];store the first value at row 1 and col 1
POP DI
POP ES
POP BP
RET
_f1 ENDP
END
汇编代码:
import os, sys, atexit
def ex():
os.system('TASKKILL /F /IM pythonw.exe')
atexit.register(ex)
答案 0 :(得分:0)
MOV DX,[BX]
与MOV DX,[DS:BX]
相同。换句话说,假设矩阵值在DS:
中。
但是如果矩阵到达FAR
指针,其片段已加载到ES:
中,那么矩阵值在DS:
中的可能性很小。
所以,以下之一是真的:
在[ES:DI]
中,您会找到第一行的细分:地址,或
在[ES:DI]
中,您会找到第一行的第一个值,而不是第一行的地址。
为了说明,你应该告诉我们如何用C语言定义矩阵。
修改
因此,您正在使用ES:DI
的地址加载arr_ptr
。然后,您需要获取arr1
的地址。为此,您需要以下内容:
MOV AX, [ES:DI]
MOV DI, [ES:DI + 2]
MOV ES, AX
然后,您可以使用arr1[0]
获取MOV EDX,DWORD PTR [ES:DI]
的值。