Assembly 如何在大型模型组件8086中使用矩阵?
我有一个C程序,从汇编中调用一个过程,我在处理大型模型,我不知道如何访问我从C发送的矩阵。 调用组装过程后,我执行以下操作:, C代码: 汇编代码: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
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]
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