0

我使用两个 C char 数组输入汇编函数,如下所示:

EncryptAsm(arr1,arr2)

其中两个都是 type char*,一个包含文本,第二个充满了 '#' 符号,它就像二维数组一样,两者的长度相同。

我正在尝试将一些值从第一个数组传递到 asm 过程中的第二个数组:

mov ecx,row ;calculating index of arr2   index=[row*inputLength+column]
imul ecx,ebx
add ecx,column

mov eax,1 ;calculating index of arr1
imul eax,iterator

mov esi,arr1[eax]
mov edi,arr2[ecx]

movsb

当两个数组的索引都等于 0(eax并且ecx都是 0)时,一切都很好,但如果它更大,它就不起作用并引发错误(例如eax==1)。

在 asm 代码中,数组的类型为:

arr1:ptr byte, arr2:ptr byte

我究竟做错了什么?

4

1 回答 1

1

你能检查一下movsb的组装指南吗?如果是普通的 Intel movsb,它的代码应该是这样的:

CLD
MOV ECX ,100
LEA ESI,FIRST
LEA EDI,SECOND
REP MOVSB

而且,需要检查一些东西:

1、SI/DI的段,如果写权限和段长是对的

2、REP MOVSB期间的中断保护

于 2013-11-17T22:34:33.077 回答