如何在大型模型组件8086中使用矩阵?

时间:2017-06-10 13:38:44

标签: assembly x86-16

我有一个从程序集调用过程的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)

1 个答案:

答案 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]的值。