// lodsb.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <string.h> /************************************************************************/ /* 载入串指令 /* LODS LODSB LODSW LODSD 例子 /* 运行结果: /* bcdef /* g1 /* 2345 /************************************************************************/ int main(int argc, char* argv[]) { char s[33] = "abcdefg123456789"; char lodsb_chars[ 10 ] = {0}; char ret[ 10 ] = {0}; short vWORD = 0; // 备用载入 字 数据 int vDWORD = 0; // 备用载入 双字 数据 __asm { xor eax,eax // 清空eax lea esi, s // esi 指向数据 s mov ecx, 2 // 执行两次 lodsb // 载入串指令: LODSB、LODSW、LODSD ;将 ESI 指向的数据载入到 AL/AX/EAX, 执行后 ESI 自动变化 rep lodsb // mov al byte ptr [esi]; esi = esi + sizeof( byte ); // 数据载入到al中 mov lodsb_chars[ 0 ], al // b lodsb mov lodsb_chars[ 1 ], al // c lodsb mov lodsb_chars[ 2 ], al // d lodsb mov lodsb_chars[ 3 ], al // e lodsb mov lodsb_chars[ 4 ], al // f lodsw // 载入串 字 指令 mov vWORD,ax // g1 lodsd // 载入串 双字 指令 mov vDWORD,eax // 2345 } printf( "%s ", lodsb_chars ); strncpy( ret, (char*) &vWORD, 2 ); // 将字符串 ps 中 2 个字符复制到字符串 ret 中。 printf( "%s ", ret ); strncpy( ret, ( char* ) &vDWORD, 4 ); // 将字符串 ps 中 4 个字符复制到字符串 ret 中。 printf( "%s ", ret ); getchar(); return 0; }
已有 0 人发表留言,猛击->>这里<<-参与讨论
ITeye推荐