我用两个C char数组输入汇编程序函数:
EncryptAsm(arr1,arr2)
其中两者都是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)时,一切都很好,但如果它更大则不起作用并抛出错误(例如{{1} } == 1)。
在asm代码中,数组的类型为:
eax
我做错了什么?
答案 0 :(得分:1)
你可以查看movsb的装配指南吗?如果正常的英特尔movsb, 它应该像这样编码:
CLD
MOV ECX ,100
LEA ESI,FIRST
LEA EDI,SECOND
REP MOVSB
此外,需要检查一些事情:
1,SI / DI的段,如果写访问和段长度是正确的
2,REP MOVSB期间的中断保护