字符串处理指令:
lods: 从[esi]传给累加器,根据df和操作字长调整esi
stos: 从累加器传给[edi],根据df和操作字长调整edi
movs: 直接从[esi]传到[edi],,根据df和操作字长调整esi和edi
scas: 累加器与[edi]相减比较,不影响操作数,影响标志位
cmps: [esi]与[edi]相减比较,不影响操作数,影响标志位
重复前缀:
rep: 若ecx=0,结束重复,否则ecx减1,重复操作
repz/repe: 若ecx=0或zf=0,结束重复,否则ecx减1,重复操作
repnz/repne: 若ecx=0或zf=1,结束重复,否则ecx减1,重复操作
1.字符串拼接
char s1[81], s2[81], s3[81];
printf("s1 = ");
scanf("%s", s1);
printf("s2 = ");
scanf("%s", s2);
_asm{
lea edi, s3
lea esi, s1 //獲取s1存儲地址
L1:
movsb
cmp [esi-1], 0
jne L1
dec edi //刪除s1的終止符
lea esi, s2 //獲取s2存儲地址
L2:
movsb
cmp [esi-1], 0
jne L2