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

Assembly 如何在大型模型组件8086中使用矩阵?,assembly,x86-16,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

我有一个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

MOV-DX[BX]
MOV-DX[DS:BX]
相同。换句话说,它假设矩阵值在
DS:

但是,如果矩阵到达的是
FAR
指针,其段加载在
ES:
中,那么矩阵值位于
DS:
中的可能性很小

因此,以下情况之一是正确的:

  • 您可以在
    [ES:DI]
    中找到第一行的段:地址,或者

  • [ES:DI]
    中,您将找到第一行的第一个值,而不是第一行的地址

为了说明,您应该向我们展示如何在C中定义矩阵

编辑

因此,您正在加载地址为
arr\u ptr
ES:DI
。然后您需要获取
arr1
的地址。为此,您需要以下各项:

MOV AX, [ES:DI]
MOV DI, [ES:DI + 2]
MOV ES, AX

然后,您可以使用
MOV-EDX,DWORD-PTR[ES:DI]
获取
arr1[0]
的值查看C程序的反汇编,查看它将东西放在哪里,并在那里提取数据。我使用的是turbo C,介意告诉我怎么做吗?你是说这些MOV命令是正确的,但问题出在其他地方吗?`long int arr1[4]={113891319762987431765437};long int arr2[4]={56743498888565432999990};long int arr3[4]={1234569999880498766};长整数*arr_ptr[3];arr_ptr[0]=arr1;arr_ptr[1]=arr2;arr_ptr[2]=arr3`请把它放在问题中并正确格式化。我正试图发布我的C代码和程序集,但我一直收到一个错误,它不正确formatted@MikeNakis-对于Microsoft assembler,语法是
mov-ax,es:[bx]
mov-dx,es:[bx+2]
mov-ax,es:2[bx]
。我删除了我先前的评论。
MOV AX, [ES:DI]
MOV DI, [ES:DI + 2]
MOV ES, AX