如何在大型模型装配 8086 中使用矩阵?
How to do you work with a matrix in large model assembly 8086?
我有一个从程序集调用过程的 C 程序,我正在使用大型模型,我不明白如何访问我从 C 发送的矩阵。
在我调用装配程序后,我执行以下操作,
C代码:
extern long int f1(long int *arr_ptr[]);
void main()
{
long int arr1[4]= {113891, 319762, 987431, 765437};
long int arr2[4]= {567434, 988885, 654329, 999990};
long int arr3[4]= {123456, 999999, 888880, 498766};
long int *arr_ptr[3];
arr_ptr[0] = arr1;
arr_ptr[1] = arr2;
arr_ptr[2] = arr3;
f1(arr_ptr);}
汇编代码:
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]
中找到第一行的segment:address,要么在
中
在[ES:DI]
中你会找到第一行的第一个值而不是第一行的地址。
为了说明,您应该向我们展示矩阵是如何在 C 中定义的。
编辑
因此,您正在使用 arr_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 程序,我正在使用大型模型,我不明白如何访问我从 C 发送的矩阵。 在我调用装配程序后,我执行以下操作, C代码:
extern long int f1(long int *arr_ptr[]);
void main()
{
long int arr1[4]= {113891, 319762, 987431, 765437};
long int arr2[4]= {567434, 988885, 654329, 999990};
long int arr3[4]= {123456, 999999, 888880, 498766};
long int *arr_ptr[3];
arr_ptr[0] = arr1;
arr_ptr[1] = arr2;
arr_ptr[2] = arr3;
f1(arr_ptr);}
汇编代码:
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]
中找到第一行的segment:address,要么在 中
在
[ES:DI]
中你会找到第一行的第一个值而不是第一行的地址。
为了说明,您应该向我们展示矩阵是如何在 C 中定义的。
编辑
因此,您正在使用 arr_ptr
的地址加载 ES:DI
。然后需要获取arr1
的地址。为此,您需要以下内容:
MOV AX, [ES:DI]
MOV DI, [ES:DI + 2]
MOV ES, AX
然后,可以用MOV EDX,DWORD PTR [ES:DI]
得到arr1[0]
的值。